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

Видеокурс программиста и крэкера 5D 2O17
(актуальность: декабрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

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


Распаковка ExeCryptor 2.2 и 2.3 (на примере RAR Repair Tool 4.0), часть 1




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

Распаковка ExeCryptor


Программа

RAR Repair Tool v4.0

Download

http://www.rar-repair-tool.com/

Описание

Восстановление поврежденных архивов .RAR

Инструменты

OllyDbg 1.10, PhantOm v1.04, PEiD v0.94, PE Tools v1.8.800.2006 RC7, Hex Workshop v4.23, Plugin OdbgScript v1.64.3, Import REConstructor v1.6 F

Сложность

Для опытных crackers

Пакер/Компилятор

Распаковка ExeCryptor v2.2-2.3

Защита

Распаковка ExeCryptor v2.2-2.3

Цель

Распаковка

Cracker

vnekrilov

Туториал №




0. ВВЕДЕНИЕ


Однажды, упорядочивая скачанные программы на жестком диске, и записывая их на CD, я ненароком удалил и некоторые незаписанные программы. Для восстановления этих удаленных программ мне пришлось использовать прекрасную программу EasyRecovery Professional, которая восстановила удаленные мной файлы .RAR. Однако эти архивы оказались поврежденными, которые не смог восстановить архиватор WinRAR. Оказалось, что в некоторые файлы .rar, которые относятся к одним программам, включена часть файлов из других программ, поэтому я решил спасти хоть что-то. Полазив в сети, среди нескольких аналогичных программ, я нашел довольно интересную программу RAR Repair Tool v4.0, которая восстанавливает файлы из битых архивов .rar. Однако у нее имеется один недостаток - она требует регистрационный ключ, и, в демо-версии, не может восстанавливать архивы, имеющие размер более 5,0 МБ. Поскольку этого ключа у меня нет, я решил взломать эту программу, которая оказалась упакована ExeCryptor v2.2-2.3. Я прочитал много туториалов, посвященных распаковке ExeCryptor, но в каждом туториале освещена лишь некоторая часть вопросов, а остальные или описаны вскользь, или, вообще не раскрыты.


Как всегда, перед началом работы, анализируем программу в Peid, применив для этого опцию Deep Scan:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Программа упакована ExeCryptor 2.2.4.


А теперь посмотрим на эту программу в DiE v0.64:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Здесь мы видим, что программа скомпилирована на Microsoft Visual C++, и упакована ExeCryptor v2.2.x-2.3.x.


1. Поиск OEP программы



Перед поиском OEP программы, нам надо определиться с анти-отладочными ловушками ExeCryptor, поскольку программа должна нормально запускаться в отладчике OllyDbg. В последнее время, для борьбы с анти-отладкой я использую всего два plugin: OllyAdvanced v1.26 beta 12, и PhantOm v1.04, разработанный нашими cracker’s Hellsp@wn&Archer. Хотя последний plugin прекрасно справляется со многими анти-отладочными ловушками, plugin OllyAdvanced v1.26 beta 12 имеет ряд опций (например, Break on TLS Callback), которых пока нет у второго plugin.


Запускаем отладчик OllyDbg, загружаем в него программу, нажимаем клавишу F9 (запуск программы), и видим:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Значит, сработала анти-отладочная ловушка, и программа закрылась.


Многие авторы по распаковке программ, в таких случаях рекомендуют изменить настройки отладчика OllyDbg, и выполнить остановку программы на SYSTEM BREAKPOINT:




Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Запускаем программу в отладчике, и она останавливается после срабатывания System breakpoint здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Это нам пока ничего не дает. Давайте посмотрим на наш файл в PE Editor, для чего будем использовать программу PE Tools v1.8.800.2006 RC7. Открываем наш файл в PE Editor, переходим на вкладку Directory Editor, нажимаем кнопку ‘…’ возле параметра TLS Directory, и видим следующее:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Дело в том, что ExeCryptor, перед тем, как пройти на EP, выполняет код, с помощью которого он устанавливает ловушку, и не позволяет запустить программу в отладчике. Давайте в окне dump отладчика перейдем на Address of callback:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Здесь мы видим адрес 0070E75E, с которого начинает свою работу пакер ExeCryptor:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Устанавливаем на этот адрес BPM on Access, и нажимаем клавишу F9 (Run). Через пару секунд мы останавливаемся на BPM:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


А строка состояния отладчика сообщает нам, что программа остановлена на TLS Callback. Однако, при нажатии на клавишу F9, программа закрывается. Почему? Если мы перейдем на вкладку BreakPoint, нажав кнопку ‘B’, то увидим следующее:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Откуда здесь взялась BreakPoint?. Дело в том, что отладчик, чтобы остановить программу на Entry Point, устанавливает свою временную BreakPoint на адресе, который он читает в PE-заголовке:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


0030E752 + 00400000 (ImageBase) = 0070E752




Именно на этот адрес OllyDbg установил временную (one-shot) BreakPoint. А, как мы знаем, при установке BreakPoint, отладчик заменяет первый байт E8, который находится по этому адресу, байтом CC, который является инструкцией прерывания int 3. Естественно, что при этом меняется CRC этой области кода, и пакер закрывает программу, не доходя до Entry Point программы. Давайте уберем эту BreakPoint, после чего нажимаем клавишу F9, и программа нормально запускается.


Прекрасный plugin OllyAdvanced v1.26 beta 12 имеет специальную опцию “Break on TLS Callback”, которая позволяет остановить программу на адресе 0070E75E, найденным нами вручную:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Однако, после запуска программы, через небольшой промежуток времени, программа закрывается вместе с отладчиком, что не позволяет нам исследовать код программы. Почему это происходит?


Если мы откроем вкладку “Thread”, то там увидим следующее:



Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Во время загрузки программы, пакер ExeCryptor, помимо главной нити, создает еще целую кучу дополнительных нитей, которые и проверяют наличие отладчика. Значит, нам надо подавить все остальные нити, кроме главной, чтобы можно было бы исследовать код программы. При этом очень важно знать ID главной нити, которая создается перед остановкой программы на TLS Callback. Если мы посмотрим в журнал LOG, нажав кнопку ‘L’, то там увидим:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Как бороться со вспомогательными нитями мы поговорим немного позже, а пока нам надо найти OEP программы.


Как обычно работают пакеры. Сначала протектор раскриптовывает код в секции кода, а затем, в последнюю очередь, он раскриптовывает Таблицу IAT. Поскольку программа у нас запущена, давайте посмотрим, где находится Таблица IAT. Переходим в секцию кода на адрес 00401000, и выполним бинарный поиск опкода FF 15 (ранее мы определили, что программа написана на Microsoft Visual C++):


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая



В окне дампа выбираем режим отображения Long → Address; и находим первую API LoadResource, которая находится по адресу 004DC250 таблицы IAT.


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Значит, таблица IAT находится здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Перезагружаем программу в отладчике, и устанавливаем BPM on write на эту область памяти:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Запускаем программу, нажав клавишу F9, и программа останавливается здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая



Здесь очень интересно посмотреть в окне dump на адреса таблицы IAT:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Вначале, по адресам таблицы IAT записаны какие-то значения в порядке возрастания номеров: 6B, 6C, 6D, и т.д., а потом адреса B, C, D, E, и т.д. По этим адресам записываются сначала адреса API из библиотеки COMCTL32, а затем - адреса API из библиотеки GDI32:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Выше адресов API из библиотеки COMCTL32 мы видим адреса, которые ведут в секцию протектора ExeCryptor. Давайте прокрутим код в секции dump, чтобы найти конец IAT; он находится здесь:



Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Ниже этого адреса идут ссылки на секцию кода. Устанавливаем Hardware BreakPoint on write на адрес 004DC844, и удаляем BPM on write из области таблицы IAT:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Нажимаем клавишу F9, и ожидаем, пока протектор не запишет адрес последней API в конец таблицы IAT:




Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Удаляем Hardware BreakPoint on write, и устанавливаем BPM on access на секцию кода программы:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Но перед запуском программы, переходим в окно Thread, нажав кнопку ‘T’, и подавляем все нити, кроме главной (во время написания статьи мне приходилось много раз перезагружать программу в отладчике, поэтому ID главной нити на разных рисунках может быть разным). Если мы этого не сделаем, то программа закроется во время исследования кода возле OEP:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


И еще хочу обратить Ваше внимание на следующий момент - пакер для главной нити создает свою область стека:




Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Нажимаем клавишу F9, и останавливаемся здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Что-то не очень-то похоже на OEP! Может быть, мы имеем дело со Stolen Code?


Давайте воспользуемся подсказкой, которую нам дала утилита DiE v0.64. Поскольку наша программа написана на Microsoft Visual C++, интересно посмотреть на OEP какой-либо программы, написанной на этом языке программирования. Причем, поскольку утилита DiE v0.64 не указала, какая была использована версия компилятора Microsoft Visual C++, давайте посмотрим OEP двух программ. Одна программа скомпилирована компилятором Microsoft Visual C++ v6.0 (это - программа Passolo v6.0.05), которая установлена на моей машине. А вторая программа скомпилирована компилятором Microsoft Visual C++ v7.0 (это - программа Acronis Disk Director Suite v10.0), которая также установлена на моей машине.


Entry Point программы Passolo v6.0.05 выглядит так:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Посмотрим на окно стека этой программы:



Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Entry Point программы Acronis Disk Director Suite v10.0 выглядит так:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


А окно стека этой программы имеет следующий вид:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Сравнивая окна стека этих двух программ, мы видим, что когда программа остановлена на Entry Point, вершиной стека является адрес 0012FFC4. При выполнении первой инструкции, в стеке по адресу 0012FFC0 будет записано или значение регистра EBP, которое равно 0012FFF0 (для программы Passolo v6.0.05), или значение 18 (для программы Acronis Disk Director Suite v10.0).

Очевидно, что в нашей программе RAR Repair Tool должно быть то же самое:


  1. Нам нужно остановить программу, когда вершиной стека будет адрес 00B0FFC4 (помните, что стек в этой программе расположен по адресу 00B0D000, и имеет размер 3000 байтов).

  2. Нам нужно остановить программу при записи в стек первой инструкции - PUSH EBP, или PUSH CONST.


Перезагружаем программу в отладчике OllyDbg, в окне BreakPoint удаляем временную BreakPoint, которую установил отладчик, и устанавливаем Hardware BreakPoint on access на адрес 00B0FFC4. Нажимаем клавишу F9, и программа останавливается здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Нажимаем клавиши Ctrl + F9, и останавливаемся на инструкции RET, выполняем эту инструкцию, и оказываемся здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Трассируем с F8 до адреса 7C816D4C, и видим:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


В окне информации OllyDbg мы видим адрес Entry Point программы RAR Repair Tool - 0070E752. Нажимаем клавишу F7, и мы оказываемся здесь:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


А в окне стека мы видим следующее:



Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Как мы видим, окна стека всех трех программ - аналогичны. Значит, мы находимся на следующем пути. Теперь нам надо остановить программу на выполнении первой инструкции в OEP, причем этой первой инструкцией может быть инструкция PUSH EBP (если программа скомпилирована Microsoft Visual C++ v6.0), или PUSH CONST (если программа скомпилирована Microsoft Visual C++ v7.0). Переходим в окно dump, и переходим на адрес вершины стека 00B0FFC4, поднимаемся вверх, и устанавливаем Hardware BreakPoint on access на адрес 00B0FFC0:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


В окне ‘Thread’ подавляем все дополнительные нити, кроме главной нити, нажимаем клавишу F9, и смотрим, что записывается в стек по адресу 00B0FFC0 (еще раз подчеркиваю, что по этому адресу должно быть записано или значение регистра EBP, которое равно 00B0FFF0, или какое-то число). После нескольких нажатий на клавишу F9 (я насчитал 30 нажатий клавиши F9), видим следующее:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая




После записи разных значений, которые не соответствовали нашим критериям, наконец, по адресу 00B0FFC0 записано число 60. Посмотрим в окно CPU:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Если мы сравним этот код с кодом программы Acronis Disk Director Suite v10.0, то эти коды - практически аналогичные. Поэтому, можно сказать, что OEP программы находится по адресу 004359C9. Устанавливаем на этот адрес BP, и перезагружаем программу, удалив Hardware BreakPoint on access с адреса 00B0FFC0 (но оставив BreakPoint on access на адресе 00B0FFC4). Удаляем временную BreakPoint, подавляем дополнительные нити, активизируем установленную нами BP на адресе 004359C9, (отладчик ее отключает при раскриптовке кода), нажимаем клавишу F9, и программа останавливается на OEP.


Поэтому, можно сказать, наша программа скомпилирована компилятором Microsoft Visual C++ v7.0. На всякий случай, давайте в этом убедимся. Для этого, когда программа остановлена на OEP, давайте сделаем дамп памяти программы. Для этих целей я использую plugin OllyDbg PE Dumper v3.03 by FKMA:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


В появившемся окне plugin, устанавливаем флажки на опции, которые я пометил стрелками, нажимаем кнопку “Get EIP as OEP”, и удаляем все секции, созданные пакером ExeCryptor:




Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Сохраняем полученный дамп с любым именем, (я его назвал - dumped). Загружаем файл dumped.exe в PeID, и там видим:


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая


Значит, наш файл скомпилирован компилятором Microsoft Visual C++ v7.0. Небольшие различия в коде OEP, по сравнению с программой Acronis Disk Director Suite v10.0, вызваны тем, что программа Acronis Disk Director Suite v10.0 скомпилирована компилятором Microsoft Visual C++ v7.0 [Debug] [ZIP SFX].


Следует отметить, что на адрес OEP можно было бы пройти обычным методом, устанавливая BPM on access на секцию кода. Однако разработчики пакера ExeCryptor учли такую возможность, и ввели огромное количество прыжков, которые связывают секции пакера с секцией кода программы. Нам пришлось бы полдня нажимать клавишу F9, пока бы мы не пришли на OEP. С установкой же Hardware BreakPoint on access на адрес 00B0FFC0 нам понадобилось около 30 нажатия клавиши F9, чтобы пройти на OEP.


На этом мы закончили рассмотрение первой части туториала по распаковке программы, запакованной ExeCryptor. Во 2-й части мы рассмотрим восстановление таблицы IAT.


До встречи во 2-й части туториала.


vnekrilov


Распаковка ExeCryptor на примере RAR Repair Tool, часть первая



Скачать статью "Распаковка ExeCryptor 2.2 и 2.3 (на примере RAR Repair Tool 4.0), часть 1" в авторском оформление + файлы.



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


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