sivka Опубликовано 6 декабря, 2022 Поделиться Опубликовано 6 декабря, 2022 (изменено) Я только-только заинтересовался взломом игр, посмотрел курс видео на ютубе и решил потренироваться. Решил найти указатель на значение денег в игре, что была под рукой -- 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 указателя не работает, и научиться решать эту проблему. Изменено 6 декабря, 2022 пользователем sivka Стилизация кода в соответствующие теги Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 декабря, 2022 Поделиться Опубликовано 6 декабря, 2022 Не слышал про регистр ECT. Ты уверен, что ничего не путаешь? По поводу LEA - попробуй пошаговую отладку, посмотри, что окажется в целевом регистре после выполнения этой инструкции. Это будет вместо тысячи слов. Но если брать твой пример выше 3 часа назад, sivka сказал: То есть превращает условное 00000000 в 0000016c То да, в целевом регистре окажется именно это число. Ссылка на комментарий Поделиться на другие сайты Поделиться
sivka Опубликовано 6 декабря, 2022 Автор Поделиться Опубликовано 6 декабря, 2022 (изменено) 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 является адресом на баланс игрока. И я не понимаю, как поступить, если хочу добавить в таблицу указатель. Что прописывать в смещениях? Или это делается как-то иначе? Скриптами, может? Я совсем новичок, и может просто не понимаю сути и задаюсь глупыми вопросами. Изменено 6 декабря, 2022 пользователем sivka Ссылка на комментарий Поделиться на другие сайты Поделиться
Pitronic Опубликовано 6 декабря, 2022 Поделиться Опубликовано 6 декабря, 2022 5 часов назад, sivka сказал: Я прочитал об этой инструкции в сети Ты уверен что внимательно читал? Я на пример раньше думал что инструкция lea это запись адреса в регистр. То есть адрес [esi+cc] записывает в регистр esp. И по наивности глубокой считал, что теперь в значении регистра esp равно адресу [esi+cc]. Как я деградировал!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Partizan Опубликовано 6 декабря, 2022 Поделиться Опубликовано 6 декабря, 2022 Наглядно. Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
Partizan Опубликовано 7 декабря, 2022 Поделиться Опубликовано 7 декабря, 2022 Ого тут указатели большие. [[[[[[[[[[[[[[[UplinkOS_RUS.exe+4506D4]+C]+380]+4]+4]+4]+4]+4]+4]+4]+4]+4]+4]+C]+178]+CC Это деньги. Искал трассировкой. (Русская версия с гитхаба.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения