О чем может свидетельствовать наличие секций upx0 и upx1 в pe файле

Обновлено: 30.06.2024

главная программы pe explorer обзорный тур

Автоматическая распаковка файлов, сжатых 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.

В последнее время авторами программ
довольно часто используются упаковщики
исполняемых файлов. Делается это с двумя
целями: уменьшить размер экзешника и
защититься от дизассемблирования кода
начинающими кракерами. Да и патчить
упакованный файл не так просто. Но и не так
сложно, как мы увидим позже. В сети можно
найти множество распаковщиков, заточенных
под конкретный пакер, хотя большая часть
защит достаточно просто снимается ручками (драйвер
прямые_руки.sys все поставили?). Попробуем
поиметь упаковщик.

Для регистрации требует ввести 33-символьный
ключ. Стоимость регистрации для граждан
эксСССР - всего 150 рублей. Да я лучше вручную
буду перебирать. По правде говоря, мне нет
надобности вспоминать пароли, я их просто
не ставлю. Пусть желающие читать мои
вордовые файлы наслаждаются. Но, может, кому
и надо, может, у кого склероз, или охота
почитать чужие творения.

Попробуем зарегистрировать Accent Word Password
Recovery (далее просто awrdpr.exe).

  • мозги;
  • прямые руки (или прямые драйвера к
    кривым рукам);

(взять все это добро можно в инете или у
меня, что маловероятно – жадный)

Для начала скопируем файл awrdpr.exe в original.exe (резервная
копия), в awrdpr.w32 (для дизассемблера) и в null (на
всякий случай). Загрузим файл awrdpr.exe в
дизассемблер W32Dasm. Он немного думает, а
потом выдает нам какой-то извратный листинг,
в котором нет ни списка импортируемых
функций, ни String Reference. Похоже, мы наткнулись
на упаковщик. Точно, если посмотреть
экзешник 16-ричным редактором, в заголовке
увидим две секции UPX0 и UPX1, а также строку «1.20
UPX!». После долгих раздумий приходим к
выводу, что прога упакована UPX-ом. Это хорошо,
ведь если запустить этот паковщик с ключом
–d

upx –d awrdpr.exe

то он должен нам распаковать упакованную
ним же программу. Запускаем. Хорошо, да не
очень. Любимая нами всеми редкая птица
Обломинго снова показывает нам свой . Э,
что-то я увлекся. Прога не распаковывается.
Ну что ж, приложим свои умелые ручки и
немного поскрипим извилинами. Но сначала
немного теории. В упакованном файле сначала
идет небольшой кусок кода, который является
распаковщиком, далее идет упакованный
исходный файл, который нам нужно получить.
После запуска программы выполняется
распаковщик, восстанавливает в памяти
исходную программу и передает ей
управление. Нам нужно найти точку, где
происходит переход от упаковщика к
оригинальному коду программы. Обычно этот
переход выглядит вроде

где xxxxxxxx – адрес точки входа оригинальной
программы. Особые приметы: этот адрес будет
находиться достаточно далеко от того места,
откуда вызывается данная инструкция.
Займемся поиском. Идем в дизассемблер,
выбираем в главном меню Goto -> Goto Program Entry Point.
Видим некий код – это распаковщик. Листаем
ниже, пока не встретим такой код:

:00613656 8903 mov dword ptr [ebx], eax
:00613658 83C304 add ebx, 00000004
:0061365B EBD8 jmp 00613635

*Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00613654(C)
|
:0061365D FF96B84A2100 call dword ptr [esi+00214AB8]

*Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0061361C(C)
|
:00613663 61 popad
:00613664 E997D9DEFF jmp 00401000
:00613669 000000 BYTE 3 DUP(0)

:0061366C 84366100 DWORD 00613684
:00613670 38376100 DWORD 00613738

По адресу 00613664 мы видим интересующий нас
код. Он означает, что после распаковки
оригинальный код находится в памяти по
адресу 00401000. Это и есть OEP (Original Entry Point –
оригинальная точка входа). Запоминаем (или
записываем) этот адрес, нам он еще
понадобится. Переместим зеленую полоску на
данную инструкцию и в строке состояния
увидим такую надпись:

Code Data @:00613664 @Offset 00067A64 in File:awrdpr.exe

00067A64 – смещение в файле, где находится
данная инструкция. В данной точке
распаковщик уже отработал, а оригинальный
код еще не запустился. Здесь нам нужно
зациклить выполнение программы и снять
дамп (отпечаток) процесса. Зациклить проще
всего, прописав по адресу 00613664 инструкцию JMP
00613664. Для этого воспользуемся QView. Запустим
FAR и введем команду:

Перейдем к смещению 00067A64 (F5), включим
кодовый режим (F4), включим режим
редактирования (Alt+F9), перейдем в окно кода (Tab)
и введем инструкцию JMP 00067A64. Здесь мы
указали другой адрес, а именно смещение
инструкции в файле. В памяти это будет
выглядеть нужным нам образом:

00613664 JMP 00613664

Сохраняем изменения (Enter, Tab, Alt+F9), выходим.
Программу мы зациклили, можно запускать.
Запускаем. Все тихо, но процесс висит в
памяти, в чем можно убедиться, нажав
Ctrl+Alt+Delete. Теперь можно снимать дамп. Для
этого запускаем LordPE, выбираем в списке
процессов awrdpr.exe, жмем правый батон мыши и в
менюшке кликаем на Dump Full… Выбираем имя
файла, куда сохранять дамп (например, dumped.exe).
Далее убиваем этот процесс (правой кнопкой
-> burn process).

:004071A1 E8EAA7FFFF call 00401990
:004071A6 83C408 add esp, 00000008
:004071A9 85C0 test eax, eax
:004071AB 7533 jne 004071E0
:004071AD 66C745E01400 mov [ebp-20], 0014

* Possible StringData Ref from Data Obj ->"registered copy"
|
:004071B3 BAF9FA5300 mov edx, 0053FAF9
:004071B8 8D45F4 lea eax, dword ptr [ebp-0C]
:004071BB E880E10800 call 00495340
:004071C0 FF45EC inc [ebp-14]
:004071C3 8B10 mov edx, dword ptr [eax]
:004071C5 8B83E0020000 mov eax, dword ptr [ebx+000002E0]
:004071CB E8743B0500 call 0045AD44
:004071D0 FF4DEC dec [ebp-14]
:004071D3 8D45F4 lea eax, dword ptr [ebp-0C]
:004071D6 BA02000000 mov edx, 00000002
:004071DB E8C0E20800 call 004954A0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004071AB(C)
|
:004071E0 8B4DD0 mov ecx, dword ptr [ebp-30]
:004071E3 64890D00000000 mov dword ptr fs:[00000000], ecx
:004071EA 5B pop ebx
:004071EB 8BE5 mov esp, ebp
:004071ED 5D pop ebp
:004071EE C3 ret

По адресу 004071A1 вызывается процедура, далее
проверяется значение регистра AL. Если там
ненулевое значение – переход на выход из
текущей процедуры, если 0, вывод строки «registered
copy». Посмотрим код процедуры по адресу 00401990:
Главное меню -> Goto -> Goto Code Location, вводим
00401990. Смотрим код:

* Referenced by a CALL at Addresses:
|:00405AF4 , :004071A1 , :00408028 , :0040B4EF
|
:00401990 55 push ebp
:00401991 8BEC mov ebp, esp
:00401993 83C498 add esp, FFFFFF98
:00401996 53 push ebx
:00401997 56 push esi
:00401998 57 push edi
:00401999 33F6 xor esi, esi
:0040199B 8D4598 lea eax, dword ptr [ebp-68]
:0040199E 50 push eax
:0040199F E864B70000 call 0040D108
:004019A4 59 pop ecx
(____вырезано_____)
:004019E3 42 inc edx
:004019E4 83F910 cmp ecx, 00000010
:004019E7 7CDF jl 004019C8
:004019E9 8BC6 mov eax, esi
:004019EB 5F pop edi
:004019EC 5E pop esi
:004019ED 5B pop ebx
:004019EE 8BE5 mov esp, ebp
:004019F0 5D pop ebp
:004019F1 C3 ret

Перед окончанием процедуры по адресу 004019E9 в
регистр EAX загружается какое-то значение. Мы
же хотим, чтобы в нем всегда было 0. Ну так
заменим инструкцию MOV EAX, ESI на XOR EAX,EAX. Эта
инструкция имеет такой же размер, как и та,
что мы меняем (2 байта). Таким образом, в EAX
перед окончанием работы процедуры всегда
будет 0.

Наведем зеленую полоску на инструкцию MOV
EAX, ESI и в строке статуса увидим:

Code Data @:004019E9 @Offset 000019E9 in File:dumped1.exe

Теперь ленивые могут идти спать. А мы
попробуем сделать патч упакованной
программы. А как, спросите вы – ведь она же
упакована? А вот так – отвечу я. Идея
заключается в дописывании своего кода в
упакованную программу, который бы получал
управление после распаковщика (до того, как
запустится оригинальная программа), менял в
памяти нужные байты, а затем отдавал
управление оригинальной программе. Где же
нам взять свободное место для нашего кода? А
приделаем. Для этого воспользуемся
программкой ToPo, разработанной специально
для этих целей. Для начала скопируем файл
original.exe в original1.exe. Далее откроем этот файл в
ToPo. Нам предлагают использовать пустое
место в данной секции или добавить новую
секцию (Create new section). Будем добавлять новую.
Выбираем и жмем ОК. Далее в окошке «Bytes to be
added» вводим нужное нам количество байт.
Понадобится нам около 30 байт. Зачем, станет
ясно позже. Вводим 30, очищаем все галочки,
жмем «Do it!». В окошке «Result» видим следующее:

30 bytes add at: (добавлено 30 байт:)
-memory address:00616000h (по адресу в памяти 00616000h)
-file offset: 00069A00h (смещение в файле 00069A00h)

Записываем эти цифры и закрываем ToPo. Упс,
размер файла увеличился на целых 512 байт.
Это все виновато выравнивание длин секций
по 32-битной границе. Ну да ладно, как-нибудь
справимся. А пока займемся дописыванием
своего кода. Запускаем QView (qview original1.exe),
переходим по смещению, которое нам любезно
сообщил ToPo (00069A00). Включаем кодовый режим,
включаем редактирование и переходим в окно
кода. А теперь чешем думательный девайс (у
кого что) и вспоминаем, что нам нужно
изменить 2 байта по адресу 004019E9 (поменять
инструкцию MOV EAX, ESI на XOR EAX,EAX). Код инструкции
XOR EAX, EAX – 31 C0. Посему пишем такой код:

MOV BYTE PTR [004019E9], 31
MOV BYTE PTR [004019EA], C0
JMP 00000000

Последняя инструкция нам нужна для того,
чтобы передать управление оригинальной (уже
распакованной в памяти) программе после
того, как мы ее слегка пропатчили. Адрес
прыжка нам пока неизвестен (если быть
точным, то просто лень вычислять), его мы
выясним позже. Сохраняем изменения (Enter ->
Tab -> Alt+F9), но пока не выходим. Возьмем и
удалим лишние байты. Наш код занял 21 байт,
посему 491 байт – лишние. Наведем курсор на
следующую за JMP 00000000 команду, нажмем Insert (начало
выделения) и выделим все до конца файла, где
еще раз нажмем Insert (конец выделения). Затем
нажмем Shift+F4 (удаление блока), подтвердим
удаление, нажав Y. Все, файл похудел на 491
байт.

Следовательно, команда передачи
управления в эквиваленте 16-ричного кода
будет выглядеть так: E9 EB AF DE FF. Прописываем
эти значения и сохраняем изменения. Выходим.
Запускаем original1.exe. Все работает! Кто сказал
«А у меня че-то не пашет»?! А ну-ка, встал и
винду переустановил 10 раз! Мы же убиваем
файлы awrdpr.exe, dumped.exe, dumped1.exe, *.w32 и
переименовываем original1.exe в awrdpr.exe.

Подведем итоги, пока итоги не подвели нас:

  1. Сняли с проги упаковщик.
  2. Зарегистрили.
  3. Добавили к исходному файлу новую
    кодовую секцию (размер увеличился на 21
    байт).

Последняя фрикция

Думаю, пока что с нас хватит. Ну и
напоследок, список всех изменений в
оригинальном файле:

fc /b original.exe awrdpr.exe >patch.txt

Вот файл patch.txt:

Сравнение файлов original.exe и awrdpr.exe:

00000206: 03 04
00000251: 60 70
00000370: 00 2E
00000371: 00 74
00000372: 00 6F
00000373: 00 70
00000374: 00 6F
00000375: 00 30
00000378: 00 15
0000037D: 00 60
0000037E: 00 21
00000381: 00 02
00000385: 00 9A
00000386: 00 06
00000394: 00 20
00000397: 00 E0
00067A66: D9 29
00067A67: DE 00
00067A68: FF 00
FC: awrdpr.exe длиннее, чем original.exe

copy /b awrdpr.exe + patch.bin awrdpr.exe

В результате пропатченный файл потолстеет
на 21 байт и программа от радости будет
делать вид, будто за нее заплатили 150 рублей.

Этот опус носит образовательный характер и
предназначен для разработчиков
программных защит. Автор не несёт никакой
ответственности за возможное
использование материалов данной статьи в
противозаконных целях. 🙂

upx.exe это исполняемый файл, который является частью Справочная система Embarcadero Delphi и C ++ Builder XE2 Программа, разработанная Причал, Программное обеспечение обычно о 173.85 MB по размеру.

Расширение .exe имени файла отображает исполняемый файл. В некоторых случаях исполняемые файлы могут повредить ваш компьютер. Пожалуйста, прочитайте следующее, чтобы решить для себя, является ли upx.exe Файл на вашем компьютере - это вирус или троянский конь, который вы должны удалить, или это действительный файл операционной системы Windows или надежное приложение.

Является ли upx.exe вирусом или вредоносным ПО?

Upx.exe безопасно, или это вирус или вредоносная программа?

Первое, что поможет вам определить, является ли тот или иной файл законным процессом Windows или вирусом, это __cpLocation самого исполняемого файла. Например, такой процесс, как upx.exe, должен запускаться из C: \ Program Files \ Embarcadero \ RAD Studio \ 9.0 \ upx.exe и нигде в другом месте.

Для подтверждения откройте диспетчер задач, выберите «Просмотр» -> «Выбрать столбцы» и выберите «Имя пути к изображению», чтобы добавить столбец местоположения в диспетчер задач. Если вы обнаружите здесь подозрительный каталог, возможно, стоит дополнительно изучить этот процесс.

Еще один инструмент, который иногда может помочь вам обнаружить плохие процессы, - это Microsoft Process Explorer. Запустите программу (не требует установки) и активируйте «Проверить легенды» в разделе «Параметры». Теперь перейдите в View -> Select Columns и добавьте «Verified Signer» в качестве одного из столбцов.

Если статус процесса «Проверенная подписывающая сторона» указан как «Невозможно проверить», вам следует взглянуть на процесс. Не все хорошие процессы Windows имеют метку проверенной подписи, но ни один из плохих.

Самые важные факты о upx.exe:

Если у вас возникли какие-либо трудности с этим исполняемым файлом, вы должны определить, заслуживает ли он доверия, перед удалением upx.exe. Для этого найдите этот процесс в диспетчере задач.

Найдите его местоположение (оно должно быть в C: \ Program Files \ Embarcadero \ RAD Studio \ 9.0) и сравните размер и т. Д. С приведенными выше фактами.

Кроме того, функциональность вируса может сама влиять на удаление файла upx.exe. В этом случае вы должны включить Безопасный режим с поддержкой сети - безопасная среда, которая отключает большинство процессов и загружает только самые необходимые службы и драйверы. Когда вы можете запустить программу безопасности и полный анализ системы.

Могу ли я удалить или удалить upx.exe?

Не следует удалять безопасный исполняемый файл без уважительной причины, так как это может повлиять на производительность любых связанных программ, использующих этот файл. Не забывайте регулярно обновлять программное обеспечение и программы, чтобы избежать будущих проблем, вызванных поврежденными файлами. Что касается проблем с функциональностью программного обеспечения, проверяйте обновления драйверов и программного обеспечения чаще, чтобы избежать или вообще не возникало таких проблем.

Согласно различным источникам онлайн, 3% людей удаляют этот файл, поэтому он может быть безвредным, но рекомендуется проверить надежность этого исполняемого файла самостоятельно, чтобы определить, является ли он безопасным или вирусом. Лучшая диагностика для этих подозрительных файлов - полный системный анализ с Reimage, Если файл классифицирован как вредоносный, эти приложения также удалят upx.exe и избавятся от связанных вредоносных программ.

Однако, если это не вирус и вам необходимо удалить upx.exe, вы можете удалить справочную систему Embarcadero Delphi и C ++ Builder XE2 со своего компьютера с помощью программы удаления, которая должна находиться по адресу: "C: \ ProgramData \ \ Setup.exe "REMOVE = TRUE MODIFY = FALSE. Если вы не можете найти его деинсталлятор, вам может потребоваться удалить справочную систему Embarcadero Delphi и C ++ Builder XE2, чтобы полностью удалить upx.exe. Вы можете использовать функцию «Добавить / удалить программу» в Панели управления Windows.

  • 1. в Меню Пуск (для Windows 8 щелкните правой кнопкой мыши в нижнем левом углу экрана), нажмите Панель управления, а затем под Программы:
    o Windows Vista / 7 / 8.1 / 10: нажмите Удаление программы.
    o Windows XP: нажмите Установка и удаление программ.
  • 2. Когда вы найдете программу Справочная система Embarcadero Delphi и C ++ Builder XE2щелкните по нему, а затем:
    o Windows Vista / 7 / 8.1 / 10: нажмите Удалить.
    o Windows XP: нажмите Удалить or Изменить / Удалить вкладка (справа от программы).
  • 3. Следуйте инструкциям по удалению Справочная система Embarcadero Delphi и C ++ Builder XE2.

Наиболее распространенные ошибки upx.exe, которые могут возникнуть:


• «Ошибка приложения upx.exe».
• «Ошибка upx.exe».
• «upx.exe столкнулся с проблемой и должен быть закрыт. Приносим извинения за неудобства».
• «upx.exe не является допустимым приложением Win32».
• «upx.exe не запущен».
• «upx.exe не найден».
• «Не удается найти upx.exe».
• «Ошибка запуска программы: upx.exe.»
• «Неверный путь к приложению: upx.exe.»

Аккуратный и опрятный компьютер - это один из лучших способов избежать проблем с Embarcadero Delphi и C ++ Builder XE2 Help System. Это означает выполнение сканирования на наличие вредоносных программ, очистку жесткого диска cleanmgr и ПФС / SCANNOWудаление ненужных программ, мониторинг любых автозапускаемых программ (с помощью msconfig) и включение автоматических обновлений Windows. Не забывайте всегда делать регулярные резервные копии или хотя бы определять точки восстановления.

Если у вас возникла более серьезная проблема, постарайтесь запомнить последнее, что вы сделали, или последнее, что вы установили перед проблемой. Использовать resmon Команда для определения процессов, вызывающих вашу проблему. Даже в случае серьезных проблем вместо переустановки Windows вы должны попытаться восстановить вашу установку или, в случае Windows 8, выполнив команду DISM.exe / Online / Очистка-изображение / Восстановить здоровье, Это позволяет восстановить операционную систему без потери данных.

Чтобы помочь вам проанализировать процесс upx.exe на вашем компьютере, вам могут пригодиться следующие программы: Менеджер задач безопасности отображает все запущенные задачи Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записи автозапуска. Единый рейтинг риска безопасности указывает на вероятность того, что это шпионское ПО, вредоносное ПО или потенциальный троянский конь. Это антивирус обнаруживает и удаляет со своего жесткого диска шпионское и рекламное ПО, трояны, кейлоггеры, вредоносное ПО и трекеры.

Обновлено ноябрь 2021 г .:

Мы рекомендуем вам попробовать это новое программное обеспечение, которое исправляет компьютерные ошибки, защищает их от вредоносных программ и оптимизирует производительность вашего ПК. Этот новый инструмент исправляет широкий спектр компьютерных ошибок, защищает от таких вещей, как потеря файлов, вредоносное ПО и сбои оборудования.

скачать


(опциональное предложение для Reimage - Cайт | Лицензионное соглашение | Политика конфиденциальности | Удалить)

Начнем с того, для чего вообще нужна данная статья. В первую очередь для того, чтобы научить начинающих исследователей кода распаковывать малоизвестный криптор под не менее странным названием UPX Shit.


Служит он, как можно догадаться из названия, для усложнения распаковки UPX, а если быть точнее, то программы, обработанные данным криптором вообще невозможно распаковать универсальными распаковщиками. Причина в извращенной криптовке точки входа. Но обо всем по порядку.

[Нам понадобятся]

1. Olly Debugger
2. Lord PE
3. ImpREC
4. PEiD
5. PE Rebuilder
6. Resource Rebuilder
7. Мозги

[Работа защиты]

Данный криптор отыскать в сети нельзя, им защищен только PEiD. Это не странно, так как автор криптора является главным автором PEiD’а. Так вот, что же вообще из себя представляет защита? При первой обработке EXE файла, сначала шифруется 171 байт с начала OEP. Это не что иное, как код распаковщика UPX. Затем ниже дописывается код распаковщика этих байт и байты раскриптовщика вновь шифруются. Функция дешифровки опять дописывается ниже. Таких извращений производится 17 штук, каждый раз при этом новая процедура раскриптовки вновь криптуется, а ниже дописывается раскриптовщик. Так что же из себя представляется криптовка, спросите Вы. Ниже я приведу процедуру дешифровки, чтобы все встало на свои места:

Как видите - это обычный XOR. Взглянув на это, первое что мне пришло в голову - похожесть алгоритма на многие другие шифровщики точки входа. Как ни странно, схожие идеи часто лезут в голову совершенно незнакомым друг с другом программистам. Что ж, определимся с принципом распаковки подобного. Загружаем Olly и ставим бряк на первый jmp после OEP. Он выглядит так:


Когда бряк сработает, код выше раскриптуется и мы увидим осмысленные инструкции. А если выражаться правильнее, то чуть выше появится подобная процедура:

Не трудно догадаться, что процедура полностью повторяет предыдущую, только раскриптовывется другой код. Опять ставим бряк на jmp, получаем еще одну такую же процедуру и таким нехитрым методом проходим 17 процедур.


Тяжело, но мы справимся. Последняя процедура раскриптовки будет выглядеть так:


Данную процедуру легко отличить от предыдущих. В ней производится раскриптовка не 21 (15h), а 369 (171h) байта. Чуть Выше будет:

Это стандартный переход на OEP, так как упаковщик UPX. Вообще, мой совет новичкам - упакуйте какую-нибудь программу всеми простыми упаковщиками и посмотрите, что они пишут в точку входа (EP). Это сильно облегчит Вам определение упаковщика в спорных ситуациях или когда PEiD выдает неверные данные. Но мы отвлеклись. В вышеприведенном куске кода JMP PEiD.0044D504 это и есть прыжок на оригинальную точку входа (OEP), так что можно считать, что OEP - 0044D504. Ставим бряк на 0046108C (там производится прыжок на OEP) и дампим программу с помощью Lord PE. Запускаем Lord PE, выбираем в списке процессов PEiD.exe, щелкаем правой кнопкой и выбираем пункт "Dump full". Все, теперь мы имеем нормальный дамп, правда пока не работоспособный.

Остановимся непосредственно на работе защиты. Меня лично сразу смутило то, что после кода распаковщика осталось столько нулей (байтов с кодом 00h), чтобы впихнуть аж 17 процедур криптовщика. Как ни странно, но до работы процедуры распаковщика мы можем делать с памятью этой секции практически все что угодно, так как все равно наш код в последствии будет затерт нужными байтами после распаковки программы. Но, это работает не всегда и не всегда есть столько нулей после кода распаковщика, поэтому данный криптор не всегда сможет защитить EXE файл, при этом сохраняя его работоспособность. Видимо именно поэтому автор UPX Shit (Snaker) решил не выкладывать криптор на всеобщее скачивание.

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

Надеюсь, что вы еще не закрыли Olly, так как брякнутый на OEP процесс нам еще понадобится для получения из него импорта. Запускаем ImpREC и выбираем в списке процессов "PEiD.exe". Теперь вводим найденный нами OEP в строку "OEP". Не забудем вычесть из него значение Image Base, которое как ни странно стандартно - 400000. Щелкаем по кнопке "IAT AutoSearch", затем жмем "Get Imports" и получаем нормальную таблицу импорта. Щелкаем по кнопке "Fix Dump", выбираем сдампенный EXE и получаем полноценный рабочий дамп.


Как ни странно, ничего нового. Импорт восстанавливается стандартно.

[Делаем ребилд]

Думаю не помешает перекомпоновать импорт и ресурсы в дампе, сделав ребилд. Для этого есть специальная программа RebuildPE, но я пользуюсь специальным плагином для PEiD, который делает аналогичную операцию. Ссылка на него пролетала на форуме PEiD’а. Открываем дамп PEiD’а в самом PEiD’е (прикольно), выбираем плагин и жмем кнопку "Rebuild".


Все, теперь EXE файл приведен в норму. Осталось восстановить ресурсы.

[Восстановление ресурсов]

Данная процедура является на мой взгляд самой трудоемкой из всех процедур, выполняемых при распаковке простых упаковщиков. В принципе она может пригодиться для русификации программы, изменения интерфейса или более детального изучения программы в дизассемблере или декомпиляторе. В любом случае - это вершина распаковки. После восстановления ресурсов можно смело утверждать, что вы полностью восстановили EXE файл программы и теперь он больше всего похож на оригинальный после компилирования. Для восстановления ресурсов я использовал Resource Rebuilder v1.0 by Dr.Golova, который можно скачать на wasm’е. Хотя это и консольная программа - она лучшая на мой (и не только) взгляд. Запускаем из командной строки:

и получаем полностью восстановленную секцию ресурсов в файле ".rsrc", который нам вскоре очень понадобится. Теперь откроем Lord PE, щелкнем по кнопке "PE Editor" и укажем путь к дампу. Далее щелкаем по кнопке "Sections", затем по очереди удаляем две последние секции ("_mackt" и ".rsrc"), для этого щелкаем по ним правой кнопкой мыши и выбираем сначала "truncate at end of section", чтобы удалить секцию, а затем "wipe section header", чтобы убрать запись о ней в заголовке файла. Такую операцию проводим с обеими секциями. А теперь жмем правую кнопку на любой секции и выбираем пункт "load section from disk. " и выбираем наш ".rsrc" файл.


Вот и все, ресурсы восстановлены. Как хорошо, что Lord PE сам исправляет Image Size, а то пришлось бы еще писать процедуру его расчета после изменения числа и размера секций.

Рано радуетесь. EXE файл опять не работоспособен, так как данными манипуляциями мы повредили импорт. Надеюсь, что у Вас еще открыт ImpREC с восстановленным ранее импортом, тогда просто жмем "Fix Dump", иначе придется повторить процедуру восстановления импорта с самого начала.

Вот и распаковали мы с Вами UPX Shit. Зачем? Думаю вскоре выйдет немало подобных крипторов и полученные знания очень пригодятся. Надеюсь что данная статья помогла Вам получить ответы на многие вопросы, возникающие при распаковке программ, также мы с Вами научились восстанавливать ресурсы, что мало где описано.
Надеюсь, что данная статья Вам была полезна. Спасибо за интерес к данной статье.

Читайте также: