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

Готовим кейген

ARA

Хакер, номер #089, стр. 089-064-2


Начинаем

Теперь внимательно посмотрим на результат работы DeDe.

Нам будут интересны формы TdlgRegWiz – диалог регистрации и TdlgItcorrectSerial, а особенно интересны обработчики событий нажатия клавиш в этих процедурах, точнее в первой. Если кто забыл, то можно еще раз проверить, что сообщение о неверно введенном коде появляется после нажатия кнопки Next, поэтому смотрим btnNextClick. Начало обработчика события нажатия клавиши Next будет по адресу: 00494A2C. В процессе регистрации нам нужно было дважды нажимать эту клавишу: при выборе регистрации и после ввода лицензионной информации, поэтому нас интересует только последнее событие. Теперь можно посмотреть, как будет происходить считывание и проверка введенных данных под отладчиком, не забывая посматривать на листинг DeDe. Чтобы немного облегчить читаемость кода в OllyDbg, можно воспользоваться одним из ее плагинов – GODUP. Он работает с сигнатурами от IDA и значительно улучшает общую читабельность кода. Можно сравнить один кусочек кода до и после использования плагина.

Откроем DU Meter в OllyDbg, поставим breakpoint на адрес 00494A2C и запустим прогу под отладчиком. Не забудь, что первый раз сработает наша точка останова при выборе метода регистрации, поэтому по F9 отпустим программу работать дальше. Ну что, вводим наше имя и любимый пароль и жмем Next? Вот и остановились там, где нужно. Теперь основное – вычленить из всего кода только тот, который и отвечает за проверку регистрационных данных. Пройдемся теперь по коду по F8, не заходя в процедуры и не вдаваясь в исполняемые команды. Получаем наше ненавистное окно по адресу: 00494AAB. Что ж, попробуем еще раз нажать Next, но уже посмотрим более внимательно процедуру, вызываемую по адресу: 00494AAB. Вот похоже то, что нам нужно. Смотрим код:

0049452D PUSH 14

0049452F CALL <JMP.&kernel32.Sleep>

00494534 MOV EAX,DWORD PTR DS:[4F4418]

00494539 MOV EAX,DWORD PTR DS:[EAX]

0049453B CALL <DUMeter.@Forms@TApplication@ProcessMessages$qqrv>

00494540 DEC ESI

00494541 JNZ SHORT DUMeter.0049452D

Это цикл, назначение которого - задержка после ввода данных и имитация долгого расчета. Нам этот цикл совершенно не нужен. Чуть ниже видим получение наших введенных данных. Особенно наглядно это видно в листинге DeDe.

Все свои размышления и догадки тут же проверяем в отладчике. Для удобства я все время снимаю ранее установленные бряки и ставлю новые, ближе к нужному месту, чтобы не терять время на трассировку уже изученного кода. Поэтому можно ставить чуть ниже бестолкового цикла, где-нибудь на адрес 00494543, и пройтись по коду. Проверка вида CMP DWORD PTR SS:[EBP-20],0 после считывания данных - не что иное, как проверка на наличие этих самых данных. Трассируя дальше (по F8), отметим, что данные считываются три раза, последний самый интересный:

Назад на стр. 089-064-1  Содержание  Вперед на стр. 089-064-3