Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Исследование программы "Числовая мандала 1.20"

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.
Description : [WIN] Числовая мандала 1.20   4
Crack subject : NAG screen, some restrictions
Crack made by : Runtime_err0r
Crack made at : 06-07-2003
Comments : http://www.mastertarot.net/mandala/
Protection : ( )Beginner (X)Intermediate ( )Advanced ( )Expert
Time for hack : 00:20
Type of hack : Bit hack
Used packer : Armadillo
Used unpacker : UNARM 1.0 by CHRiSTOPH/UG2002
File size : 946910 bytes
Src language : Visual C++
Price : ???
Used tools : PeiD, UNARM 1.0, HIEW 6.83, IDA 4.50, TRW2000
Under Music : Radio ULTRA (100.5 FM)

Внимание !!!
Данная статья носит образовательный характер и предназначена для разработчиков программных защит.
Автор не несёт никакой ответственности за возможное использование материалов данной статьи в противозаконных целях.

Прежде всего необходимо определить чем прога запакована. Для этого суём её в PEiD и видим: Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks. OK, берём UNARM 1.0 by CHRiSTOPH/UG2002 с сайта Unpacking Gods и получаем распакованный EXE'шник (1379348 байт).
Теперь посмотрим, какие там есть ограничения: прежде всего в глаза бросается NAG screen с надписью "Демо версия". После нескольких неудачных попыток найти эту надпись в дизассемблерном листинге я сделал так: открыл файл UNPACKED.EXE в HIEW, выбрал режим просмотра HEX и кодировку Windows-1251 (Alt+F8), потом F7 и нашёл искомое слово по адресу 4E5D1C. Теперь берём IDA и ищем в листинге строку 4E5D1C, видим два совпадения:
 .text:0047EEEC                 mov     ecx, offset unk_4E5D1C
 .data:004E5D1C unk_4E5D1C      db 0C4h ; -             ; DATA XREF: sub_47EE3C+B0.o
 
Кликаем по первому и видим такой фрагмент кода:
 text:0047EE3C ; --------------- S U B R O U T I N E ---------------------------------------
 .text:0047EE3C
 .text:0047EE3C ; Attributes: bp-based frame
 .text:0047EE3C
 .text:0047EE3C sub_47EE3C      proc near               ; CODE XREF: sub_47F278+1D8.p
 .text:0047EE3C                                         ; sub_47F278+211.p
 .text:0047EE3C
 .text:0047EE3C var_4           = dword ptr -4
 .text:0047EE3C
 .text:0047EE3C                 enter   0, 2
 .text:0047EE40                 pusha
 .text:0047EE41                 mov     eax, 7C86h
 .text:0047EE46                 call    sub_420548
 .text:0047EE4B                 push    0
 .text:0047EE4D                 mov     eax, offset word_4E6F14
 .text:0047EE52                 mov     bl, 2
 .text:0047EE54                 mov     ecx, 0
 .text:0047EE59                 mov     edx, 2
 .text:0047EE5E                 call    sub_41E830
 .text:0047EE63                 mov     ebx, eax
 .text:0047EE65                 mov     eax, 0
 .text:0047EE6A                 mov     ecx, 0
 .text:0047EE6F                 mov     edx, 0
 .text:0047EE74                 call    sub_4DDDD8
 .text:0047EE79                 mov     eax, ebx
 .text:0047EE7B                 call    sub_41E6DC
 .text:0047EE80                 cmp     byte_509178, 0
 .text:0047EE87                 jnz     loc_47F08E
 .text:0047EE8D                 mov     esi, [ebp+var_4]
 .text:0047EE90                 mov     byte ptr [esi-0Dh], 1
 .text:0047EE94                 mov     eax, 0Dh
 .text:0047EE99                 mov     ebx, 0
 .text:0047EE9E                 call    sub_4DD948
 .text:0047EEA3                 mov     eax, offset aNm_ini_1 ; "nm.ini"
 .text:0047EEA8                 mov     ebx, 6
 .text:0047EEAD                 call    sub_420840
 .text:0047EEB2                 movzx   eax, byte ptr [esi-0Dh]
 .text:0047EEB6                 call    sub_420548
 .text:0047EEBB                 mov     eax, offset aAbout_1 ; "About"
 .text:0047EEC0                 mov     ebx, 5
 .text:0047EEC5                 call    sub_420840
 .text:0047EECA                 mov     eax, offset unk_4E5D10
 .text:0047EECF                 mov     ebx, 0Ch
 .text:0047EED4                 call    sub_420840
 .text:0047EED9                 mov     al, 0
 .text:0047EEDB                 mov     bl, 0
 .text:0047EEDD                 mov     cl, 0
 .text:0047EEDF                 call    sub_4DCA70
 .text:0047EEE4                 lea     eax, [esi-21h]
 .text:0047EEE7                 mov     ebx, 14h
 .text:0047EEEC                 mov     ecx, offset unk_4E5D1C   << мы здесь
 
Наиболее интересную часть кода я выделил красным цветом, здесь байт по адресу 509178 сравнивается с 0 и в зависимости от этого прога выводит надпись Демо версия или Зарегистрированно. Теперь грузим прогу в TRW2000 и ставим бряку bpm 509178, запускаем и брякаемся тут:
 0167:0048AD01  CALL     0041B052
 0167:0048AD06  MOV      AL,[00508CC3]
 0167:0048AD0B  MOV      [0050917C],AL
 0167:0048AD10  MOV      AL,[00508CC4]
 0167:0048AD15  MOV      [00509178],AL
 0167:0048AD1A  MOV      AL,[00508CC5]
 0167:0048AD1F  MOV      [00509174],AL
 0167:0048AD24  MOV      AL,[00508CC6]
 0167:0048AD29  MOV      [00509170],AL
 0167:0048AD2E  MOV      EAX,[00508CC7]
 0167:0048AD33  MOV      [00509168],EAX
 
Поскольку нам нужно, чтобы этот байт всегда был равен 1, то открываем наш распакованный EXE'шник в HIEW и вносим небольшие изменения:
 .0048AD01: E84C03F9FF                   call       .00041B052  -----. (1)
 .0048AD06: A0C38C5000                   mov         al,[00508CC3]
 .0048AD0B: A27C915000                   mov         [0050917C],al
 .0048AD10: C6057891500001               mov         b,[00509178],001 ;"."
 .0048AD17: 90                           nop
 .0048AD18: 90                           nop
 .0048AD19: 90                           nop
 .0048AD1A: A0C58C5000                   mov         al,[00508CC5]
 .0048AD1F: A274915000                   mov         [00509174],al
 .0048AD24: A0C68C5000                   mov         al,[00508CC6]
 .0048AD29: A270915000                   mov         [00509170],al
 .0048AD2E: A1C78C5000                   mov         eax,[00508CC7]
 .0048AD33: A368915000                   mov         [00509168],eax
 
Запускаем прогу - теперь в About'е написанно "Зарегистрировано", но вот беда - при попытке добавить новую мандалу получаем сообщение "Добавление своих данных возможно только в зарегистрированной версии." Повторяем всё вышесказанное для этой строчки и видим, что проверка происходит тут:
 .text:0047E5FC                 cmp     byte_509178, 0
 .text:0047E603                 jz      short loc_47E60E
 .text:0047E605                 cmp     byte_50917C, 1
 .text:0047E60C                 jnz     short loc_47E661
 .text:0047E60E
 .text:0047E60E loc_47E60E:                             ; CODE XREF: sub_47E4D4+12F.j
 .text:0047E60E                 mov     eax, 0
 .text:0047E613                 mov     ebx, 0
 .text:0047E618                 call    sub_420840
 .text:0047E61D                 mov     eax, 0
 .text:0047E622                 mov     ebx, 0
 .text:0047E627                 call    sub_420840
 .text:0047E62C                 mov     eax, 0
 .text:0047E631                 mov     ebx, 0
 .text:0047E636                 call    sub_420840
 .text:0047E63B                 mov     eax, offset unk_4E5B04   << мы здесь
 .text:0047E640                 mov     ebx, 44h
 .text:0047E645                 call    sub_420840
 
Теперь ставим в TRW бряк bpm 40917C и брякаемся там же, теперь надо ещё немного подправить прогу:
 .0048AD01: E84C03F9FF                   call       .00041B052  -----. (1)
 .0048AD06: C6057C91500000               mov         b,[0050917C],000 ;" "
 .0048AD0D: C6057891500001               mov         b,[00509178],001 ;"."
 .0048AD14: 90                           nop
 .0048AD15: 90                           nop
 .0048AD16: 90                           nop
 .0048AD17: 90                           nop
 .0048AD18: 90                           nop
 .0048AD19: 90                           nop
 .0048AD1A: A0C58C5000                   mov         al,[00508CC5]
 .0048AD1F: A274915000                   mov         [00509174],al
 .0048AD24: A0C68C5000                   mov         al,[00508CC6]
 .0048AD29: A270915000                   mov         [00509170],al
 .0048AD2E: A1C78C5000                   mov         eax,[00508CC7]
 .0048AD33: A368915000                   mov         [00509168],eax
 
Запускаем ... всё работает как надо !!!


Обсуждение статьи: Исследование программы "Числовая мандала 1.20" >>>


Комментарии к статье: Исследование программы "Числовая мандала 1.20"

Михаил 07.02.2005 20:51:49
я хочу повторить эту операцию по разблокировке Мандалы сам, только не могу найти прогоу UNARM 1.0
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS