Я только-только заинтересовался взломом игр, посмотрел курс видео на ютубе и решил потренироваться. Решил найти указатель на значение денег в игре, что была под рукой -- 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 указателя не работает, и научиться решать эту проблему.