Eще раз исследование хитропакованной проги XnView 1.46

Перейти на главную страницу, индексную страницу.


Автор: bi0w0rM <bioworm@mail.ru>


======================================================
!Чтобы по-хорошему врубиться, надо прочесть несколько раз!
!Пожалуйста, прочтите это всё внимательно и спокойно, не бросая на половине пути!
======================================================
Tutorial:
hI ALL!

Что надо:
SoftICE (ну конечно не под ДОС, у тебя ОСь то какая? )
w32dasm (не младше версии 8.93 - остальное SUX и пусть это "Уткины юзают")
HIEW (а вот мастдайного HIEW НЕТ! ВСЕ ВЕРСИИ РУЛЕЗ, только более младшие freeware)
PEiD (..no comments..)
GUW32 или Unpacker в ProcDump (для особо ленивых)
ProcDump (для снятия дампа) - не для ленивцев.
PEditor (на ваш вкус: PEDitor by Yoda, LordPE, тот, что в ProcDump...)

Прога запакована ASPack'ом, но PEiD "такого" АСПака не знает и говорит, что обычный Win32 PE File, но я в это не верю! Открыл её в PEditor'е, а там присутствует секция(кликайте sections) .aspack, в чём дело? Это защита от взлома, типа такая. Думают разработчики, что все такие лохи и доверяют PEiD'у во всём. Видно разработчики чё то подкрутили в уже запакованной проге. Не знаю, возьмет ли её ASPackDie , но я этим не пользуюсь и решил распаковать руками.

План распаковки описываю кратко, так как подробно я уже писал в другой своей статье про unpack:
1) Врываемся в прогу через Symbol Loader
2) Удостоверимся, что стоим на pushad
3) Скроллим окно кода вниз, пока не найдем popad
4) Ставим бряк на popad, щелкнув по нему два раза(если TRW2000, то жмем F9). Жмем F5.
5) Доходим по F10 до ret и смотрим, что в eax
d eax
6a) Если Вы юзаете SoftICE , запишите адрес на бумажку и наберите:
a eip
jmp eip
Закончим ввод асм-кода - Enter
6b) Если Вы юзаете TRW2000, нажмите F10 и попадете на
push ebp
Запомните, по какому адресу это всё стоит и наберите SUSPEND. Этот адрес - OEP
!ПРОГА ЗАЦИКЛЕНА!
7) В ProcDump дампим(Full Dump) нашу прогу и делаем Kill task. ДАМП готов.
8) Для всех: Открываем ДАМП в PEditor, смотрим, сколько ImageBase и в Entry Point вписываем число по формуле
EP=OEP-ImageBase
9) Section Characteristics делаем E0000020 вместо C0000040
OK! Вроде ничего не забыл :))

Если вы распаковали не вручную, а с GUW32, то подправьте характеристики _всех_ секций на E0000020

Теперь, что там посвящено регистрации.... Ах да! Создайте копию распакованного файла "xn2.exe" - её Мы будем патчить! Регистрация обычная - ИМЯ/КОД. Кейген можно написать, а если Вы делаете чисто для себя, то просто запатчите, а вот сам патч написать проблемно.. Но, повторюсь, если пишите не для себя, то напИшите кейген. Давайте запустим прогу, запустим регистрацию и вводим Имя и код, какие вам только взбредут в голову. Я ввел bi0w0rM, а код 161616. Никогда не пишите код, типа 1234567 или ABCDEFG! Мне потом пишут: "Почему я не вываливаюсь в СофтАйс, хоть я поставил бряк адрес в памяти с моим кодом?" ЧЕЛ! Ты поставил бряк на на код, а на совсем другую строчку, которя входит в состав алфавита! ПроверЬ: полистай вниз-вверх memory и поищи там своё имя(bi0w0rM). Нет там его.. Вот так вот. Врубаем СофтАйс и ищем в памяти код:
s 0 l ffffffff "161616"
Нашел! Айс пишет:
Pattern found at ...... (.....) - в скобках адрес, на него ставим бряк:
bpm ТО_ЧТО_В_СКОБКАХ
F5, в проге жмем ОК.
Вываливаемся в Айсе, трассируем по F12 до того, как окажемся в модуле XNVIEW или каку нас - XN
Вы будете вот здесь:
018F:00454404 FFD7 CALL EDI
018F:00454406 8A442470 MOV AL,[ESP+70]
018F:0045440A 84C0 TEST AL,AL
018F:0045440C 0F843A010000 JZ 0045454C
018F:00454412 8A442410 MOV AL,[ESP+10]
018F:00454416 84C0 TEST AL,AL
018F:00454418 0F842E010000 JZ 0045454C
018F:0045441E 8D542408 LEA EDX,[ESP+08]
018F:00454422 8D442470 LEA EAX,[ESP+70]
018F:00454426 52 PUSH EDX
018F:00454427 50 PUSH EAX
018F:00454428 E88327FBFF CALL 00406BB0 <<==Если хотите писать кейген, советую сюда залезть
018F:0045442D 8D4C2418 LEA ECX,[ESP+18]
018F:00454431 51 PUSH ECX
018F:00454432 E854550000 CALL 0045998B <<==Если хотите писать кейген, советую сюда залезть
018F:00454437 8B4C2414 MOV ECX,[ESP+14]
018F:0045443B 83C40C ADD ESP,0C
018F:0045443E 3BC8 CMP ECX,EAX
018F:00454440 745D JZ 0045449F <<== Клёвое место
....................
..................... Мы в модуле XnVIEW и секции .text ! ----------
...................... |
===================================XNVIEW!.text+00053404==================== <-
Когда Мы в клевом месте, замените флаг нуля z в Айсе, там где o d I S z a P c . Кликните на z , INSERT , ENTER! Можете не менять флаг нуля, а заменить команды.
То есть у нас было JZ 0045449F , а Мы сделаем JNZ 0045449F
Для этого пиши A , ввод и пиши команду JNZ 0045449F . Enter, потом еще раз Enter. F5 для выхода и если Вы сделали все правильно, то программа поблагодарит вас за успешную регистрацию! Но это не предел! Запомним, что
JZ 0045449F находится по адресу 00454440(у вас может не так) и теперь раздизассемблируйте прогу в w32dasm, ждемz. Жмем Goto location и пишем 00454440 и окажетесь там, где в принципе и были :))
:00454428 E88327FBFF call 00406BB0
:0045442D 8D4C2418 lea ecx, dword ptr [esp+18]
:00454431 51 push ecx
:00454432 E854550000 call 0045998B
:00454437 8B4C2414 mov ecx, dword ptr [esp+14]
:0045443B 83C40C add esp, 0000000C
:0045443E 3BC8 cmp ecx, eax
:00454440 745D je 0045449F

Вообще, в это проге подобное "местечко" встречается несколько раз. Его отличительные особенности: call 00406BB0 и call 0045998B , а после них je ....... . Вот наша задача найти вызовы этих call в проге. С самого начала листинга w32dasm стоит начать поиск - Find. Пробовал искать call 0045998B - гиблое дело, таких вызовов много, а вот call 00406BB0 только в местах проверки регистрации, вот и прописывайте его. Нашлось? Вот где Вы сейчас:

* Possible StringData Ref from Data Obj ->"LicenseNumber"
|
:00406CDD 6874F05400 push 0054F074
:00406CE2 6A00 push 00000000
:00406CE4 E8777C0200 call 0042E960
:00406CE9 8D542428 lea edx, dword ptr [esp+28]
:00406CED 8D442450 lea eax, dword ptr [esp+50]
:00406CF1 52 push edx
:00406CF2 50 push eax
:00406CF3 E8B8FEFFFF call 00406BB0
:00406CF8 8D4C2438 lea ecx, dword ptr [esp+38]
:00406CFC 51 push ecx
:00406CFD E8892C0500 call 0045998B
:00406D02 83C434 add esp, 00000034
:00406D05 85C0 test eax, eax
:00406D07 741E je 00406D27
:00406D09 8D542408 lea edx, dword ptr [esp+08]
:00406D0D 52 push edx
:00406D0E E8782C0500 call 0045998B
:00406D13 8B4C2404 mov ecx, dword ptr [esp+04]
:00406D17 83C404 add esp, 00000004
:00406D1A 3BC8 cmp ecx, eax
:00406D1C 7509 jne 00406D27

Это стопудово проверка на регистрацию, так как вверху подозрительное слово "LicenseNumber", а Вы знаете наверно, как оно переводится на русский и чем пахнет :) На самом деле, это label(ну или static text) в About program. В этом урезанном коде решается, прописать ли в About про тебя инфу(bi0w0rM), либо написать unregistered(тоже, я думаю, в переводе не нуждается). Также запрещается(disabled ; enabled = false) меню Registration(а зачем? Его не надо больше, ведь Мы зарегены!). У джампа на 00406D1C смотрим внизу @Offset 631C - вот в HIEW и меняйте jne на je(как это делать, я говорил), только запишите 631C на бумажку и давайте поищем дальше call 00406BB0. Мы теперь здесь:
:00454428 E88327FBFF call 00406BB0
:0045442D 8D4C2418 lea ecx, dword ptr [esp+18]
:00454431 51 push ecx
:00454432 E854550000 call 0045998B
:00454437 8B4C2414 mov ecx, dword ptr [esp+14]
:0045443B 83C40C add esp, 0000000C
:0045443E 3BC8 cmp ecx, eax
:00454440 745D je 0045449F
:00454442 A17CDE5600 mov eax, dword ptr [0056DE7C]
:00454447 8D542430 lea edx, dword ptr [esp+30]

* Possible Ref to Menu: NVIEWMENU, Item: "16 Grey scale (Dither)"
|
:0045444B 6A40 push 00000040
:0045444D 52 push edx

* Possible Reference to String Resource ID=05011: "Invalid registration" В переводе не нуждается

Здесь всё так же, как и там :)) Смотрите @Offset у 454440, а он здесь 53A40 и меняете на jne. Дальше такого call нигде нет, если искать дальше. Можно и попатчить. В результате попатчили два байта и довольны "купленной" прогой. Круто! RuleZ! Reversing 4ever! Да пребудет с вами сила, лОмаки(не ламеры :)) Как всегда:
Newbie CrackerZ вперед!
LamerZ Must DIE!

Чё то непонятно? Мыло вверху статьи! Я всегда отвечу!
Пока!


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz