PE Anatomist

ОБРАТИТЕ ВНИМАНИЕ: Если копия программы была получена из другого источника, пожалуйста, убедитесь, что значение хеш-функции SHA256 для EXE-файла совпадает с указанным в файле Readme.txt и на странице с перечнем изменений. Отличия в этих значениях свидетельствуют о стороннем вмешательстве. Рекомендуется воздержаться от запуска и использования модифицированной копии программы.

Загрузить (118 КБ)
Версия: 0.1.14 (2020-04-28) :: Что нового? :: Лицензия MIT :: Отчёт VirusTotal
Значения хеш функций для ZIP-архива:
MD5: 59F32C386E1CF15192A4E3A7ABEE3B99
SHA1: 64E2A01E94D1F5C60447A1F3F7B3B0D5E09B7BA3
SHA256: CEF0988BD6F06A6626E41B06920111A8F1E3DC3859C3D1CDD88AEFAF3C1B1D99

Работа программы поддерживается в операционных системах

  • Windows XP SP3 и новее (x86 и x64)
  • ReactOS 0.4 и новее

Зависимости

  • Отсутствуют, используется исключительно WinAPI

Поддерживаемые форматы

  • PE32
  • PE32+
  • COFF Object
  • Objects Library

Поддерживаемые архитектуры

  • Intel x86
  • AMD64
  • ARM7
  • ARM7 Thumb
  • ARM8-64
  • Intel IA64
  • CHPE (x86 on ARM8-64)

Разбор заголовков

  • PE: IMAGE_DOS_HEADER, IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER, IMAGE_OPTIONAL_HEADER64 и список директорий с дополнительными сведениями о некоторых полях
  • PE: Таблица символов COFF
  • PE: Таблица секций с подсчётом энтропии содержимого и поддержкой длинных имён из таблицы символов
  • PE: Таблица импорта (с деманглингом имён MS-компилятора)
  • PE: Таблица связанного импорта
  • PE: Таблица отложенного импорта
  • PE: Таблица экспорта с дополнительными сведениями
  • PE: Таблица ресурсов с дополнительными сведениями о некоторых типах ресурсов и подробным просмотром
  • PE: Таблица настройки адресов (Base Relocations) для всех поддерживаемых архитектур с определнием целевого адреса и интерпретацией содержимого (Импорт, Отложенный импорт, экспорт, таблицы из директории настройки, ANSI и UNICODE-строки)
  • PE: Краткие сведения о подписи, сертификатах подписи и УЦ (Authenticode Signature)
  • PE: Директория настроек загрузки образа с разбором таблиц SEH, GFID, битовая карта CFG, GIAT, Guard LongJumps, CHPE Metadata, Dynamic Value Reloc Table, Enclave Configuration, Volatile Metadata с дополнительными сведениями о некоторых полях
  • PE: Директория отладки с дополнительными сведениями о содержимом CODEVIEW, POGO, VC FEATURE, REPRO, FPO, EXDLL CHARACTERISTICS, SPGO
  • PE: Таблица настроек TLS с дополнительными сведениями и таблица коллбеков TLS
  • PE: Таблица данных для раскрутки стека с полными данными заголовка, кодами раскрутки для архитектур x64 (включая версию 2 с кодами для эпилога), arm, arm64, ia64, цепи для x64, специфичных для языка данных (C Scope, C++ FuncInfo, C++ EH4, C++ DWARF LSDA) и просмотром в HEX-режиме
  • PE: Разбор заголовков, таблиц и метаданных директории COM Descriptor включая часть набора заголовков NGEN и ReadyToRun
  • PE: Декодирование RICH-подписи с указанием используемого инструмента, выполняемого действия, полной версии инструмента и версии VisualStudio, к которой инструмент относится
  • PE: Таблица IAT с описанием элементов таблицы
  • PE: Типичные для приложений VB5 и VB6: информация о проекте, DLLCall-импорте, подключаемых модулях, таблице объектов
  • OBJ: IMAGE_FILE_HEADER, ANON_OBJECT_HEADER, ANON_OBJECT_HEADER_V2, IMPORT_OBJECT_HEADER
  • OBJ: Таблица символов COFF с декодированием @comp.id и @feat.00, а также дополнительных символов
  • OBJ: Таблица секций и релокаций для выбранной секции
  • LIB: Список записей архива
  • LIB: Первая и вторая (при наличии) записи компоновщика
  • LIB: Сводная таблица элементов импорта IMPORT_OBJECT_HEADER, если таковые имеются в файле

Также к Вашим услугам

  • FLC - калькулятор для перевода между VA, RVA и File Offset
  • Настройка отображения и сортировка по любой колонке списка
  • Локализация интерфейса программы (пока доступны русский и английский варианты) из подключаемого файла
  • Интеграция в контекстное меню выбранных типов файлов
  • Декодирование UNICODE-строк (где доступно) дополнительных кодовых страниц (в настоящий момент доступна кириллица из CP1251)

Известные проблемы и ограниченя

  • Просмотр данных в HEX-режиме (где доступно) ограничен 4 килобайтами от начального адреса
  • Сохранение ресурса с типами RT_GROUP_ICON и RT_GROUP_CURSOR в файл сохранит только заголовок, без тела ресурса иконок и курсоров
  • Декодирование ANSI и UNICODE строк (где доступно) ограничено 112 байтами
  • Сортировка списков в ненатуральном порядке

Подробнее о работе программы

Некоторые особенности

  • Если PE-образ был собран как Reproducible, то метка времени из файлового заголовка таковой не является и не декодируется, о чём выводится сообщение на вкладке заголовков. Если метка времени присутствует в других заголовках (ресурсы, экспорт, отладка), то время не декодируется и значение поля выводится в HEX-режиме.
  • При определении принадлежности VA, RVA или файлового смещения определённой секции, имя секции дополняется её атрибутами доступа [R], [W], [X] или их комбинацией, а также меткой [VM], если данные по указанному адресу не инициализированы (существуют только в виртуальной памяти процесса).

Заголовки

Отображается содержимое основных заголовков PE: IMAGE_DOS_HEADER, IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER (IMAGE_OPTIONAL_HEADER64) и списка директорий. Для некоторых полей приводится описание их значения или подробные характеристики.
Скриншот

Секции

Список секций PE-файла с подсчётом энтропии содержимого секции, поддержкой длинных имён секций из таблицы COFF-символов (GCC-подобные компиляторы любят добавлять такие имена).
Скриншот

COFF-Символы

Содержимое таблицы COFF-символов (достаточно редкое явление в современных PE-файлах).
Скриншот

Таблица импорта

Таблица импорта отображается в двух списках: список модулей и список импортируемых функций выбранного модуля. Помимо имени функции и подсказки (hint) отображается RVA ячеек IAT и INT и содержимое по этим адресам. Поддерживается деманглинг MS-компилятора, деманглинг стандарта Itanium в разработке.
Скриншот

Таблица экспорта

Заголовок таблицы экспорта с описанием некоторых полей и список экспортируемых символов. Дополнительно выводится название секции экспортируемого символа (косвенно можно оценить, является экспорт кодом или данными), подсказка (hint) и ординал. Поддерживается forwarding.
Скриншот

Директория ресурсов

Отображается группированный по типу список ресурсов с дополнительным описанием содержимого некоторых типов ресурсов. Предусмотрена возможность дампа выбранного ресурса в файл и просмотр некоторых типов ресурсов в отдельном окне свойств (из контекстного меню или по двойному клику).
Скриншот

Например так выглядит окно свойств ресурса для типа RT_VERSION. Для всех типов ресурсов доступен просмотр содержимого в HEX-режиме.
Скриншот

Таблица связанного импорта

Список модулей для связанного импорта.
Скриншот

Таблица отложенного импорта

Таблица отложенного импорта отображается в двух списках: список модулей и список импортируемых функций выбранного модуля. Дополнительно отображаются RVA ячеек INT, IAT, связанного импорта, выгрузки и содержимое по указанным адресам.
Скриншот

Таблица настройки адресов (Base Relocations)

Таблица настройки адресов (Base Relocations) отображается в двух списках: первый содержит группы записей для 1 страницы, второй показывает настраиваемые при изменении базы образа адреса. Дополнительно настраиваемый VA анализируется и предлагается интерпретация содержимого PE-образа по этому адресу.
Поддерживается детектирование:

  • импортируемых функций (сокращение "I:")
  • адреса переходника импорта ("IT:", Import Thunk)
  • отложенно-импортируемых функций ("DI:", Delayed Import)
  • адреса переходника отложенного импорта ("DIT:")
  • адреса структуры отложенного импорта IMGDELAYDESCR ("DID:", Delayed Import Descriptor)
  • экспортируемых функций ("E:")
  • адресов из списков и полей из LoadConfig Directory ("SEH Handler", "CFG Check Function", "CFG Dispatch Function", "RFG Failure Routine", "RFG Verify Stack Function", "Security Cookie", "GFIDs Table")
  • значение глобального указателя, если это предусмотрено целевой архитектурой PE-файла ("Global Pointer")
Также поддерживается детектирование ANSI ("A:") и UNICODE (UTF-16) ("U:") строк, в том числе UNICODE строк из отдельных кодовых страниц. В настоящее время доступен поиск кириллицы из CP1251.
Для остальных адресов выводятся первые 12 байт данных в HEX-виде, за исключением случаев, когда VA ссылается на неинициализированные данные.
Скриншот

Определение и анализ целевого адреса поддерживается для архитектур x86, x64, ARM Thumb, ARM64, IA64.
Скриншот x64 :: Скриншот ARM :: Скриншот IA64

Подпись и сертификаты

Краткое описание свойств подписи в формате PE Authenticode и список сертификатов подписи и УЦ.
Скриншот

Настройки загрузки

Таблица настроек загрузки отображается в виде набора отдельных вкладок для заголовка (поддерживаются все версии заголовка вплоть до SDK 18362) c описанием некоторых полей и дополнительных структур.
Скриншот

Список допустимых обработчиков исключений. Заполняется только для архитектуры x86.
Скриншот

Список функций, вызов которых допускается и настраивается технологией ControlFlowGuard (CFG), с учётом дополнительных флагов (Call suppressed, Export suppressed).
Скриншот

Производится построение битовой карты CFG по данным из таблицы GFID и отображение в шестнадцатеричном виде.
Скриншот

Содержимое таблицы Guard Address Taken IAT Entry Table с дополнительным анализом перечисляемых адресов.
Скриншот

Перечень адресов, где находятся неявные длинные переходы, защищаемые технологией CFG.
Скриншот

Заголовок с настройками для гибридных PE-файлов (эмуляция x86 на ARM64 версии Windows) и список укастков кода разных архитектур. Также отображается таблица IAT для эмулируемой архитектуры.
Скриншот

Содержимое таблицы Dynamic Value Reloc Table, требуемой технологией Retpoline, представлено аналогично таблице настроек адресов (Base Relocations). Поддерживается первая версия содержимого таблицы (т.е. без настроек для прологов и эпилогов).
Скриншот

Настройки для образов, поддерживающих исполнение в изолированной памяти (Intel SGX), и список зависимостей данного PE-образа.
Скриншот

Содержимое таблицы Volatile Metadata в двух списках: диапазоны изменяющихся данных и RVA доступа.
Скриншот

Директория отладки

Данные для отладки. Поддерживаются все типы от 0x01 до 0x14, в т.ч. недокументированные. Дополнительно отображаются подробности для некоторых типов отладочной информации.
Скриншот

Список групп секций из использованных при компоновке OBJ-файлов и места (RVA и длина блока) расположения в формируемом PE-файле.
Скриншот

Перечень счётчиков использования некоторых "фишек" компилятора C++.
Скриншот

Значение хеша для идентификации PE-образа в рамках Reproducible-сборки.
Скриншот

Отладочная информация для прохода по цепочке фреймов вызовов в стеке, формируемая при включенной настройке FramePointerOmission. Начиная с VS .NET эта информация выносится в PDB-файл.
Скриншот

Расширение поля структуры IMAGE_OPTIONAL_HEADER.DllCharacteristics. Дополнительные флаги пока ограничены лишь одним: CET Compatible, указывающим, что PE-образ собран с поддержкой ControlFlow Enforcement Technology (CET) Shadow Stack
Скриншот

Отладочная информация для технологии оптимизации кода Sample-based Profile Guided Optimization (не документирована)
Скриншот

TLS и коллбеки

Настройки для работы TLS и список коллбеков TLS.
Скриншот

Таблица настроек исключений и раскрутки стека

Архитектурно-зависимая таблица настроек обработки исключительных ситуаций (Exceptions) и раскрутки стека. Поддерживаются x64, ARM7, ARM7 Thumb, ARM64, IA64 архитектуры.
Адреса начала функций для ARM7 Thumb отображаются в таблице как есть - увеличенными на 1 (это признак отличия между Thumb и не-Thumb режимом работы ARM). Аналогично отображаются адреса начала функций в блоках CoreCLR для любых архитектур. Декодирование специфичных для CoreCLR данных пока недоступно.
Для архитектур x64, ARM7 Thumb, ARM64 и IA64 декодируются коды раскрутки.
Для всех поддерживаемых архитектур доступен анализ специфичных для языка данных: C Scope, C++ FuncInfo (для MSVC++), C++ EH4 (для MSVC++, похоже, ещё находится в разработке, планировался в релиз вместе с VS2019.2), C++ DWARF LSDA (для GCC-подобных компиляторов).
Также для всех архитектур, кроме ARM7, доступен просмотр выбранного блока информации в HEX-режиме.
Скриншот

Коды раскрутки для x64, поддерживаются первая и вторая версии (с эпилогами). Для эпилогов указывается отрицательное смещение (первый столбец), как признак смещения от конца функции.
Скриншот

Список эпилогов и коды раскрутки для ARM Thumb.
Скриншот

Список эпилогов и коды раскрутки для ARM64. В списке эпилогов отображается столбец "Условие", но он не задействован - в ARM64 это не предусмотрено.
Скриншот

Настройки обработки исключений для ARM. Коды раскрутки отсутствуют.
Скриншот

Коды раскрутки для IA64. Поддерживаются все форматы записей, кроме X1-X4; также поддерживается, но не отображается в таблице данные формата P4 (spill_mask), т.к. длина выводимой строки зависима от длины пролога функции.
Скриншот

Список передачи обработки исключений по цепочке для x64.
Скриншот

Список try/catch блоков для Си.
Скриншот

Информация о try/catch блоках для C++ в трёх списках. Первый - список действий для перехода к предыдущему состоянию стека. Второй - список состояний обрабатываемых catch-блоками и обработчиков (дополнительными строками). Третий - расположение переходов к определённому состоянию стека внутри функции. Заголовок FuncInfo не отображается.
Скриншот

Информация о try/catch блоках для C++ в новой (оптимизированной) реализации EH4. Информация отображена в 4 списках. Первый - список действий для перехода к предыдущему состоянию стека. Второй - список состояний обрабатываемых catch-блоками. Третий (под вторым) - список обработчиков и выходов из обработчика для выбранного catch-блока. Четвёртый - расположение переходов к определённому состоянию стека внутри функции. Заголовок FuncInfo4 не выводится.
Скриншот

Информация о try/catch блоках для GCC-подобных C++ компиляторов. Первый список показывает расположение try-блоков, обработчик и дополнительное действие (из второго списка) при наличии. Второй список показывает цепочку действий для раскрутки и фильтр catch-блока (при наличии) по типу (из std::type_info).
Скриншот

Отображается выбранный блок информации об обработке исключений в HEX-режиме.
Скриншот

Заголовки и метаданные dotNET

Содержимое заголовков для технологии dotNET: IMAGE_COR20_HEADER, CORCOMPILE_HEADER или READYTORUN_HEADER (при соответствующих условиях сборки образа) с дополнительными сведениями о некоторых полях.
Скриншот

Разбор таблиц метаданных с интерпретацией некоторых полей (объём интерпретируемых данных будет добавляться).
Скриншот

Информация об обработке исключений из скомпилированного кода ReadyToRun.
Скриншот

Перечень слотов, динамически заполняемых во время запуска или работы ReadyToRun кода (helpers, strings, и т.д.). Декодирование сигнатур пока недоступно.
Скриншот

Сопоставление RVA метода в CIL-виде его скомпилированному ReadyToRun виду.
Скриншот

Подпись Rich

Список из декодированной подписи Rich в виде @comp.id символа (соответствуенно используемому инструменту или из OBJ-файла при сборке), счётчика использования инструмента, названия инструмента, выполняемого действия и версии VisualStudio, к которой относится инструмент. Выполняется декодирование по всем известным на данный момент 270 уникальным идентификаторам инструментов.
Скриншот

Таблица IAT

Перечень элементов таблицы IAT (если она указана в таблице директорий образа) с описанием соответствующей импортируемой функции.
Скриншот

Структуры VB5-6

Находит и декодирует содержимое некоторых базовых структур приложений VB5/6. Доступна информация о проекте, данные регистрации COM, заголовок таблицы объектов и список объектов, а также список динамического импорта с помощью DLLCall.
Скриншот

LIB Список записей

Список записей библиотеки объектных файлов.
Скриншот

LIB записи компоновщика

Первая и вторая записи компоновщика.
Скриншот

LIB Библиотека импорта

Сводная таблица элементов библиотеки импорта.
Скриншот

OBJ Таблица секций

Таблица секций и релокаций объектного файла.
Скриншот

OBJ Таблица символов

Таблица символов объектного файла.
Скриншот