Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Портативный взлом

Gelios

Спецвыпуск: Хакер, номер #057, стр. 057-066-6


Этап второй. Правим главное меню

Теперь нужно как-то убрать пункт главного меню Register. Для этого загружаем файл в Resource Hacker и в разделе Bitmap пробуем найти картинку с этой надписью. В данном случае номер этого ресурса равен 389 или 185 в шестнадцатеричной системе. Это изображение, скорее всего, загружается функцией LoadBitmap, поэтому ищем в IDA в окне Names Window эту функцию. Смотрим, по какому адресу она вызывается - в отладчике ставим на этот адрес breakpoint. Далее вызываем главное меню и ждем, когда сработает точка останова. У LoadBitmap вторым параметром является номер загружаемого ресурса. Тут нужно сказать, что в отличие от ПК, где параметры передаются через стек, КПК передает их через регистры начиная с R0. То есть нам нужно остановиться, когда регистр R1 будет равен 185, а до этих пор просто жмем <F5>. Итак, доходим до этого момента и смотрим Call Stack – функция была вызвана с адреса 12348, а это какая-то функция, которая, если посмотреть, вызывается из многих мест. Поэтому ставим точку останова на конец этой функции (на адрес 12410) и жмем <F5>. Далее один раз <F11>, чтобы выйти из функции, и оказываемся на 16FD8. Смотрим в IDA, что находится по этим адресам, и видим, что по адресу 16FC0 находится условный переход.

Если он не выполняется, то вызывается функция загрузки изображения, поэтому нужно всего лишь сделать этот переход безусловным, то есть поменять байт по адресу 16FC3 с 1A на EA. Делаем это, как и ранее в hex-редакторе, обновляем файл и смотрим результат. Отлично - пункта меню больше нет ;). В принципе, это все: можно играть, и ничто не напомнит о регистрации.

Напоследок

Часто бывает легче написать кейген, а не патчить программы, что, кстати, касается и нашего примера. Но, к сожалению, объем статьи ограничен и невозможно написать обо всем. Кейгены, без сомнения, предпочтительнее патчей, однако ради них необходимо более подробно изучить систему команд. У тебя будет чем заняться в свободное время :).

Некоторые команды ассемблера

B – Branch, безусловный переход, соответствует команде jmp

Bxx – условный переход; частный случай – BEQ, Branch if EQual (флаг Z=1)

BL – Branch with Link, вызов функции, соответствует команде call

LDRB - загрузка в первый операнд байта, находящийся по адресу, определяемому вторым операндом

СMP – compare, сравнение

Назад на стр. 057-066-5  Содержание