Перейти к содержанию

[Uplink] учусь ручному поиску указателей. Споткнулся об lea.


Рекомендуемые сообщения

Я только-только заинтересовался взломом игр, посмотрел курс видео на ютубе и решил потренироваться. Решил найти указатель на значение денег в игре, что была под рукой -- Uplink. 
И возможно зря. Uplink довольно замудрённая игра со всякими секретными штуками, шифрованными сохранениями и головоломками. Предполагаю, что и в коде игры могут быть какие-нибудь сюрпризы для взломщиков, которые сильно усложнят обучение новичка.
Для начала: подскажите, мои действия по поиску указателей вообще верны, или я от незнания занимаюсь бессмысленным кодовредительством? 

Для начала я нахожу значение денег. Следующим шагом ставлю брейкпоинт на запись, вижу инструкцию, что очень часто обращается к адресу денег. Предполагаю, что это что-то вроде отрисовки баланса на экране.
Далее я исследую дизассемблер. Я вижу инструкцию 

>>>mov ECT,[ESI+cc]


В данном случае ECT -- адрес денег, а ESI -- адрес структуры "Банковский Аккаунт". В структуре по смещению CC хранится значение денег.

Для нахождения статического адреса я беру число из ESI и ищу, как оно формируется. Выше по коду я нахожу функцию, в конце которой ещё одна инструкция

>>>mov ECT,[ECT+c]


Ну и далее я проделываю то же самое -- нахожу где формируется ECT, записываю смещение, иду выше по коду, и так до тех пор, пока не наткнусь на инструкцию вида

>>>mov ESI,GAME.EXE+498DC


Копирую значение, добавляю адрес в таблицу, жму галочку "указатель" и прибавив к этому GAME.EXE смещения, найденные ранее, я получаю указатель.

Всё верно? До сих пор этот метод срабатывал во всяких весёлых фермах и System Shock 2.

Но сейчас я столкнулся с непониманием устройства Cheat Engine. Алгоритм поиска указателя остался прежним, но теперь я наткнулся на инструкцию

>>>lea ECT,[ESI+16c]


Я прочитал об этой инструкции в сети, и как я могу понять, в данном случае важно только то, что инструкция просто прибавляет к числу ESI 16c. То есть превращает условное 00000000 в 0000016c.
И тут я попал в тупик, поскольку не понимаю, что мне делать с этим числом. Ведь при добавлении числа со смещением в таблицу, в качестве указателя, оно, что логично, указывает на какие-то случайные значения.

То бишь, вот моя цепочка от инструкции lea.
баланс <--- 05D8A490+cc <--- 05E8374C+c <--- [05E835E0+16c] (lea) То есть, третье звено -- это не значение, и не смещение. Это адрес+число. 0000+01 = 0001. 05E83 5E0+16c = 05E83 74C.
И как мне с этим работать, как в окне добавления указателя прибавить число к адресу? И нужно ли это вообще делать, или я просто не понимаю всего функционала программы и пытаюсь забивать гвозди микроскопом? 

В завершении хочу добавить, что моя цель -- не взломать игру, а понять, почему привычный метод поиска статического адреса с добавлением в таблицу Cheat Engine указателя не работает, и научиться решать эту проблему.

Изменено пользователем sivka
Стилизация кода в соответствующие теги
Ссылка на комментарий
Поделиться на другие сайты

  • sivka изменил название на [Uplink] учусь ручному поиску указателей. Споткнулся об lea.

Не слышал про регистр ECT. Ты уверен, что ничего не путаешь?
По поводу LEA - попробуй пошаговую отладку, посмотри, что окажется в целевом регистре после выполнения этой инструкции. Это будет вместо тысячи слов. Но если брать твой пример выше

3 часа назад, sivka сказал:

То есть превращает условное 00000000 в 0000016c

То да, в целевом регистре окажется именно это число.

Ссылка на комментарий
Поделиться на другие сайты

43 минуты назад, Xipho сказал:

Не слышал про регистр ECT. Ты уверен, что ничего не путаешь?

Это я так, набрал просто для примера.
Суть тут вот в чём. 

В обычной ситуации я пытаюсь найти указатель, составляя цепочку смещений от статического адреса (условного game.exe+4914D) до баланса денег.
Получается очень огромное количество смещений. Под смещениями я имею в виду

mov esi,game.exe+4914D
mov eax,[esi+192]
mov esi,[eax+04]
mov eax,[esi+0c]
...
mov eax,[esi+cc] <--- eax является адресом на баланс игрока.


Потом я жму кнопку "Добавить Адрес" в cheat engine и прописываю указатель [game.exe+4914D] и чуть выше в том же окне указываю найденные смещения.

Но в данном случае, я вычисляю смещения, а предпоследней инструкцией идёт lea, то есть прибавление 16c к числу 05E835E0(после каждой операции в игре, данное число изменяется. Но я использовал его для примера).

mov esi,game.exe+4914D
mov eax,[esi+192]
mov esi,[eax+04]
mov eax,[esi+0c]
...
lea esi,[eax+16c]
mov eax,[esi+cc] <--- eax является адресом на баланс игрока.


И я не понимаю, как поступить, если хочу добавить в таблицу указатель. Что прописывать в смещениях? Или это делается как-то иначе? Скриптами, может?
Я совсем новичок, и может просто не понимаю сути и задаюсь глупыми вопросами.
 

Изменено пользователем sivka
Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, sivka сказал:

Я прочитал об этой инструкции в сети

Ты уверен что внимательно читал? Я на пример раньше думал что инструкция lea это запись адреса в регистр.  То есть адрес [esi+cc] записывает в регистр esp. И по наивности глубокой считал, что теперь в значении регистра esp равно адресу [esi+cc]. Как я деградировал!!!

Ссылка на комментарий
Поделиться на другие сайты

Ого тут указатели большие.

[[[[[[[[[[[[[[[UplinkOS_RUS.exe+4506D4]+C]+380]+4]+4]+4]+4]+4]+4]+4]+4]+4]+4]+C]+178]+CC

Это деньги. Искал трассировкой.

(Русская версия с гитхаба.)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.