Pe explorer как пользоваться
Перейти к содержимому

Pe explorer как пользоваться

Статья [0x01] Исследуем Portable Executable (EXE-файл) [Формат PE-файла]

Доброго времени суток, форумчане. Сегодня, мы немного поговорим, рассмотрим и изучим под микроскопом структуру исполняемых файлов Windows ( Portable EXEcutable , или просто PE ), а в следующих статьях изучим технику модифицирования (инфицирования) PE-файлов, для того, чтобы исполнять свой собственный код после запуска чужого исполняемого файла (кстати, эта техника используется многими вирусами, для собственного "паразитического" распространения) и другие "хаки" с использованием знаний о структуре PE.

Portable Executabe файл (PE-файл) — это отдельный исполняемый модуль с расширением .exe (или .dll), получаемый в процессе сборки (компиляции и линковкии). В него включены код, ресурсы (иконки и другие данные), библиотеки, данные программы и т.д..

Давайте проведём аналогию между квартирой и PE-файлом. У каждой квартиры есть свой этаж, своя дверь, прихожая, гостинная, кладовка, свои комнаты, также у каждой квартиры есть своя схема планировки. Вся информация о квартире и сама эта квартира хранится в PE-файле. Взглянем на структуру исполняемого файла, а потом разберём основные части.

PE101-v1RU.png

  1. Заголовки
  2. Секции

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

Секции.png

  1. DOS заголовок
  2. Заглушка DOS
  3. PE заголовок
  4. Таблица секций

Как я и сказал, заголовки хранят необходимую информацию для загрузки PE-файла. Поэтому данный заголовок является обязательным для загрузки PE-файла, хоть и не несёт в себе большой смысловой информации.

Заголовок состоит из полей, как список состоит из пунктов свойств. Каждый пункт хранит в себе какое-либо значение. Естественно, в файле всё это представленно в байтовом представлении. Не все поля нужны для загрузки (запуска) PE-файла. Поэтому комментировать и рассматривать мы будем только поля, необходимые для загрузки файла в память.

Вот его структура на языке C/C++.

    e_magic
    Двухбайтовое поле e_magic хранит в себе специальную сигнатуру. Эта сигнатура нужна, чтобы указать что это действительно исполняемый файл. Вот она — "MZ". Каждый PE-файл обязан начинаться с неё. Если это не так, файл просто не запустится.

DOS_header.png

Я выделил самым большим красный прямоугольником область DOS-заголовка. Здесь мы можем увидеть байты в шестнадцатеричном представлении.

Вы можете поинтересоваться, для чего же другие поля? Дело в том, что система Windows построена на базе старой системы MS DOS (была до Windows). И на самом деле, это заголовок для DOS программы. Так вот, эти поля хранятся на случай, если кто-то попытается запустить PE-файл в DOS . В наше время никто практически ей не пользуется, но они остаются, так как если поменяют формат PE-файла, то перестанут работать программы с нынешним стандартом.

DOS_stub.png

Дальше у нас по списку PE-заголовок, который на самом деле, состоит из трёх частей: сигнатуры, файлового подзаголовка и дополнительного подзаголовка.

Вот его структура на языке C/C++:

Pe_begin.png

pe_header.png

    Signature
    Это четырёхбайтовое поле содержит сигнатуру, а именно значение 50 45 00 00 (или "PE\x00\x00"). Эта сигнатура указывает на то, что перед нами действительно PE-файл (Ага, ещё одна проверка).

На C/C++ структура данного заголовка выглядит так:

    Machine
    Данное двухбайтовое поле содержит информацию о характеристике процессора, на котором может быть выполнена данная программа. Вот 3 основных значения, которые может принять этот заголовок:
    1. IMAGE_FILE_MACHINE_I386 ( 0x014c ) — означает, что программа может выполняться на x32
    2. IMAGE_FILE_MACHINE_IA64 ( 0x0200 ) — означает, что программа может выполняться на процессорах Intel Itanium (Intel x64).
    3. IMAGE_FILE_MACHINE_AMD64 ( 0x8664 ) — означает, что программа может выполняться на процессорах AMD64 (x64).

FileHeader.png

Структура дополнительного заголовка представлена следующий C/C++ кодом.

    Magic
    Это двухбайтовое поле отвечает за битность программы (x32/x64). Оно может принимать следующие значения:

1. IMAGE_NT_OPTIONAL_HDR32_MAGIC ( 0x10b ) — означает, что это x32 (x86) исполняемый образ.
2. IMAGE_NT_OPTIONAL_HDR64_MAGIC ( 0x20b ) — означает, что это x64 исполняемый образ.
3. IMAGE_ROM_OPTIONAL_HDR_MAGIC ( 0x107 ) — означает, что это ROM образ.

Heaventools

EnglishEnglish DeutschDeutsch РусскийРусский

  • Программы
  • Ссылки:

Я системный архитектор драйверов устройств под NT/XP, и я использовал PE Explorer для изуче- ния .SYS файлов. Меня интересовали способы взаимодействия этих фай- лов между собой, и ваша программа помогла мне лучше понять это взаимо- действие.

Dominick Cafarelli,
Sniffer Technologies,
Network Associates

Хочу сказать, что PE Explorer, возможно, самая лучшая программа из тех, что мне попадались. Раньше, чтобы получить тот же самый результат, мне приходилось исполь- зовать много разных отдельных программ, некоторые из которых уже довольно старые, еще в духе командной строки. Теперь в них нет больше необходимости. Всё, что надо, есть в PE Explorer на тулбаре.

Chris LaJoie

Я пишу на ассемблере, C и C++. Спустя всего несколько месяцев ис- пользования PE Explorer я поражаюсь, как это я раньше мог обходиться без него. Он стоит каждого цента потра- ченных денег. Спасибо за создание такой замеча- тельной программы.

Robert Limoges

PE Explorer — Список возможностей

PE Explorer содержит средства для дизассемблирования и изучения исполняемых файлов, а также изменения их свойств и ресурсов.

Просмотр и редактирование Portable Executable (PE) файлов

  • Работа с 32-битными PE файлами — такими как .EXE, .DLL, драйвера устройств (.SYS, .ACM), ActiveX Controls (.OCX), библиотеки Borland (.DPL и .BPL), файлы визуальных стилей (.MSSTYLES), апплеты контрольной панели (.CPL), скринсейверы (.SCR) и любые другие win32 исполняемые файлы.
  • Работа с поврежденными и запакованными файлами: такие файлы открываются в Safe режиме.
  • Проверка целостности файла при открытии.
  • Вычисление и коррекция контрольной суммы файла.
  • Модификация значения точки входа.
  • Модификация свойств файлов .
  • Автоматичесие распаковщики для UPX, Upack и NSPack.
  • Возможно подключение пользовательских плагинов для обработки файлов при открытии.

Средства просмотра

  • Headers Info Viewer отображает сводную таблицу данных из заголовка PE файла.
  • Data Directories Viewer отображает каталог Data Directories, описывающий содержащиеся в файле данные.
  • Sections Header Viewer позволяет просматривать количество секций в файле, их названия, адреса, извлекать или удалять секции из файла.
  • Export, Import и Delay Import Viewers отображают списки экспорта и импорта.
  • Function Syntax Viewer служит для просмотра и редактирования описаний функций.
  • Digital Signature Viewer отображает детали сертификата в блоке цифровой подписи.
  • Dependency Scanner показывает цепочку зависимостей и полный путь к каждому модулю.
  • Relocation Viewer показывает информацию о базовых поправках, содержащихся в таблице релокаций.
  • Debug Information Viewer отображает отладочную информацию, содержащуюся в файле.
  • Resource Viewer позволяет просматривать, удалять или извлекать любой тип ресурсов.

Редакторы

  • Редактор ресурсов служит для редактирования или замены ресурсов в файле.
  • Мастер создания манифестов позволяет добавлять в ресурсы манифест приложения.
  • Редактор характеристик изменяет набор флагов в поле Characteristics в заголовке файла.
  • Редактор секций служит для редактирования названия и размера секции, восстановления утраченных значений и коррекции характеристик секции.
  • Редактор описаний позволяет добавлять комментарии или изменять значения в описаниях функций.
  • Средства удаления Debug Information и Relocations
  • TimeDateStamp Adjuster позволяет выбрать и изменить значение штампа времени.

Дизассемблер

  • Поддерживает Intel 80×86, процессоры семества Pentium и совместимые с ним.
  • Набор инструкций x86 (MMX, SSE, SSE2 и SSE3), расширения AMD K6-2 3D-Now!
  • Удобная навигация по коду с использованием панелей, поиска и истории переходов.
  • Нахождение всех текстовых строк и объектов VCL внутри EXE файла.
  • Сохранение сессии и последующее открытие ассемблерного листинга и внесенных изменений.

Дизассемблер, входящий в состав PE Explorer, разработан с целью дать разработчикам и исследователям простой и удобный инструмент для выполнения экспресс-анализа исполняемых файлов.

Чтобы избавить пользователя от рутинной работы и уменьшить объём ручной правки, дизассемблер использует очень гибкий и интелектуальный алгоритм дизассемблирования, способный реконструировать ассемблерный код изучаемого исполняемого файла с высокой степенью достоверности. [ подробнее. ]

Общие настройки программы

  • Список из 20-ти последних открывавшихся файлов.
  • Добавление часто открывающихся файлов в список избранных.
  • Опциональная интеграция с контекстным меню Проводника Windows.
  • Настраиваемый внешний вид и цвет у панелей и шрифтов.
  • Создание резервной копии редактируемого файла (включено по умолчанию).
  • Отображение событий и сообщений в окне лога, запись событий в лог файл.

Скачайте бесплатную ознакомительную версию!

PE Explorer работает на всех версиях Windows
от Windows 95 до XP, Vista, 7, 8, 10 и 11.

Минимальные системные требования:
Процессор Intel Pentium® или AMD K5 166 MHz
16 MB RAM

Если ваша единственная задача — это редактирование ресурсов, и вам совершенно не нужна расширенная функциональность PE Explorer, то вы можете попробовать Resource Tuner — это программа представляет собой редактор ресурсов из PE Explorer, выделенный в отдельный продукт.

Битва потрошителей. Выбираем лучший редактор для вскрытия исполняемых файлов Windows

Так как мы в основном исследуем исполняемые файлы и динамические библиотеки для Windows, я брал только те РЕ-редакторы, которые работают в этой ОС. Если какой-то из инструментов поддерживает другие операционные системы и их исполняемые файлы (например, ELF), то это только плюс, но в данном случае для нас особого значения не имеет.

Мы будем выбирать утилиты на основе разумных и понятных факторов: функциональность, цена, удобство использования и частота обновления. Совсем старые решения, позволяющие редактировать бинарники для MS-DOS или Windows 9x, нам рассматривать ни к чему. Если какой-то из редакторов распространяется платно, то мы воспользуемся ознакомительной версией и отдельно отметим, какие функции в ней доступны. Но самый главный критерий будет состоять во взломе настоящего кракми.

Чтобы не тратить время на создание подопытной программы, мы воспользуемся уже готовой — passCompare35 . Именно на ней и будем испытывать разные тулзы. По большому счету, чтобы взломать наш простой крякмис, PE-редактору надо обладать не такой уж широкой функциональностью: перейти по указанному адресу и переписать команду (желательно в дизассемблерном листинге). Править циферки в шестнадцатеричном дампе мне совсем не хочется (вероятно, тебе тоже), поэтому наличие встроенного дизассемблера запишем в ключевые свойства.

Как ты помнишь, с помощью отладчика мы нашли в памяти адрес инструкции (см. четвертую статью «Фундаментальных основ»), которая определяет ход выполнения программы при вводе пароля. А благодаря сведениям из третьей статьи этот виртуальный адрес у нас получилось преобразовать в физический, находящийся на носителе. Таким образом, перейдя в исполняемом файле по адресу 0x402801 и заменив там инструкцию test на xor , мы получим программу, принимающую любые пароли. Меньше слов, больше дела!

PE-Explorer

Разработчик: Heaventools Software
Сайт: http://www.heaventools.ru/pe-explorer.htm
Дата выхода последней версии: Октябрь, 2009
Стоимость: $129 – персональная лицензия

Под первым номером идет довольно распространенный редактор PE-Explorer. В отличие от своего собрата Resource Tuner, он способен редактировать не только ресурсы приложения, но и код. Несмотря на свой почтенный возраст, исправно работает даже в Windows 10. К сожалению, PE-Explorer умеет работать только с 32-битными файлами и при попытке открыть 64-битный бинарник сообщает об ошибке.

Утилита обладает богатой функциональностью: отображает все элементы заголовка РЕ, определяет, к каким DLL происходит обращение, предсказывает поведение программ и логику взаимодействия с другими модулями и даже открывает запакованные UPX, UPack или NSPack файлы. Кроме того, она позволяет просматривать и редактировать секции PE-файла, исследовать содержимое таблиц импорта и экспорта и проверять наличие и целостность цифровой подписи. В качестве «вишенки на торте» тут присутствует полноценный дизассемблер.

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

Запустим редактор и сразу же откроем наше подопытное приложение. PE-Explorer первым делом выводит информацию о заголовке PE-файла. Для получения сведений об остальных разделах достаточно пощелкать кнопки на панели инструментов. Жмем пиктограмму Disassembler и открываем окно для выбора поддерживаемых инструкций: SSE, SSE2 и прочее. Указываем необходимые и начинаем процесс нажатием кнопки Start Now .

В открывшемся окне большую часть занимает область с дизассемблерным листингом, чуть ниже располагается шестнадцатеричный дамп. Если в заголовке нижней панели выбрать вкладку Strings, то отобразятся все строки в исследуемом приложении. Так что поиском можно найти и эталонный пароль. Однако для этого пришлось бы перебрать весь внушительный список доступных строк, так что отложим этот вариант до худших времен.

Так как мы с помощью отладчика нашли адрес инструкции, которая отвечает за ход выполнения программы, то попробуем проверить этот адрес в PE-Explorer: нажимаем Ctrl-F (или Search → Find) и вводим адрес для поиска: 402801 .

Что ж, я немного разочарован результатом дизассемблирования. Даже отладчик в этом месте показывает мне инструкцию test , а здесь я вижу лишь начало ее шестнадцатеричного кода: 0х85 . При этом я не могу редактировать код! Зачем мне все эти возможности, если утилита не позволяет делать самую базовую вещь?

Я даже не могу списать этот недочет на ограничения демоверсии, так как о ее отличиях от платной ничего толком не сказано. Допускаю, что с теми целями, для которых этот продукт предназначен (статическое изучение приложения и вектора его выполнения), он справляется хорошо. Однако нашим требованиям программа не соответствует, поэтому смело вычеркиваю PE-Explorer из списка кандидатов.

FlexHex

Разработчик: Heaventools Software
Сайт: http://www.heaventools.ru/flexhex-hex-editor.htm
Дата выхода последней версии: Июль, 2018
Стоимость: $59,95

Думаю, нужно дать разработчику еще один шанс, поэтому рассмотрим другую утилиту Heaventools Software — hex-редактор FlexHex. Это инструмент для редактирования любых файлов, процессов или устройств в двоичном формате, ASCII и Unicode. По словам авторов, редактор умеет работать с файлами просто гигантского размера — 8 эксабайт. Кроме того, он поддерживает множество типов данных: байты, слова, двойные слова, восьмибитовые слова, различные десятичные значения со знаком и без, 32- и 64-битовые целые.

Сложные типы данных тут могут быть определены самим пользователем — это структуры, объединения, массивы, перечисления, строки и их сочетания. Обещают прямое редактирование любых значений, в том числе шестнадцатеричных, строковых, изменение областей памяти и типизированных данных. Поддерживаются битовые операции (NOT, AND, OR и XOR над блоками данных) и, конечно же, арифметические операции: сложение, вычитание, умножение, деление и взятие остатка.

Однако главная особенность FlexHex — это возможность сравнения файлов целиком или отдельными блоками. При этом использование карт сравнения позволяет сделать процесс более интуитивным и наглядным.

Все это хорошо, но как утилита справится со взломом — нашей элементарной задачкой? Отсутствие дизассемблера сразу намекает нам, что придется работать в hex-кодах. Запустим FlexHex и откроем с его помощью наш крякмис.

Первым делом попробуем найти смещение 402801 . Кликаем Navigate → Go To и в списке слева выбираем пункт Address, а в поле Enter address вводим значение для поиска. Убеждаемся, что включен режим Hex , и нажимаем кнопку Go To.

Однако результат поиска выносит нас далеко за границы приложения. Обрати внимание, что последние читаемые символы находятся по смещению 0x3659F0 . Если напрячь память, то вспоминается, что в заголовке РЕ базовый адрес (или адрес загрузки модуля) прописан как 0x400000 . А здесь он даже не учитывается!

Ладно, как говорил дедушка Ленин, мы «пойдем другим путем». Строго говоря, FlexHex не понимает формат РЕ и потому его нельзя признать полноценным PE-редактором. Так что нам ничего не остается, как править байтики. Из того же отладчика, где мы нашли проверяющую пароли инструкцию, возьмем уникальную последовательность байтов: 85 C0 74 3C 68 . Она покрывает ассемблерные команды:

Я выбрал такую длинную последовательность, чтобы не было ложных срабатываний. За ключевым байтом 0x74 тут скрывается ассемблерная инструкция JZ . Чтобы сделать из нее JNZ , достаточно переписать как 0x75 . В итоге мы получим программу, кушающую любые пароли, кроме эталонного.

С помощью Search → Find открываем окно и указываем в качестве типа для поиска Hex Bytes и направление. В поле ввода пишем нашу последовательность байтов: 85 C0 74 3C 68 . Есть совпадение! Теперь ставим курсор на 74 , нажимаем Delete и вписываем на этом месте 75 . Сохраняем результат и закрываем редактор. Проверь «пропатченное» приложение, оно теперь должно работать значительно лучше. ��

В целом я бы не сказал, что этот редактор отличается значительным удобством и соответствует нюансам работы благородного крекера. Поэтому отдавать за него 60 долларов кровных лично я бы не стал.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Юрий Язев

Юрий Язев

Широко известен под псевдонимом yurembo. Программист, разработчик видеоигр, независимый исследователь. Старый автор журнала «Хакер».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *