Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #96, ДЕКАБРЬ 2006 г.

Карманное рукоприкладство

goabruce & porosenok

Хакер, номер #096, стр. 096-076-4


"mBlueSche "

При этом важно не забывать о пробелах, а также о том, что это уникод. Теперь приступаю к замене:

text1.Trim(" ".ToCharArray());

Заменяю строкой:

return "mBlueSche "

Оставшиеся байты до инструкции leaves IL_01c8 поменяю на 00 (это код nop'a). После всех проделанных действий можно приступать к регистрации. Ввожу любой регистрационный номер, в результате чего программа перестает отсчитывать дни до своей кончины :).

Подопытный № 2 (keygen)

Патч подходит, когда важен не процесс, а результат. Но ты ведь уже что-то начинаешь понимать в кряке, поэтому вершина твоего мастерства - кейген. Установив программу и запустив ее, видим, что прога будет работать только 7 дней, при этом регистрация происходит по схеме «Имя владельца/Код». Что же, открываю уже полюбившийся рефлектор и в течение пяти часов ищу обработчик кнопки «ОК», которую нажимает пользователь. Шутка :)! На это ушло не более 30 секунд и пяти кликов мышки - функция btnOK_Click. Все достаточно примитивно. Есть функция проверки кода на валидность IsRegKeyOK, которая получает имя пользователя и код. Можно, конечно, сразу пропатчить, но ведь я решил написать кейген, поэтому смотрю функцию IsRegKeyOK. Алгоритм не сложный, но разбираться лень. Просто беру и копирую текст функции от начала до сравнения строк «text1» и «Code», создаю свой проект, а в нем - новую функцию, которая будет возвращать строку, и затем просто вставляю в нее скопированный текст. Ну, а все остальное, думаю, если захочешь, ты сможешь сделать сам. А если не захочешь, просто посмотри на последнее условие программы: должно быть, автор - полный дегенерат, если оставил заднюю дверь открытой.

Подопытный № 3 (кейген)

Не буду ходить вокруг да около, а скажу сразу, что самое удобное средство для ковыряния в Portable executable for ARM - это IDA. А если к нему добавить плагин wince_remote_arm, позволяющий отлаживать приложения для КПК, то ему вообще цены не будет. Я слышал про чудаков, которые используют Mirosoft Embedded Visual C++ для отладки и анализа кода, но, говорят, они скоро вымрут :). Для следующих исследований мне также понадобится связка Microsoft Device Emulator & Microsoft ActiveSync. Как обычно устанавливаю приложение. Пробую его запустить - приложение сообщает, что будет жить 7 дней. Регистрация при этом происходит по схеме «FirstName/LastName/RegistrationKey». После ввода произвольных данных передо мной на экране появляется обычный MessageBox со строкой «Code is incorrect». Далее копирую приложение на ПК и открываю его в IDA, предварительно выбрав тип приложения Pocket PC ARM Executable. После того как IDA завершит анализ кода, ищу строку «Сode is incorrect». Для этого нужно нажать Shift+F10. После непродолжительных поисков нахожу строку «Code is incorrect», которая вызывается всего один раз по адресу .text:00022294. Посмотрев внимательно на код, можно заметить, что переход на эту часть программы осуществляется с адреса .text:0002226C, если в R0 находится значение, отличное от -1. Следовательно, по близости должен быть блок, осуществляющий проверку введенного кода и возвращающий результат проверки. Этим блоком является функция sub_11A08, вызов которой осуществляется по адресу .text:0002225C. Смотрю, как и что делает эта функция, для чего запускаю программу под отладчиком, предварительно поставив бряк, с помощью F2 по адресу .text:0002225C. Для того чтобы запустить отладку, достаточно нажать F9. IDA попытается найти приложение на удаленном компьютере (если она его не обнаружит, то предложит скопировать его туда). Пробую зарегистрироваться, введя данные: Cracker, Cracker, 111222. Вот я и остановился по адресу 0002225C. Посмотрю, что при этом находится в регистрах, для этого мне понадобится окно «General registers». В R1 передается адрес 0006E5E8, который указывает на строку «CRACKERCRACKER», то есть FirstName и LastName передаются одной строкой. В регистре R5 находится адрес 0006E580, по которому располагается достаточно интересная последовательность символов: 0x17\0x17\0x17\0x14\0x14\0x14. Возможно, она имеет какое-то отношение к проверке введенных данных, но не буду торопиться с выводами. В остальных регистрах нет ничего интересного. Теперь захожу в функцию по F7 и выясняю истину. Функция имеет достаточно малый размер. Она не делает ничего особенного, кроме проверки того, чтобы строки, переданные через R1 и R5, были не нулевой длины, и посимвольной проверки строк, переданных через R1 и R5. Следовательно, строка «0x17\0x17\0x17\0x14\0x14\0x14» - это каким-то образом извращенный код 111222, и моя задача - отследить место формирования этой строки и понять алгоритм ее формирования. Для этого ставлю бряк по адресу 00022190 (листинги ищи на нашем DVD) и снова пробую зарегистрироваться. Дохожу до .text:000221C0 и попадаю в интересный цикл, который делает буквально следующее:

Назад на стр. 096-076-3  Содержание  Вперед на стр. 096-076-5