Rambler's
Top100

Исследование защиты Active Phone Server 9.18

Автор: FEUERRADER
Дата: 12.05.2003
Раздел: Reverse Engineering

Взлом Active Phone Server 9.18

Программа: Active Phone Server 9.18 Размер: 71456 байт Язык: C++ Защита: Имя/код Цель: исследование и взлом Инструменты: TRW2000 1.2? или SoftIce, Sign 0f Misery (необязательно).

Предисловие: эта статья основана на туториале Vallkor'а "Исследование Active Phone Server", где рассказывается, как взломать этот продукт. Ниже будут приведены выдержки из этой статьи.
Начнём: Запускаем программу, открываем окно "О программе", вводим имя и РН (наугад) ставим bpx GetDlgItemTextA и нажимаем кнопку "Ввести", выскакиваем в SI (или TRW2k), жмем 2 раза F12, чтобы вернуться из системной библиотеки, мы тут:

...
016F:100171E5  CALL     `KERNEL32!FindCloseChangeNotification`
016F:100171EB  POP      EBX
016F:100171EC  POP      EDI
016F:100171ED  MOV      EAX,01
016F:100171F2  POP      ESI
016F:100171F3  ADD      ESP,0C08
016F:100171F9  RET     
016F:100171FA  POP      EDI
016F:100171FB  XOR      EAX,EAX
016F:100171FD  POP      ESI
016F:100171FE  ADD      ESP,0C08
...

Эти инструкции нам ни о чем ни говрят. Попробуем зайти с другой стороны. Заметьте: oкно с сообщением о неверном РН выдается не сразу, а спустя несколько секунд (для понта наверное). Значит используется, скорее всего сообщение WM_TIMER. Проскролим несколько десятков строк вверх от адреса 100171E5.

...
016F:10016FBA  CALL     `USER32!KillTimer`
016F:10016FC0  PUSH     ESI
016F:10016FC1  CALL     10017070            //Интересная функция
016F:10016FC6  ADD      ESP,BYTE +04
016F:10016FC9  TEST     EAX,EAX             //Сравним результат
016F:10016FCB  JZ       10016FDB            //Прагаем, если 0
016F:10016FCD  PUSH     BYTE +40
016F:10016FCF  PUSH     DWORD 10022B50
016F:10016FD4  PUSH     DWORD 10022B34
016F:10016FD9  JMP      SHORT 10016FFC
016F:10016FDB  MOV      EAX,[100260B4]
016F:10016FE0  PUSH     BYTE +10
016F:10016FE2  TEST     EAX,EAX
016F:10016FE4  JZ       10016FF2
...

О, то что нам нужно! Ставим бряк bpx 10016FC1. Прервемся и зайдем по F8 в CALL 10017070, далее трассируем по F10. Вскоре увидим:

...
016F:100170F2  CALL     10016D50            //процедура проверяющая
016F:100170F7  ADD      ESP,BYTE +08        //РН с правильным, кому интересно,
016F:100170FA  TEST     EAX,EAX             //загляните.
016F:100170FC  JZ       NEAR 100171FA       //Прыгаем, если флаг Z=0,т.е если РН=ERR0R!
...

В статье Vallkor'а сказано: "Нужно изменить флаг Z на противоположный, чтобы не прыгнуть, а посмотреть, что же будет делать программка, если наш и правильный РН окажутся одинаковыми. После того, как мы это изменили, посмотрим, что же делает дальше программка:

...поскипано не нужное...
015F:10016DAE  52                  PUSH      EDX <--в edx имя файла:
c:\Program Files\Apserver\xxxxxxxx.key
015F:10016DAF  FF15FCD00110        CALL      [KERNEL32!CreateFileA] <--создаём файл
с таким именем
...поскипано...
015F:10016DBD  8B1D2CD10110        MOV       EBX,[KERNEL32!WriteFile] <--заганяем
в ebx адрес функции записи в файл

Потом в файл делается две записи, которые xorятся со смещением +3".

Тогда все просто. Заменим условный переход

016F:100170FC JZ NEAR 100171FA

на противоположный. Прога будет думать, что РН верный и зарегится. Файл xxxxxxxx.key на каждом компе хххххххх будет разным. Введем d 100170FC и видим 0F84.....
Заменять надо 0F84 на 0F85. Итак, такой патч:

100170FD: 84 85

Патч: aon.exe запакован UPX 0.72. И как говорит сам UPX: packed by obsolete version of UPX. Cannot unpack. Сам файл нам не распаковать и не пропатчить (хотя это спорный вопрос). Тогда будем ломать его в памяти. Тут поможет Sign 0f Misery - мощная система для помощи кракеру. Можно достать тут. Создадим скрипт со следующими инструкциями:

Установиить максимальное время работы скрипта                         3,0 сек.      N/A
Запустить программу                                                   Aon.exe       N/A
Изменить значение байта в адресном пространстве открытого процесса    #100170FD     133
Завершить скрипт                                                      N/A           N/A

Заключение: мы получили не loader для файла, а кряк! Его можно запускать всего один раз, он пропатчит прогу, а мы введем всякую ерунду в Имя и РН. Будем зарегистрированы. Теперь этот сrack нам больше не нужен.



Все права защищены ©  2003 
...::FEUERRADER::...




Rambler's Top100