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

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


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

Распаковка UPX-Scrambler - нет ничего проще

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

Массу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.

Автор: ARCHANGEL <crazyangel88@mail.ru>

Вступление

Обычно все тьюторы начинаются с описания софта, который крэкер облюбовал для взлома: вначале
идёт рассказ о том, где взять ту или иную софтину, зачем она нужна, почему именно она и т.д.
Или же всё начинается с текста, суть которого звучит приблизительно так:"Вам всё равно, что
ломать, так давайте посмотрим, что сломал я". Но эта история будет иметь абсолютно другое
начало.
Как-то одним летним вечером я обнаружил, что у меня есть масса свободного времени и решил его
потратить на прочтение чего-нибудь познавательного. В качестве "чего-нибудь" была выбрана
небезызвестная статья:
"Об упаковщиках в последний раз"
Многие люди рекомендовали мне её прочитать, да и я сам хотел узнать побольше о распаковке.
Одолев первую часть, я, наконец, принялся за переваривание второй. Всё шло более-менее гладко,
пока я не дошёл до практической части. Практика начиналась с UPX (что, в общем, и понятно),
но, по словам авторов данной статьи "Мы предпочтем рассмотреть вопрос "почему", а не вопрос
"как" несложно понять, что руководства по распаковке этого пакера мы здесь не найдём. Тогда
что найдём? Здесь мы в изобилии найдём инфу о неких скрамблерах. Если быть более точным, то
только о двух: UPX-SCRAMBLER и HidePX. Если вам не довелось по каким-либо причинам прочитать
эту статью, то поясню, что скрамблеры (если всё так жёстко обобщить и сделать вывод, то
звучать он будет именно так:) применяются для предотвращения распаковки UPX. И всё бы
ничего, но по идее, в этой статье должно было быть описание, как побороть эти скрамблеры,
тем не менее, вместо этого авторы предлагают скачать модифицированный UPX и плагин для
PeTools, которые вкупе будут автоматически распаковывать вышеперечисленные скрамблеры.
И если в статье ещё имеется солидный кусок теории, посвящённый HidePX, то UPX-SCRAMBLER
просто блекнет в лучах его славы:). Конечно, многие скажут, что, типа, UPX-SCRAMBLER не такой
уж крутой, чтоб про него ещё и писать, ведь он распаковывается на раз-два и т.д. и т.п.
Но ведь статья "Об упаковщиках в последний раз" писалась для людей, которые учились
искусству распаковки с нуля, или я не прав? Без сомнения, люди, распаковавшие арму или
аспр последних версий, уж смогут что-то придумать со скрамблерами, но если человек только
начинает осваиваться в искусстве распаковки, то этот тьютор как раз может упростить задачу.
Можете рассматривать его как приложение к вышеупомянутой статье, ведь именно так он и был
создан. Но хватит уже болтовни, пора начинать...

Начало

Стоит заметить, что скрамблеры вообще встречаются нечасто. А даже если и встречаются, то
мы вполне можем не обратить на них внимания. Почему? Да потому, что попросту разожмём такой
файл с помощью какого-то крутого распаковщика - и делу конец. Или же распакуем вручную.
Дело в том, что UPX-SCRAMBLER и HidePX являются самыми мощными из скрамблеров, но есть и
другие. Так вот, эти другие нельзя распаковать с помощью UPX, зато распаковка вручную
может ничем не отличаться от стандарта. Но UPX-SCRAMBLER (а именно его мы и будем
рассматривать) отличается от стандарта, и здесь всё не будет проходить по накатанной схеме.
(Ну, будет, но не всё:). Для начало определимся, какие инструменты нам понадобятся:
1. OllyDebug v1.10 + CommandBar
2. PeID v 0.93 и старше
3. ImpRec 1.6 final
4. Resource Binder 2.0
5. Сюрприз - Protection ID v 5.0
6. Pe Tools v 1.5 Xmas Edition

Мне кажется, не стоит обьяснять, зачем нужен каждый из этих инструментов. Скажу только, что
два анализатора нам понадобятся, что обнаружить скрамблер. Дело в том, что PeID не считает
скрамблер такой уж защитой. Я, в принципе, с ним согласен, но в учебных целях придётся
использовать Protection ID. Ах, да - совсем забыл познакомить вас с нашей мишенью. Мишенью
у нас будет, как это ни странно, генератор рег.ключей для WinRar, написанный неизвестным
крэкером. Почему именно он? Это всё, что мне удалось найти из запакованного скрамблерами.
Ну, начнём.
Первым делом эксперимента ради натравим на него PeID. На что PeID ответит:
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
Как видите, произошло то, о чём я предупреждал выше. Ну и ладно, давайте посмотрим на
секции с помощью Pe Tools, в часности, нас интересуют имена секций:
code
text
.rsrc

Как видите, нет стандартных UPX0 и UPX1, значит перед нами скрамблированный UPX. Тперь самое
время натравить на запакованный файл Protection ID:

> Ready
Scanning -> D:\Program files\WinRAR\keygen.exe
File Type : Exe, Size : 6144 (01800h) Bytes
[!] UPX Scrambler detected ! --------- ну, что я говорил?
[!] UPX [unknown / modified] !
- Scan Took : 0.984 Seconds

Вот мы и убедились, что имеем дело со скрамблером, теперь попробуем его отковырять:)
Грузим это дело в отладчик. Стоим здесь:

00406F40 > $ 61             POPAD
00406F41   . BE 00604000    MOV ESI,keygen.00406000
00406F46   . 8DBE 00B0FFFF  LEA EDI,DWORD PTR DS:[ESI+FFFFB000]
00406F4C   . 57             PUSH EDI
00406F4D   . 83CD FF        OR EBP,FFFFFFFF

Как видите, вместо pushad, которые так свойственны upx, первой инструкцией является popad.
Код явно нетипичный для upx. Что же будет дальше? Для начала найдём OEP, здесь не будем
придумывать ничего нового, а просто в отладчике поставим бряк:
hr esp-4
Вы спросите, почему мы поставили Hardware Breakpoint? Потому что Hardware работают быстрее,
чем Memory. Нажмём F9 и прервёмся где-то в таком месте, которое ну никак не напоминает
OEP. Нажмём ещё раз F9 и ещё раз. Такими темпами мы будем долго идти до OEP, лучше сделаем
так: зажмём F9 и будем держать до тех пор, пока программа не подаст какие-либо признаки
жизни (в нашем случае мы увидим информационный MessageBox), а когда это произойдёт,
посмотрим, на каком месте последний раз сработал наш бряк. Сказано - сделано. Такими
шаманскими приёмами мы оказались здесь:

0040175F   55               PUSH EBP
00401760   8BEC             MOV EBP,ESP                       МЕСТО ПОСЛЕДНЕГО СРАБАТЫВАНИЯ
00401762   6A FF            PUSH -1
00401764   68 E0204000      PUSH keygen.004020E0
00401769   68 E0184000      PUSH keygen.004018E0                     ; JMP to MSVCRT._except_handler3
0040176E   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
00401774   50               PUSH EAX
00401775   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0040177C   83EC 68          SUB ESP,68
0040177F   53               PUSH EBX
00401780   56               PUSH ESI
00401781   57               PUSH EDI
00401782   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
00401785   33DB             XOR EBX,EBX
00401787   895D FC          MOV DWORD PTR SS:[EBP-4],EBX
0040178A   6A 02            PUSH 2
0040178C   FF15 64204000    CALL DWORD PTR DS:[402064]               ; MSVCRT.__set_app_type
00401792   59               POP ECX
00401793   830D E4324000 FF OR DWORD PTR DS:[4032E4],FFFFFFFF
0040179A   830D E8324000 FF OR DWORD PTR DS:[4032E8],FFFFFFFF
004017A1   FF15 68204000    CALL DWORD PTR DS:[402068]               ; MSVCRT.__p__fmode
004017A7   8B0D E0324000    MOV ECX,DWORD PTR DS:[4032E0]
004017AD   8908             MOV DWORD PTR DS:[EAX],ECX
004017AF   FF15 6C204000    CALL DWORD PTR DS:[40206C]               ; MSVCRT.__p__commode

Ну как, присмотритесь повнимательнее, где-то рядом должна быть OEP. Хотя, почему рядом,
мы и так практически на OEP, ведь это - стандартное начало программ, написанных на C++
шестой версии. А если поднимемся на одну команду вперёд - то это и будет наша OEP:). Для
тех, кто ещё не понял: VA OEP составляет 0040175F. Теперь с помощью Pe Tools определим
ImageBase - оно сотавляет 00400000. Отсюда:

VA-ImageBase=RVA
0040175F-00400000=0000175F

Вот и наша OEP, которое мы будем вписывать в ImpRec. Сейчас нам нужно поставить на адрес
0040175F Hardware Breakpoint on execution (он будет обозначен номером 2), снять бряк под
номером 1 и перезапустить прогу под отладчиком. Опять жмём F9, прерываемся на OEP и дмапим
процесс с помощью Pe Tools. Перед этим в настройках помечаем галочкой такие пункты:

Full Dump: Fix Header
Full Dump: Paste Header from Disk
Dump Fix
Wipe relocation
Rebuild PE
Validate PE

Вписали эти настройки и сделали дамп? Отлично, идём дальше. Теперь восстановим таблицу
импорта. Этот процесс не будет отличаться чем-то особенным - просто запустим ImpRec,выберем
из всех процессов наш keygen.exe, в поле OEP впишем 0000175F, нажмём IAT AutoSearch, после
чего ImpRec сообщит нам, что таблица импорта найдена. Далее жмём Get Imports и получаем
валидную таблицу импорта, т.е. напротив каждой библиотеки отображается количество найденых
функций и светится надпись Yes. Отлично, теперь ставим галочку напротив Add new section и
жмём Fix dump. В появившемся меню выбираем наш дамп, и всё восстанавливаем. Да, не забудьте
перед этим в настройках ImpRec указать Fix EP to OEP.
Следующим этапом будет обычный Rebuild Pe, который мы выполним с помощью Pe Tools. И после
этого файл, в принципе, можно считать уже распакованным. Во всяком случае, именно так поступает
Quick Unpack v1.0 beta 5 - один из самых мощных на сегодня распаковщиков скрамблированных
файлов. Если вы с его помощью попытаетесь распаковать данный файл, то он выполнит все
вышеперечисленные действия, и это - неплохо, но есть одно НО: как же быть с ресурсами, ведь
из за скрамблера они до сих пор не доступны для редактирования, а вы сами знаете, как иногда
хотелось бы что-то там подправить:)Для этого мы не будем особо париться, а просто запустим
Resource Binder 2.0. Далее снимем галку с пункта "Оптимизировать секции..." (пункт второй),
так как он этого нормально делать не умеет, натравим его на наш распакованный ехе и нажмём
"Восстановить". Всё, теперь открывая прогу через Restorator, мы сможем насладиться вволю
модифицированием ресурсов.
(Следует заметить, что Quick Unpack v1.0 beta 5 распаковывает скрамблеры по настроению, не
знаю, от чего это зависит, но файл, который прекрасно распаковывался вчера, сегодня может
как партизан не выдавать свою ОЕР:(, особенность неприятная, поэтому умение ручной распаковки
никак не будет лишним:)
Кстати, помните, при нахождении OEP я говорил, что мы, якобы, при остановке на последнем
бряке попали почти на OEP С++ шестой версии? Давайте проверим, не обманул ли я вас. Натравим
на распакованный файл PeID, и вот что он нам выдаст:
Microsoft Visual C++ 6.0
Что и требовалось доказать. Так мы с вами только что побороли UPX-Scrambler.

Пояснения

В конце статьи хотелось бы дать некоторые пояснения к вышеописанному процессу и дать несколько
полезных ссылок. Откровенно говоря, скрамблеры - не протекторы, здесь мы не увидим ни
антиотладки, ни сокрытия таблицы импорта (и антидампов уж точно не будет:). Основная фишка
скрамблера - сокрытие ОЕР, но, как видите, абсолютно стандартный приём, про который уже
сотни раз говорилось (hr esp-4) снова показал себя. Хотя, с другой стороны, представьте,
что вы хотите распаковать скрамблер при помощи Soft-Ice. Тогда задача немного усложнится,
но вспомните свою первую распаковку UPX, самого обычного, нескрамблированного. Вспомнили?
А теперь представьте, что вам в этот момент попадается скрамблер. Ну как, впечатляет? Так
вот чтоб этого не произошло, я и написал данный тьютор.
Ещё в качестве особо ценного материала по искусству распаковки хотелось бы отметить тьютор
"Распаковка? Это легко!!!" - автор Bit-h@ck
Там вы найдёте ответы на многие вопросы, и (что особенно мне понравилось) стандартный вид
ОЕР некоторых популярных компиляторов. Удачи вам в нелёгком деле распаковки:)

"Великим критикам" посвящается

Почему-то вдруг вспомнилась ОООчень бородатая цитата:
"Критиковать - значит объяснять автору, что он делает не так, как делал бы критик, если бы умел"
PE_Kill, намёк понял?:)

Благодарности

Спасибо CrackLab, респект Bit-h@ck'у за тьтютор про распаковку, конечно, спасибо авторам
статьи "Об упаковщиках в последний раз" (скорее, спасибо за идею:), ну и тем, кто это всё
добро прочитал, тоже спасибо.



Обсуждение статьи: Распаковка UPX-Scrambler - нет ничего проще >>>


Комментарии к статье: Распаковка UPX-Scrambler - нет ничего проще


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



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


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