Поиск функций в ассемблерном коде клиента Теры (вопросы)
Решил в качестве тренировки найти функцию, которая отвечает за начало сбора ресурса.
Я постараюсь объяснить свой алгоритм поиска и надеюсь более опытные в этом деле люди подскажут где я ошибаюсь и как исправить мои ошибки.
Исходные данные:
1)Указатель на флаг, которые становится единичкой при сборе
Вот этот оффсеты {TERA.exe+01C5D34C,14,40,4,3c8,c4}
Все операции я проделывал в cheat engine т.к. с другими вещами не особо знаком.
1)Проверил что пишет по этому адресу.
Вышел на команду mov [esi+000000C4],ecx, адрес 013C488A
Я бы сказал, что это какая-то сканирующая команда т.к. выполняется она очень часто. Смотрим командами выше
2)
cmp [eax+00000194],ecx
setne cl
Опуская все логические рассуждения получаем, что в eax записывается что-то типа ид сбора
3)ищем кто записывает по адресу eax+00000194.
4)По этой части выходим на функцию, которая вызывается при сборе
5)С помощью функции debug and trace выходим, возможно на начало функции).
Что собственно получилось у меня дальше - я попытался выполнить функцию находящуюся по этому адресу, но ничего не произошло (пока добирался до неё клиент крашился, а тут ничего не произошло).
Возможно кто-то уже занимался и может более точно подсказать как и что искать, нужно ли делать инъекцию своего ассемблерного кода и т.п.
Заранее спасибо!
Привет! Ты все же решил остановиться на этой учетке или меняешь в зависимости от погоды?
Прежде чем вызывать функцию, нужно определить какие параметры она принимает, обычно это может быть цепочка функций, где постепенно формируются какие-либо переменные и передаются в следующую и следующую функцию. Адрес возврата от куда была вызвана текущая функция хранится в стеке. Обычно он лежит на самой верхушке стека, если конечно текущая функция не запушила еще какие - либо данные.
Я остановился на этой учётке. Я на ту даже не захожу.
По поводу ассемблера теперь.
если я правильно понял там возврат происходит через стек и происходит автоматически по вызову ret т.е. в целом должна быть какая-то корневая функция, которая вызывается по нажатию клавиши.
В идеале я так понимаю нужно смотреть стек, перед возвратом.
Тогда в целом возникает 1 проблема и 1 вопрос.
проблема - не знаете ли вы ка в cheat engine посмотреть стек - с помощью trace там можно на каждом шаге посмотреть значения регистров и флагов, но со всем остальным вроде плохо (Точнее я не знаю как там посмотреть это)
в итоге мы идём, идём по дереву функций и в итоге должны прийти к функции, которая без проблем вызывается обычным вызовом по адресу или ещё какие-то подводные камни?
Заранее спасибо
а что передача аргументов в функцию это подводные камни? Наоборот это расширяет возможности. Нужно как-то интуитивно что ли понимать, где собственноручно передать аргументы, а где воспользоваться функцией, которая сформирует эти аргументы за нас. Опять-таки в зависимости от того что нужно. Насчет проблемы - Full Stack выбери.
Про расширение возможностей я в целом с вами согласен, но для начала разобраться бы в основах. Под подводными камнями я подразумевал какие-то другие проблемы
P.S.Прощу прощения за глупый вопрос - где этот Full Stack выбрать?