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

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


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

Goat's PE Mutilator 1.6 От новичка для новичков

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

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

Автор: Spirit <SpiritST@yandex.ru>

Всем здрасьте! Решил впервые в жизни написать статью, сам я в принципе новичок и как это понятно из названия пишу тоже для новичков. Конечно Goat's PE Mutilator 1.6 – это не для кого не новость, но все же это и редкая вещь. Уже вижу, как в меня летят камни: «Да кому нужена твоя статья, отстой» и т.д. Но думаю новичкам будет интересно. Итак начали.

Цель: Goat's PE Mutilator 1.6 (то есть сам криптор)
Инструменты: OllyDbg 1.10
PE Tools 1.5
HIEW x.xx
PEiD 0.93 + Generic OEP Finder plugin
ImpRec 1.6
ResFixer 1.0 beta 1 by seeQ

План распаковки: Найти ОЕР
Снять дамп
Убрать мусор
Восстановить импорт.

Поехали.

Найти ОЕР (Тернистый путь до заветного адреса):


Для начала грузи нашу цель в PEiD, нам говорят: «Goat's PE Mutilator 1.6», хорошо. Запускаем плагин Generic OEP Finder, он нам сказал, что оеп находистя по адресу 0040A9E, запоминаем этот адрес, ну или записываем.

Грузим цель в Olly, и немного шуршим в настройках: Options -> Debugging options -> Exceptions.
На данной вкладке убираем все галочки кроме «Ignore memory access violations in KERNEL32».

Значит, стоим на таком месте:


0040F0F0 > $ E8 EA0B0000    CALL gM.0040FCDF
0040F0F5     0F             DB 0F
0040F0F6     22             DB 22                                    ;  CHAR '"'
0040F0F7     AD             DB AD
0040F0F8     8B             DB 8B

Делаем действие на реакцию: Нажимаем Ctrl+A (анализ кода) и быстро жмем на пробел (прервать анализ), получаем такой код:


0040F0F0 > E8 EA0B0000      CALL gM.0040FCDF
0040F0F5   0F22             ???                                      ; Unknown command
0040F0F7   AD               LODS DWORD PTR DS:[ESI]
0040F0F8   8B1C79           MOV EBX,DWORD PTR DS:[ECX+EDI*2]
0040F0FB   F663 D8          MUL BYTE PTR DS:[EBX-28]
0040F0FE   8D22             LEA ESP,DWORD PTR DS:[EDX]
0040F100   B0 BF            MOV AL,0BF
0040F102   F6               ???                                      ; Unknown command
0040F103   49               DEC ECX
0040F104   08C3             OR BL,AL
0040F106   02BD 3B6C2946    ADD BH,BYTE PTR SS:[EBP+46296C3B]
0040F10C   1328             ADC EBP,DWORD PTR DS:[EAX]
0040F10E   5D               POP EBP


Отлично. Жмем F9 (Run) и останавливаемся на INT3 команде по адресу 0040FD62:


0040FD63  -EB FE            JMP SHORT gM.0040FD63
0040FD65   CD 01            INT 1
0040FD67  -EB FE            JMP SHORT gM.0040FD67
0040FD69   90               NOP
0040FD6A   90               NOP
0040FD6B   90               NOP
0040FD6C   90               NOP


Старый ушлый прикол: Прыжок в самого себя, программа в этом месте (только тут их два: 0040FD63 и 0040FD67) зациклится и капец, поэтому выделяем первые три строки щелкаем по ним правой кнопкой и выбираем Binary -> Fill with NOPs. Таки образом мы убрали ловушку. Опять нажимает F9 и на этот раз из-за ошибки «Access violation when writing to [00000000]» тормозим в таком месте:


0040FE3C   3100             XOR DWORD PTR DS:[EAX],EAX
0040FE3E   90               NOP
0040FE3F   90               NOP
0040FE40   90               NOP
0040FE41   90               NOP
0040FE42   EB 1E            JMP SHORT gM.0040FE62
0040FE44   8B4C24 08        MOV ECX,DWORD PTR SS:[ESP+8]


Здесь нам советуют нажать Shift+F7/F8/F9, послушаем умный совет и нажмем Shift+F9. Снова остановка по INT3 команде:


0040FEF1   8BEF             MOV EBP,EDI
0040FEF3   33DB             XOR EBX,EBX
0040FEF5   64:8F03          POP DWORD PTR FS:[EBX]
0040FEF8   83C4 04          ADD ESP,4
0040FEFB   3C 04            CMP AL,4


Жмем F9. Теперь «Access violation when writing to [FFFFFFFF]»:


0040FF2A   64:8920          MOV DWORD PTR FS:[EAX],ESP


Давим Shift+F9 пока не остановимся тут:


00410A27   64:8920          MOV DWORD PTR FS:[EAX],ESP


Здесь нас пропускать не хотят, редиски! Ну и ладно, щелкаем по этой строке правой кнопкой и выбираем Binary -> Fill with NOPs. Мы вновь ее занопили. Нажимаем Shift+F9. Опять не пускают! Нопим. Теперь жмем на Shift+F9 три раза, и вылетаем на нулях… Блин, по идее здесь всегда конец, нужно начинать все с начала, но мы этого делать не будем. Тыкаем Shift+F9 и мы здесь:


00404A40  -EB FE            JMP SHORT gM.00404A40
00404A42   CD 01            INT 1
00404A44  -EB FE            JMP SHORT gM.00404A44


Знакомые ловушки? Все знаю ч то с ними делать? После того как ловушки вновь убраны смотрим на несколько строк ниже:


00404A70   6A 00            PUSH 0
00404A72   E8 2B060000      CALL gM.004050A2                         ; JMP to kernel32.GetModuleHandleA
00404A77   A3 00104000      MOV DWORD PTR DS:[401000],EAX
00404A7C   A3 B0514000      MOV DWORD PTR DS:[4051B0],EAX
00404A81   A3 44534000      MOV DWORD PTR DS:[405344],EAX
00404A86   6A 00            PUSH 0
00404A88   68 9E4A4000      PUSH gM.00404A9E
00404A8D   6A 00            PUSH 0
00404A8F   6A 64            PUSH 64
00404A91   50               PUSH EAX
00404A92   E8 47060000      CALL gM.004050DE                         ; JMP to USER32.DialogBoxParamA
00404A97   6A 00            PUSH 0
00404A99   E8 F8050000      CALL gM.00405096                         ; JMP to kernel32.ExitProcess
00404A9E   55               PUSH EBP
00404A9F   8BEC             MOV EBP,ESP


Ну надо же! Да ведь 00404A70 это оригинальная точка входа! Если вы забыли, мы еще в начале определили ее PEiD’ом, но он ошибся программа как известно написана на асме, а точка входа асм как раз начинается с таких байт. Поэтому ставим Breakpoint (F2) по адресу ОЕР’а (00404A70). Жмем разок F9 и все! Уряяя! Мы стоим на Оригинальной Точке Входа, а значит пора снимать дамп.

Снятие дампа:


Вообще ничего сложного. Запускаем PETools, в списке процессов выбираем наш. Щелкаем правой кнопкой и выбираем «Dump Full…», сохраняем дамп. Усе!

Чистый четверг (Убираем весь лишний мусор):


Запускаем ResFixer. Открываем в нем наш дамп. В таблице видим, что некоторые ресурсы сперты в другую секцию. В ResFixer’e выбираем «Rebuild Method: Method 2 (Full reconstruct)» и щелкаем по кномке «Rebuild». Сохраняем ресурсы в файл (допустим «rsrc»). Закрываем ResFixer. Теперь открываем файл дампа в PETools (Tools -> PE Editor). В открывшемся окне щелкаем по кнопке «Sections». Теперь нужно удалить две нижние секции: выделяем самую нижнюю, правой кнопкой -> Kill section (from file), и еще раз. Теперь правой кнопкой -> Load section from disk… Открываем файл, который сохраняли в ResFixer’e. На новой секции щелкаем правой кнопкой -> Edit section header. В поле «Name:» пишем «.rsrc», а в поле «Virtual Offset:» переписываем значение из поля «Raw Offset» (0000E000). Также нужно изменить «Characteristics» c E00000E0 на С0000040. Тыкаем ОК. Закрываем PETools.

Восстановление импорта.


Запускаем ImpRec, в поле «Attach to an Active Process» выбираем нашу цель (gm.exe). В поле OEP пишем: 00004A70 (ОЕР-ImageBase) и жмем по кнопке «IAT AutoSearch», нам говорят что вроде что-то есть, теперь жмем «Get Imoprts» и «Fix Dump». Выбираем наш файл дампа (dumped.exe).

Последний штрих.


Если попробовать запустить программу, то из этого ничего не получится. Поэтому открываем файл с восстановленным импортом (dumped_.exe) в HIEW. Нажимаем такую комбинацию клавиш:
Enter - Перейти в HEX режим
F8 - Просмотр информации о заголовке файла
F5 - Переход на точку входа
F3 - Включить режим изменений
6 - Написать цифру шесть в HEX режиме
F9 - Сохранить изменения
Esc - Закрыть HIEW

Конец! Теперь прога работает и ресурсы восстановлены!
P.S.: Забыл! Теперь закройте OllyDbg, PEiD и всю фигню, которую вы открыли.

Greets to: Guru.eXe, sniper, VEDROiD, PE_Kill и всем, всем, всем!




Обсуждение статьи: Goat's PE Mutilator 1.6 От новичка для новичков >>>


Комментарии к статье: Goat's PE Mutilator 1.6 От новичка для новичков

Gideon Vi 28.09.2006 17:02:22
Забавно. Кто пропускает такие статьи? Это для новичков?
Spirit, новичкам нужна теория, а не голые: "Жмем F9 (Run)"
---
Boss 08.10.2006 10:14:37
Да скартинками лучше было-бы, но всеровно молодец
только вот как ты понял, что это ловушки в проги?
и зачем пеид он всеровно ошибся
---
Spirit 10.10.2006 18:02:31
Boss
С картинками - нельзя, я в нет через мобилу хожу.
А пеид - это у меня стандартный ход при распаковке для того,
чтобы хоть примерно знать, где находится ОЕР
---
PE_Kill 14.10.2006 11:45:49
Проходить ловушки по F9!!!!!?????? :-\ Про SEH слышал? Это наверное какой то лоховской криптор, раз он обход exceptions не палит...
---

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



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


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