Скачать Free UPX 2.4

Inno Setup — бесплатный инструмент для создания инсталляторов с большим количеством полезных.
Cameyo — отличное приложение для создания портативных версий любых программ и утилит.
Exe to MSI converter преобразует обычные инсталляторы .exe в MSI (Microsoft Software Installer) пакеты. Вы также.
CreateInstall — универсальный, гибкий и мощный инсталлятор как для профессиональных.
mInstaller — удобная и маленькой программа для создания инсталляторов под MS Windows. Вы сможете создать свою программу инсталляции меньше, чем за минуту.
fastInstall — мощное и легкое в использовании приложение для создания установочных пакетов.
PE Explorer
English
Deutsch
Русский
- Обзорный тур
- Ссылки:
главная
программы
pe explorer
обзорный тур
Распаковщик UPX
Автоматическая распаковка файлов, сжатых UPX
В состав PE Explorer входит плагин для распаковки UPX. Этот плагин вызывается при каждом открытии файла и анализирует, не является ли открываемый файл сжатым при помощи UPX. Поддерживаются все версии UPX, начиная с самых ранних версий (до 0.80) и заканчивая самыми новыми 3.9x версиями.
Кроме того, PE Explorer поддерживает распаковку файлов, которые после сжатия UPX подверглись модификации с использованием так называемых UPX-скрэмблеров: Advanced UPX Scrambler, UPoLyX, UPX Lock. Так же PE Explorer поддерживает распаковку Upack и NSPack.
Теперь вы можете открывать файлы, сжатые UPX, и даже не заметить, что они были сжаты!
В случае, если открываемый исполняемый файл оказывается запакован UPX, плагин для распаковки UPX автоматически распаковывает файл и воссоздаёт его в его оригинальной несжатой форме, что позволяет вам проводить дальнейший анализ файла в PE Explorer.
При сохранении на диск файл записывается так же в распакованном виде. PE Explorer не запаковывает файл обратно. По этой причине размер файла до и после открытия может существенно отличатся, даже если вы не вносили в него никаких изменений.
Плагин для распаковки UPX отображает всю информацию о ходе процесса декомпрессии файла в нижней панели лога:
Распаковка вредоносных программ
Плагин для распаковки UPX содержит механизм распаковки файлов, которые подверглись модификации после сжатия. Такие файлы не могут быть распакованы стандартными средствами самого UPX, поскольку была изменена внутренняя структура файла. Например, имя секции UPX переименовано в XYZ, или версия формата UPX исправлено с 1.20 на 3.21. Эта техника часто используется вирусмейкерами для маскировки и защиты от распаковки.
Чтобы распаковать такой EXE файл самостоятельно, вам бы пришлось запустить его и снять дамп запакованных участков памяти с последующей записью на жёсткий диск после того, как файл полностью распакуется в памяти компьютера.
PE Explorer полностью избавляет вас от необходимости этим заниматься. Всё, что нужно, чтобы распаковать подобный обфусцированный файл — это просто открыть его в PE Explorer. Все операции по распаковке происходят автоматически.
Более того, плагин для распаковки UPX предпринимает попытку восстановить исходный файл, даже если в сжатом файле отсутствует оригинальный PE заголовок. Обычно отсутствие заголовка у PE файла делает его полностью неработоспособным и не подлежащим восстановлению. Однако, используя PE Explorer, вы получаете неплохой шанс на восстановление и анализ таких файлов.
Менеджер плагинов
При выборе команды Plug-in Manager из меню Tools открыается окно Менеджера плагинов .
Менеджер плагинов отображает список плагинов, подключенных к PE Explorer, и позволяет устанавливать очередность их выполнения. Чем больше значение Priority, тем выше приоритет выполнения. Установив значение Priority равным нулю, вы отключаете плагин. Отключенные плагины помечены красным значком, включенные — зелёным.

Пожалуйста, обратите внимание, что текущая версия PE Explorer пока не поддерживает выполнение цепочки плагинов. Это значит, что сейчас вызов следующего по списку плагина произойдёт только в том случае, если предыдущий плагин вернул FALSE после исполнения. После первого же успешного срабатывания любого плагина процесс обработки прекращается и файл передаётся в PE Explorer.
Написание собственных плагинов
Плагин для распаковки UPX предназначен для только работы с файлами, сжатыми UPX. Если вы хотите расширить функциональность PE Explorer и создать свой собственный плагин для обработки файла во время его открытия, воспользуйтесь предоставленным API для плагинов. Документацию по API можно найти в файле помощи, в разделе Plug-Ins.
Обзорный тур
назад | след. 
Распаковка исполняемых файлов
Привет, хабровчане. В рамках курса «Reverse-Engineering. Basic» Александр Колесников (специалист по комплексной защите объектов информатизации) подготовил авторскую статью.
Также приглашаем всех желающих на открытый вебинар по теме «Эксплуатация уязвимостей в драйвере. Часть 1». Участники вебинара вместе с экспертом разберут уязвимости переполнения в драйверах и особенности разработки эксплойтов в режиме ядра.
Статья расскажет о подходах к анализу запакованных исполняемых файлов с помощью простых средств для обратной разработки. Будут рассмотрены некоторые пакеры, которые применяются для упаковки исполняемых файлов. Все примеры будут проведены в ОС Windows, однако изучаемые подходы можно легко портировать на любую ОС.
Инструментарий и настройка ОС
Для тестов будем использовать виртуальную машину под управлением ОС Windows. Инструментарий будет содержать следующие приложения:
установленный по умолчанию плагин x64dbg Scylla;
Самый быстрый и простой способ провести распаковку любого исполняемого файла — применить отладчик. Но так как мы будем также рассматривать язык программирования Python, то может понадобится проект:
uncompile6 проект, который позволяет разобрать байткод виртуальной машины Python;
pyinstallerExtractor инструмент для распаковки архива pyInstaller.
Общие методы снятия паковки
Разберемся, что же такое паковка. В большинстве случаев исполняемые файлы современных языков программирования имеют довольно большой размер при минимальном наборе функций. Чтобы оптимизировать данную величину, можно применить паковку или сжатие. Наиболее распространенный на сегодняшний день пакер — UPX. Ниже приведен пример того, как пакер проводит сжатие исполняемого файла.

На картинке может показаться, что файл стал по размеру больше, однако это не всегда так. Большинство файлов за счет такой модификации могут уменьшить свой размер до 1.5 раз от исходного объема.
Что же от этого реверс-инженеру? Почему надо знать и уметь определять, что файл упакован? Приведу наглядный пример. Ниже приведен снимок файла, который не запакован:

И файл, который был пропущен через алгоритм UPX:

Изменения коснулись в этом случае двух основных точек исполняемого файла:
Точка входа — в случае с упакованным файлом это начало алгоритма распаковки, настоящий алгоритм программы будет работать только после того, как будет распакован оригинальный файл;
Код оригинального файла: теперь не найти паттернов, которые можно сразу разбирать как команды.
Итак, чтобы снова анализировать оригинальный файл, нужно найти настоящую или оригинальную точку входа. Для этого нужно разбить алгоритм на основные этапы:
Этап подготовки исполнения файла — загрузчик ОС настраивает окружение, загружает файл в оперативную память;
Сохранение контекста — упаковщик сохраняет контекст исполнения файла (набор значений регистров общего назначения, которые были установлены загрузчиком ОС);
Распаковка оригинального файла;
Передача управления оригинальному файлу.
Все описанные выше этапы можно легко отследить в отладчике. Особенно может выделяться процедура сохранения контекста. Для нее в разных архитектурах могут быть использованы команды pushad/popad или множественное использование команды push . Поэтому всегда приложение трассируют до первого изменения регистра ESP/RSP, и ставят «Hardware Breakpoint» на адрес, который был помещен в регистр в первый раз. Второе обращение этому адресу будет в момент восстановления контекста, который заполнил загрузчик ОС. Без него приложение завершится с ошибкой.
Пример UPX
Попробуем с помощью отладчика найти оригинальную точку входа для приложения. Запечатлим оригинальную точку входа до упаковки UPX:

Как та же точка входа выглядит после упаковки:

Запустим отладчик и попробуем найти место сохранения контекста:

Ждем первого использования ESP — в отладчике при этом значение регистра подсветится красным цветом. Затем устанавливаем точку останова на адрес и просто запускаем приложение:

В результате попадаем на оригинальную точку входа:

Вот так просто, теперь используя плагин Scylla Hide можно сохранить результирующий файл на жесткий диск и продолжить его анализ.
Подобный метод можно применять для любого упаковщика, который сохраняет контекст на стек.
Пример PyInstaller
Не всегда подобный подход работает для приложений, которые используют более сложную структуру исполняемого файла. Рассмотрим файл, который был создан с помощью PyInstaller — пакет, который позволяет преобразовать Python скрипт в исполняемый файл. При генерации исполняемого файла создается архив, который содержит виртуальную машину Python и все необходимые библиотеки. Сам исходный код приложения при этом преобразуется в байт код и его нельзя дезассемблировать.
Попробуем все же получить что-то читаемое. Создадим простое приложение на Python и упакуем с помощью PyInstaller. Исходный код приложения:
Установим пакет pyInstaller и создадим exe файл:
Итак, проведем сбор информации о том, что в итоге получилось. У нас есть архив, который должен запустить виртуальную машину, и код, который мы записали в виде скрипта. Попробуем восстановить исходник и просто его прочесть даже без запуска.
После выполнения команд выше, у вас должна создаться директория ./dist/test.exe . Откроем последовательно файл с помощью pyinstallerextractor и uncompile3 :

Наш скрипт находится в директории, которая создается в результате распаковки. Наименование файла должно соответствовать названию exe файла. В нашем случае это test.pyc . Откроем его в hiew :

Декомпиляция стандартными средствами невозможна, так как инструменты просто не умеют работать с байткодом Python. Применим специализированный инструмент — uncompile6 .
Распаковка UPX-Scrambler — нет ничего проще
Вступление
Обычно все тьюторы начинаются с описания софта, который крэкер облюбовал для взлома: вначале
идёт рассказ о том, где взять ту или иную софтину, зачем она нужна, почему именно она и т.д.
Или же всё начинается с текста, суть которого звучит приблизительно так:"Вам всё равно, что
ломать, так давайте посмотрим, что сломал я". Но эта история будет иметь абсолютно другое
начало.
Как-то одним летним вечером я обнаружил, что у меня есть масса свободного времени и решил его
потратить на прочтение чего-нибудь познавательного. В качестве "чего-нибудь" была выбрана
небезызвестная статья:
"Об упаковщиках в последний раз"
Многие люди рекомендовали мне её прочитать, да и я сам хотел узнать побольше о распаковке.
Одолев первую часть, я, наконец, принялся за переваривание второй. Всё шло более-менее гладко,
пока я не дошёл до практической части. Практика начиналась с 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
.rsrc
Как видите, нет стандартных UPX0 и UPX1, значит перед нами скрамблированный UPX. Тперь самое
время натравить на запакованный файл Protection ID:
Scanning -> D:Program filesWinRARkeygen.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. Отсюда:
Full Dump: Fix Header
Full Dump: Paste Header from Disk
Вписали эти настройки и сделали дамп? Отлично, идём дальше. Теперь восстановим таблицу
импорта. Этот процесс не будет отличаться чем-то особенным — просто запустим 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, самого обычного, нескрамблированного. Вспомнили?
А теперь представьте, что вам в этот момент попадается скрамблер. Ну как, впечатляет? Так
вот чтоб этого не произошло, я и написал данный тьютор.
Ещё в качестве особо ценного материала по искусству распаковки хотелось бы отметить тьютор
"Распаковка? Это легко. " — автор [email protected]
Там вы найдёте ответы на многие вопросы, и (что особенно мне понравилось) стандартный вид
ОЕР некоторых популярных компиляторов. Удачи вам в нелёгком деле распаковки />
"Великим критикам" посвящается
Почему-то вдруг вспомнилась ОООчень бородатая цитата:
"Критиковать — значит объяснять автору, что он делает не так, как делал бы критик, если бы умел"
PE_Kill, намёк понял?
Благодарности
Спасибо CrackLab, респект [email protected]’у за тьтютор про распаковку, конечно, спасибо авторам
статьи "Об упаковщиках в последний раз" (скорее, спасибо за идею
, ну и тем, кто это всё
добро прочитал, тоже спасибо.
Комментарии к статье: Распаковка UPX-Scrambler — нет ничего проще