<< Все статьи по взлому Исследование Active Phone Server 9.18 или взлом в памяти Обсудить эту статью >>
Автор:FEUERRADER [AHTeam]
Уровень:Для начинающих
Программа:Active Phone Server 9.18
Размер:70 Кб
Язык: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 нам больше не нужен.

<< Все статьи по взлому Обсудить эту статью >>

ALIEN Hack Team - http://ahteam.org
Только для образовательных целей