|

Карманная безопасность
Xakep, номер #035, стр. 035-056-6
Натравив дизассмеблер PilotDis на handmap-dx.prc, получаем файлик handmap-dx.prc.s примерно следующего содержания:
00000838 4a47 L32 TST.W D7
0000083a 6734 BEQ L35
0000083c b646 CMP.W D6,D3
0000083e 6730 BEQ L35
00000840 4a47 TST.W D7
00000842 6c04 BGE L33
00000844 7000 MOVEQ #0,D0
00000846 6004 BRA L34
00000848 303c009f L33 MOVE.W #159!$9f,D0
0000084c 3d40fff6 L34 MOVE.W D0,-10(A6)
00000850 3006 MOVE.W D6,D0
Честно говоря, толку от него даже опытному хакеру немного. И тут нам на помощь приходит если уж не Чип и Дейл, то уж точно лучший друг реверс-инженера - IDA, наш любимый и замечательный Iнтерактивный DизAссемблер. IDA умеет распознавать и парсить формат PRC, а также вполне ничего себе разбирает M68K-ассемблер. Это третий и самый важный инструмент. С его помощью с пальмовыми прогами можно сделать все что угодно.
Handmap в студию
Итак, грузим handmap-dx.prc в IDA. А параллельно попробуем prc2bin на нем же. В одном окне у нас генерируется результат prc2bin, в другом - над файлом призадумалась IDA. Среди сгенерированных prc2bin'ом файлов ищем все *alt*.bin файлы. Это файлы со строками для элементов интерфейса. Для чего? Очень просто. HandMap позволяет зарегистрировать себя будучи установленным уже на пальме. Значит, нам надо найти участок кода, где он делает проверку "сериального" номера. А для этого нам нужна форма/окно диалога, в которой есть текст "enter serial number" или "register".
Найдя нужный alt-файлик, смотрим на его номер - Talt044c.bin. Переводим 044c из шестнадцатиричного в десятичный 1100 и ищем в IDA в секции данных Talt такого номера. Нашли:
Теперь, зная то, что это сообщение будет показано в виде MessageBox'а, ищем в коде специальную функцию FrmAlert, которая ссылается на номер 1100. Найти ее можно с помощью простого текстового поиска по ALT+T. Большое разнообразие инструкций поначалу сбивает с толку; процесс анализа можно значительно упростить, если выставить галочку Autocomments в окне диалога General Options на закладке Disassembly. После этого каждая команда будет снабжена пояснительным комментарием, что при отсутствии документации на опкоды и инструкции вполне может быть полезным.
Пройдемся немножко по коду и... вуаля! Заветный JMP (на пальме он выглядит как BEQ - Branch If Equal) найден! Осталось только заменить парочку байт в нужном месте. Чтобы не вычислять, где именно нужно править, достаточно включить в опциях IDA галочку "Show opcodes" и выписать несколько байт инструкций, которые идут до операции BEQ. Потом можно найти последовательность этих байт в handmap-dx.prc в HIEW и исправить следующий за ними байт 0xB3 на 0x42. Сделать это со смещением по адресу 0xC468 в этом же файле.
Вот, собственно, и все. Мои поздравления с первой взломанной пальмовой программой. А ведь сейчас их уже больше 10 000!!! ;-)
Назад на стр. 035-056-5 Содержание
|