Underground InformatioN Center [&articles] 
[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive][home]

Распаковка tElock v0.90

"If it runs it can be defeated."
+OldRedCracker

Инструменты
- SoftICE
- IceDump
- Revirgin v1.2
- PEditor
- Шестнадцатиричный редактор
- бумага, карандаш

Введение
   tElock - БЕСПЛАТНЫЙ сompressor/еncryptor, созданный tE!, лидером команды TMG.
В последнее время многие программисты начали запаковывать им свои творения. Оно и понятно - хороший уровень защиты и денег платить не надо :)

   В качестве подопытной крыски возьмем бессмертное творение компании M$ notepad.exe. Я брал из Win98 (57344 байт). tElock можно взять с сайта ProTools или www.exetools.com. Там же можно найти и все остальные инструменты.
   Запаковываем наш notepad. В Settings выбираем: Add Debugger Detection, Smart compress recources, Strip Overlays, Random known packer, Enable IAT Redirection, Strip .reloc section if possible. На вопрос про File alignment отвечаем - ДА. Запаковалось. У меня четыре секции стали называться .peco. Под PEcompact замаскировался :)

Находим ОЕР
   Смотрим на PE-header и пишем на бумажку некоторые значения:
Image Base=400000, Size Of Image=F000, количество секций=5.
Запускаем IceDump, ставим bpx VirtualProtectEx. Запускаем программу, проваливаемся в софтайс. F12. Несколькими экранами ниже ищем вот такой кусок:


0167:0040E121:    SUB      EBX, 04
0167:0040E124:    MOV      [EDI], EBX
0167:0040E126:    LEA      EDI, [EBP+0040AC5D]
0167:0040E12С:    MOV      ECX, 00000002C
0167:0040E131:    REPZ     STOSB
0167:0040E133:    STOSW
0167:0040E135:    JMP      004C2139
Ставим бряк на 4С2139. Если ставить bpx - softice иногда рушится. Поставим bpm.
bpm 40E139 x
Оказались здесь:
0167:0040E139: POPAD
0167:0040E13A: JMP [ESP-30]


Заходим в JMP - опа, мы в распакованной программе. Ураааа!
Пишем на бумажку ОЕР=4010CC. Теперь смотрим на наши предыдущие записи и сдампим программу.
/dump 400000 F000 c:\dump.exe

Правим дамп
   Открываем редактором наш дамп и смотрим на количество секций. Для этого надо к адресу буковок РЕ, обозначающих что это РЕ-файл прибавить 6 байт. Так вот количество секций у нас равно FFFF. tE! хочет нас обмануть.
НЕ ВЫЙДЕТ! :) Смотрим в бумажку и правим количество секций. Теперь загружаем дамп в PEditor, попутно замечая что у нашего файла нет иконки. Значит проблема с ресурсами. Жмем Sections, и на секции .rsrc делаем dumpfixer. Или ручками делаем так чтобы RawSize=VirtualSize и RawOffset=VirtualOffset.
Правим Entry Point. EntryPoint = OEP - ImageBase = 10CC.
Теперь у нас есть вполне нормальный екзешник за исключением того что он не запустится так как нет нормального импорта.

Восстановление таблицы импорта
   Тут все тоже очень просто :)
Используем Revirgin. Определилась почти половина API. Остальные пойдут под tracer. Маленький совет: не надо ставить под трейсер больше 15-20 API. Иначе Revirgin повиснет.
   Мдааа. На некоторых API revirgin нахлухо виснет. Revirgin глючит, зараза. Вообще импорт лучше восстанавливать под NТ/2k - намного меньше глюков.
   Я перегрузился в вин2к и все заработало нормально. Все API traced, жмем кнопку Resolve again. Несколько API все равно не определились. Ну и ладно. Они, видимо, использовались самим пакером. Удалим их из списка.
   Новый импорт будем ставить в конец файла. В Revirgin убираем галку с Autofix sections и пишем адрес конца файла (F000) в IT RVA. Запишем на бумажку
IAT Length = 478. Сохраняем импорт на диск - dump.bin.
   Добавим новую секцию с импортом в наш дамп. Открываем PEditor, Sections->Copy a section from HD to EOF и выбираем наш импорт. Меняем название получившейся секции на .uinC. Иначе начего не получится :))
К Size of Image добвляем размер секции uinC, Import table RVA = F000, Size = 478.
   Все. Правда просто когда читаешь? Но на то чтобы понять как распаковывать tElock у меня ушло 2 дня.

Получение таблицы импорта "руками". Old school style :)
   Это меня dr. Golova научил, так что если чего не получится - все претензии к нему.
   Ставим бряк bpx (GetProcAddress + 3) - бряк не на первую инструкцию, а то он ищет int 3 и валится. F12.
Раза с пятого появятся функции из импорта проги а не протектора и можно сдампить целенькую табличку импорта. В ней запорото будет 2 dword'a - один указатель на имя первой dll, другой в IAT указатель на функцию, их легко зафиксить руками.

PS - Несколько советов.
   Иногда revirgin не определяет функции из несистемных dll (например из dll, поставляемых вместе с какой-нибудь программой). Тут поможет Import REconcrtuctor, он лучше с этим справляется.
   Бряки, расставляемые по ходу распаковки лучше убирать после срабатывания так как некоторые защиты от отладки это ловят.

Большое спасибо dr. Golova и Black ReMoS Night за дельные советы.
С пионерским приветом, Corbio, corbio@uinc.ru
Сентябрь 2001
uinC Member
REFORM Member
[c]uinC

Статья написана специально для UInC (http://www.uinc.ru).

Все документы и программы на этом сайте собраны ТОЛЬКО для образовательных целей, мы не отвечаем ни за какие последствия, которые имели место как следствие использования этих материалов\программ. Вы используете все вышеперечисленное на свой страх и риск.

Любые материалы с этого сайта не могут быть скопированы без разрешения автора или администрации.


[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive][home]
 Underground InformatioN Center [&articles] 
2000-2015 © uinC Team