PE Explorer - что прячется внутри исполняемого файла?Автор: Илья Данилов Опубликовано: 09.07.2008 Источник: SoftKey.info "PE" означает Portable Executable – это формат исполняемых файлов, появившийся впервые в Windows NT и до сих пор используемый в последних версиях ОС Microsoft, в том числе в Windows Vista и даже в мобильном Windows CE.
Как можно догадаться из названия, PE Explorer предназначен для детального изучения содержимого PE-файлов. Перед тем как начать работу с какой-нибудь приглянувшейся программой, внимательно прочтите лицензию на ее использование: часто в процессе инсталляции вас заставляют согласиться с тем, что вы не будете пытаться декомпилировать или дизассемблировать устанавливаемые компоненты. Правда, поймать пользователя на этом довольно сложно: нужно либо стоять у него за спиной, либо дождаться, когда он начнет про это хвастать в своем блоге или публичном форуме.
Но иногда может случиться так, что лицензия будет совершенно не важна, поскольку предстоит копаться... в своей собственной программе! Представьте: есть компьютер заказчика, на котором установлена ваша программа, но ни ее исходных текстов, ни компилятора под рукой нет. И хотя PE Explorer часто рассматривают в качестве средства анализа вредоносного программного обеспечения или пораженных вирусами файлов, ее возможности вовсе не ограничиваются распаковщиком и дизассемблером. PE Explorer можно применять и для вполне "мирных" целей, будь то удаление отладочной информации или исправление опечатки в меню.
Пытливый пользователь первым делом попытается заставить PE Explorer проанализировать самого себя, но из этого ничего не выйдет: вам тактично сообщат, что при анализе структуры файла произошла ошибка, а дальнейший анализ невозможен. Это может случиться и с другими программами: скорее всего, проблема заключается в распаковщике.
Чтобы сэкономить место на диске и ускорить загрузку, исполняемый образ программы сжимается, а затем к нему добавляется распаковщик. Он получает управление сразу после запуска, распаковывает программу, а затем передает ей управление. Нередко упаковку сочетают с шифрованием, чтобы скрыть содержимое исполняемого файла от любопытных глаз. PE Explorer это не остановит, он умеет на лету распаковывать программы, сжатые популярными алгоритмами UPX и Upack, а также их несущественными модификациями. Распаковка происходит автоматически, вы даже не заметите, что файл был запакован или зашифрован.
Но вот файл все-таки загружен для анализа. Посмотрим, что сумеет сделать для нас PE Explorer.
Просмотр заголовков
Все начинается с заголовка файла. Из него можно узнать массу интересных подробностей:

Например, поле Machine показывает, на каких платформах может быть запущен исполняемый файл, а Characteristics выдает важную стартовую информацию: является ли файл образом исполняемого файла или же это динамическая библиотека, сколько секций в нем присутствует, какова контрольная сумма. Изменить тут нельзя практически ничего, за исключением точки входа в главную процедуру и контрольной суммы. Но в принципе этого и не требуется: перед сохранением изменений PE Explorer перестроит заголовок согласно результатам редактирования.
Секции и директории
После основного заголовка может идти необязательный, который содержит список директорий данных. Каждая запись в таком списке поясняет, какой тип данных (например, таблица импорта или экспорта, ресурсы, сертификаты) занимает место по заданному смещению в файле:

С другой стороны, файл содержит секции, которые можно просматривать через Sections Header Editor в виде списка сегментов:

PE Explorer наглядно показывает, есть ли на секции ссылки из заголовка, какие из сегментов можно безболезненно удалить, а какие нельзя. Вы можете просмотреть содержимое выбранной секции (попутно переключаясь между представлениями HEX/ACSII и кодировками WIN/DOS) и даже попробовать поменять ее границы при помощи Section Editor:

Таким образом, пользуясь этими функциями, можно удалить или заменить секцию (например, подменить раздел ресурсов), а PE Explorer поможет это сделать так, чтобы в итоге сохранилась правильная структура исполняемого PE-файла.
Сканер зависимостей
Наверное, у вас такое уже случалось: при попытке запустить программу появляется сообщение: "Не найдена динамическая библиотека xxxx.dll". Это означает, что программу скомпилировали и связали с этой динамической библиотекой, но по какой-то причине у вас в системе ее не обнаружилось.
Сканер зависимостей наглядно показывает, от каких библиотек зависит анализируемый файл:

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

Выбирая конкретное имя функции вверху, вы можете видеть внизу синтаксическую строку вызова с осмысленными именами аргументов и соглашениями о вызове. Это вовсе не волшебство, а результат труда авторов PE Explorer, которые уже занесли в базу данных программы информацию о 39 библиотеках, в основном принадлежащих системной части Windows. Вы можете изменять их и добавлять свои собственные. По двойному клику вызывается редактор синтаксиса:

Если есть необходимость, можно скопировать строку вызова из PE Explorer и вставить в исходный текст вашей программы на Delphi.
Редактор ресурсов
Все, что отображается на экране (окна, меню, рисунки и пиктограммы), хранится в исполняемом файле в виде "ресурсов":

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

В системах Windows XP и Vista применяется новый способ работы с динамическими библиотеками DLL, так называемые "манифесты". Отныне файлы DLL аккуратно расположены в разных папках каталога WINDOWSwinsxs, что позволяет иметь в системе несколько версий одной и той же DLL одновременно. Чтобы приложение могло воспользоваться такой возможностью, оно должно обладать специальным типом ресурса Manifest, который содержит информацию в формате XML. PE Explorer обеспечивает его конструирование и добавление через специальный мастер, избавляющий от необходимости помнить схему документа:

Например, с помощью мастера можно добавить использование ComCtrl32.dll версии 6, и тогда элементы диалоговых окон обретут совершенно другой вид, копирующий текущую тему рабочего стола.
Дизассемблер
Основной упор в пользовательском интерфейсе дизассемблера сделан на удобство и скорость перемещения по листингу. Все необходимые операции уже вынесены в контекстное меню: переход по первому и второму операнду, возврат, поиск. Надо посмотреть, из каких мест кода вызывается процедура с заданным адресом? Нет проблем, по "горячей" клавише R выдается окно со списком.

Плагины
Если вы все-таки столкнулись с тем, что анализ файла не начинается из-за неизвестного для PE Explorer упаковщика, есть возможность написать свой собственный плагин. Для этого надо изучить несложную схему API, закодировать распаковщик и откомпилировать его в виде DLL. Результат надо поместить в специальную папку PlugIns, и, если вы сделали все правильно, PE Explorer отобразит новый плагин в списке:

Изменяя приоритет, можно добиться, чтобы плагины вызывались в нужной вам последовательности.
Подводя итог, отмечу, что PE Explorer одинаково дружественен к пользователю любой квалификации, прост и удобен в использовании. Однако если вам надо поменять пару байт в бинарном файле, то лучше поискать другую программу, например FlexHex Editor того же разработчика. Но если надо разобраться со структурой исполняемого файла, отредактировать ресурсы, изучить таблицы экспорта и импорта – PE Explorer содержит все необходимое. Инсталлятор PE Explorer удобно носить с собой на флешке – тогда швейцарский складной нож будет всегда у вас в кармане. |