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

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


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

Ручная распаковка TElock 0.85 на примере Flash Mailer 1.1

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

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: FEUERRADER <feuerrader@nm.ru>


   Программа: Flash Mailer 1.1
      Размер: 413696 байт
        Язык: Borland Delphi 4.0 - 5.0
      Защита: Delphi компонент - TRegWareII + Telock 0.85
        Цель: регистрация или взлом
 Инструменты: Win32Dasm 8.9-9.0
              Hiew 6.x
              SoftIce 4.05 + IceDump
              PEditor 1.7 by Y0da
              LordPE Deluxe
              ImpRec 1.4.2+
              DZA Patcher v1.3
 

Вступление: программа Flash Mailer 1.1 (FM) служит для массовой рассылки писем. Смотрим, что говорит PEID: "tElock 0.85f -> tE!". Как распаковать? Есть автоматический распаковщик TElock любых версий - WKT_tElock_Dumper 1.2. Я воспользовался им, и дамп запустился, но в программе на некоторых местах выползает exception, что говорит о некачественно произведенной распаковке. Будем распаковывать вручную.

РАСПАКОВКА

Нахождение OEP: cмотрим на PE-header и пишем на бумажку некоторые значения:
Image Base=400000, Size Of Image=F3000, количество секций=8.
Запускаем IceDump, ставим :bpx VirtualProtectEx. Запускаем программу, проваливаемся в софтайс. F12. Несколькими экранами ниже (1 раз Ctrl+PageDown) ищем вот такой кусок:

 016F:004F1029  SUB       EBX,04
 016F:004F102C  MOV       [EDI],EBX
 016F:004F102E  LEA       EDI,[EBP+0040AB41]
 016F:004F1034  MOV       ECX,0000002C
 016F:004F1039  REPZ STOSB
 016F:004F103B  STOSW
 016F:004F103D  JMP       004F1041

Ставим :bpm 4F1041 x. Оказались здесь:

016F:004F1041: POPAD
016F:004F1042: JMP [ESP-30]


Заходим в JMP - мы в распакованной программе. Первая инструкция - PUSH EBP. Запомним OEP = 4B775C. Теперь сдампим программу.
/dump 400000 F3000 c:\dump.exe

Теперь dump.exe - это наш дамп.

Испрвляем дамп: запускаем LordPE, жмем PE Editor и выбираем наш дамп. TElock испрвляет число секций на FFFF. Заменим это число на 8, как было первоначально. Теперь загружаем дамп в PEditor 1.7 by Y0da, заметим, что у дампа нет иконки. Значит проблема с ресурсами. Жмем Sections, и щелкаем на секции .rsrc правой кнопкой и выбираем dumpfixer (RS=VS & RO=VO). Правим Entry Point. EntryPoint = OEP - ImageBase = B775C. Всё, дамп исправлен, теперь восстановим импорт.

Восстановление импорта: запускаем ImportReconstructor. Запускаем обычную, запакованную программу и в ImpRec выбираем ее. Теперь вводим наш ОЕР=B775C, жмем IAT AutoSearch, жмем Get Imports. Получаем список импортируемых функций. Теперь нажмем Auto Trace. Ждем... Show Invalid и видим 9 невосстановившихся адресов. Жмем на любой из выделенных правой кнопкой и выбираем Cut Thunk(s) и эти адреса удаляются из списка. Эти функции использовал TElock, нам теперь они не нужны. Нажимем Fix Dump и вибираем наш дамп, оставив галочку на Add New Section.
Всё, теперь в дампе правильная таблица импорта! Кстати, ImpRec автоматический прописал в дампе реальный ОЕР, для которого он нашел импорт, так что нет необходимости вписывать его самим. Распаковка закончена!

ИССЛЕДОВАНИЕ

Что мы видим: Дельфи компонент - TRegWareII. Соглашусь, что он обеспечивает неплохую защиту, но не достаточную:)) Есть два пути: 1) искать правильный серийник в памяти 2) искать где проверяется зарегенность проги.
Рассмотим оба способа.

1 Способ. Поиск серийника.
Ставим в SI бряк на MessageBoxA. Запускаем распакованную прогу. Вводим имя = Feuerrader и код = 111111111111. Жмем OK. Вылетаем в софтайс. F12. Чуть выше видим:

 016F:004ADA96  E88963FEFF  CALL      00493E24 <--проверка на зарегенность
 016F:004ADA9B  84C0        TEST      AL,AL
 016F:004ADA9D  751B        JNZ       004ADABA
 016F:004ADA9F  6A00        PUSH      00
 016F:004ADAA1  6834DB4A00  PUSH      004ADB34
 016F:004ADAA6  683CDB4A00  PUSH      004ADB3C
 016F:004ADAAB  8BC3        MOV       EAX,EBX
 016F:004ADAAD  E842CAF8FF  CALL      0043A4F4
 016F:004ADAB2  50          PUSH      EAX
 016F:004ADAB3  E8C89CF5FF  CALL      USER32!MessageBoxA

Делаем bc* и ставим бряк 4ADA96. Когда снова вылетим смотрим, что EBX=011B1C14. Теперь спустимся примерно до 11B5E2C и увидим в памяти:

 0177:011B5E84 00 00 00 00 88 5E 1B 01-88 5E 1B 01 44 00 00 00  .....^...^..D...
 0177:011B5E94 xx xx xx xx xx xx xx xx-xx xx xx xx 00 00 00 00  1BF*D4745*F8....
 0177:011B5EA4 A4 5E 1B 01 A4 5E 1B 01-28 00 00 00 00 02 00 00  .^...^..(.......
 0177:011B5EB4 00 6C 1A 01 00 6C 1A 01-18 00 00 00 4F 6E 43 6C  .l...l......OnCl
 0177:011B5EC4 69 63 6B 00 44 00 00 00-17 00 00 00 01 00 00 00  ick.D...........
 0177:011B5ED4 05 00 00 00 72 65 67 5F-62 00 00 00 FE 01 00 00  ....reg_b.......
 0177:011B5EE4 50 73 42 00 14 1C 1B 01-D8 5E 1B 01 00 00 00 00  PsB......^......

Как можно догадаться по адресу 11B5E94 серийник для имени Feuerrader, только он специально затерт знаком "*". Адреса в памяти у вас могут не совпадать с приведенными выше, что естественно!

2 способ. Поиск проверки на зарегенность.
Запускаем Win32Dasm, суем туда распакованный FM. Ищем строку "Registered version!". Нашли тут:

 :004AF9A4 E83F3FFEFF              call 004938E8
 :004AF9A9 84C0                    test al, al
 :004AF9AB 741F                    je 004AF9CC
 :004AF9AD 8B83D0020000            mov eax, dword ptr [ebx+000002D0]
 :004AF9B3 8B80EC010000            mov eax, dword ptr [eax+000001EC]
 
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:004AF94A(C)
 |
 :004AF9B9 33D2                    xor edx, edx
 :004AF9BB E8D451FBFF              call 00464B94
 
 * Possible StringData Ref from Data Obj ->"Registered version !"

Заходим в CALL 004938E8.

* Referenced by a CALL at Addresses:
 |:004934B8   , :0049407A   , :00494099   , :0049436D   , :004AF96F
 |:004AF9A4
 |
 :004938E8 E813030000              call 00493C00
 :004938ED C3                      ret

У-у-у...сколько адресов вызывает этот call. А что делает этот call? Проверка на зареггеность программы! Она возвращает в EAX - 1, если мы зарегены. Та давайте не будем вызывать вложенный CALL 00493C00, а сделаем mov eax,01. Это думаю каждый сможет это в Hiew. Попробуем, нагов нет! Но в окне About надпись, что мы еще не зарегены! Так исправьте ее в том же Hiew на "REGGED TO MYNAME"!!! Теперь всё.

Crack: как же будем строить кряк? Править в памяти неинтересно, надо бы саму прогу. А-а-а! Возьмем-ка DZA Patcher (как всегда protools.cjb.net). Он может сделать "инъекцию" почти для любого пакованного/криптованного файла. Вот код файллиста, содержащий байты для патча в DZA Patcher. Используйте его на свое усмотрение:

4D4E03/20/21*4D4E02/20/21*4D4E01/52/21*4D4E00/45/20*4D4DFF/44/4E*4D4DFE/41/ 4F*4D4DFD/52/49*4D4DFC/52/53*4D4DFB/45/52*4D4DFA/55/45*4D4DF9/45/56*4D4DF8/ 46/20*4D4DF7/20/44*4D4DF6/3A/45*4D4DF5/64/52*4D4DF4/65/45*4D4DF3/72/54*4D4D F2/65/53*4D4DF1/74/49*4D4DF0/73/47*4D4DEF/69/45*4D4DEE/67/52*4D4DED/65/4E*4 D4DEC/52/55*4938EC/90/00*4938EB/90/00*4938EA/90/03*4938E9/01/13*4938E8/B0/E8*$

Выводы: согласитесь, почти нулевая защита! И автор хотел за нее $25.95! Что??? Надеюсь я помог сэкономить 30 баксов.

Спасибо за интерес к этой статье!



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


Комментарий Bad_guy'я: конечно здесь рассмотрена распаковка не самой последней версии teLock, но насколько она проста, даже не верится... А вот с компонентами Delphi по защите программ практически всегда такое, действительно защита ими стремится к нулю, в чем я убедился, понакачав их c www.torry.net


Обсуждение статьи: Ручная распаковка TElock 0.85 на примере Flash Mailer 1.1 >>>


Комментарии к статье: Ручная распаковка TElock 0.85 на примере Flash Mailer 1.1

SLV 25.05.2004 16:34:04
2Bad_guy. На самом деле распаковка в старых версиях не сложнее UPX-а.
---

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



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


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