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

Пример взлома: WinRAR

Крис Касперски ака мыщъх

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


Kerberos (вот умница!) даже сообщает адрес возврата из функции - 440А73h, ведущий прямо к защитному коду. Заглянем сюда дизассемблером? Загружаем winrar.exe в IDA PRO и давим <G> (Jump to address), "440A73", <Enter>.

Тут отчетливо виден вызов DialogBoxParamA, выше которого находится следующий код:

00440F1D cmp dword_4B3A90, 0

00440F24 jnz short loc_440F73

00440F26 cmp byte_495A60, 0

00440F2D jnz short loc_440F73

00440F2F cmp byte_4B7E00, 0

00440F36 jnz short loc_440F73

00440F38 cmp byte_49F9BC, 0

00440F3F jnz short loc_440F73

00440F41 mov eax, dword_004B43C8

00440F46 cmp eax, 28h

00440F49 jg short loc_440F4F

00440F4B test eax, eax

00440F4D jge short loc_440F73

00440F4F

00440F4F loc_440F4F: ; CODE XREF: sub_4408C8

00440F4F mov byte_495A60, 1

00440F56 push 0 ; dwInitParam

00440F58 push offset sub_444FF4 ; lpDialogFunc

00440F5D push dword_4B161C ; hWndParent

00440F63 push offset aReminder ; lpTemplateName

00440F68 push hLibModule ; hInstance

00440F6E call DialogBoxParamA

00440F73 loc_440F73: ; CODE XREF: sub_4408C8

00440F73 ; sub_4408C8

00440F73 cmp dword_4B3A90, 0

Можно заметить, что функция DialogBoxParamA вызывается тогда, когда выполняется условный переход: cmp eax, 28h/jg loc_440F4F (прыжок, если eax > 28h). В десятичной системе 28h равно 40. Это и есть срок демонстрационного периода, положенный нам по праву. Здесь сразу становится ясен "физический" смысл переменной dword_004B43C8: она содержит количество дней, прошедших с момента установки программы.

В общем, можно радоваться! Штаб-квартира защитного механизма найдена! Как мы будем действовать теперь? Чтобы заблокировать NAG, можно, например, изменить cmp eax,28h (83 F8 28) на xor eax,eax/nop (33 C0/90). В этом случае eax всегда будет равен нулю независимо от того, какой день сейчас за окном. Команда nop нужна тут для того, чтобы скомпенсировать уменьшение длины инструкции (cmp занимает три байта, а xor - только два).

Запускаем HIEW, загружаем winrar.exe, дважды нажимаем на <ENTER>, чтобы перейти в ассемблерный режим, давим <F5> (goto) и пишем ".440F46" - адрес инструкции cmp. Точка здесь затем, чтобы сообщить HEX-редактору, что это именно адрес, а не смещение в файле. Нажимаем <F3> для перехода в режим редактирования (edit), а затем <ENTER> для ввода ассемблерной инструкции. В появившемся диалоговом окне пишем "xor eax,eax" <ENTER> "nop" <ESC>. Сохраняем все изменения в файле нажатием <F9> и выходим.

Запускаем WinRAR. Теперь NAG уже не выводится! Весь взлом не занял и десяти минут! Как вариант можно заменить mov eax, dword_004B43C8 (A1 C8 43 4B 00) на mov eax, 6 (B8 06 00 00 00), и тогда бедный архиватор будет всегда считать, что с момента регистрации прошло ровно шесть дней. Почему именно шесть? Ну, не шесть, так девять. Какая нам разница?! Главное - чтобы не больше 40! А еще можно заменить jg short loc_440F4F (7F 04) на jmp short loc_440F73 (EB 28), тогда безусловный переход будет перескакивать диалог независимо от текущего времени.

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