PEAnatomist - внутренности PE-файлов

RamMerLabs

Ordo ab chao
Наставник
Сообщения
11
Реакции
10
PEAnatomist.

Бесплатная утилита PEAnatomist поддерживает практически все известные и некоторые недокументированные структуры внутри файлов MS PortableExecutable (EXE, DLL, SYS и подобных), библиотек LIB и объектных файлов в форматах COFF, MSVC CxxIL и ExtendedObj, а также выполняет несложный анализ полученных данных.

Программа не ограничивается обычным набором из файлового/опционального заголовков, импорта, экспорта, ресурсов и т.д. PEAnatomist глубоко вонзает "скальпель" в таблицы Base Relocations, LoadConfig и ExceptionsData.
Вскрываются все поля и таблицы из LoadConfig - вплоть до версий из свежайших Windows SDK и ещё не документированных. Производится лёгкий анализ содержимого по релоцируемым VA, в т.ч. для специфичных типов релокации архитектур ARM7 Thumb и IA64. И, наконец, полный разбор таблиц ExceptionsData для архитектур x64, ARM7, ARM7 Thumb, ARM64 (в том числе и гибридных CHPE и ARM64EC), IA64 и специфичных для языка данных обработки исключений.
На закуску ещё есть декодирование всех элементов из Rich-подписи с указанием всех используемых при создании PE инструментов, отображение многих типов отладочной информации, заголовков VisualBasic5/6, таблиц метаданных dotNET и нативных сборок (NGEN и Ready2Run).
Кроме PE формата, поддерживаются и объектные файлы COFF, ExtendedObj и MSVC CxxIL (промежуточный язык компилятора MSVC).

ENG:
PEAnatomist is a freeware utility for displaying the contents of files in Microsoft
Portable Executable format (.exe, .dll, .sys, .ocx and others), libraries (.lib) and object
files (.obj and similar) in COFF, MSVC ILStore (CxxIL) and ExtendedObj (BIGOBJ) formats.
The program allows to view almost all known and some undocumented structures of these
files and performs an analysis of some of such structures.

Homepage :: Changelog :: PEAnatomist 0.2.5 (2021-08-25)
 
Последнее редактирование:

plutos

_Вечный_Студент_
Мудрец
Сообщения
125
Реакции
601
PEAnatomist глубоко вонзает "скальпель" в таблицы Base Relocations, LoadConfig и ExceptionsData.
За это отдельное спасибо!
Пришлось недавно копаться в одной Relocation Table and ExceptionsData, так эти функции съэкономили годы жизни!
Respect, RamMerLabs!
:love:
 
Последнее редактирование:

mak

Соломенные сандалии
Администратор
Сообщения
755
Реакции
524
Кто-то имеет контакты автора?! Или имеет связь с автором? На сайте нет емайла ..
 

mak

Соломенные сандалии
Администратор
Сообщения
755
Реакции
524
Release 0.2.1 (2021-03-04):

110B.009: Significant improvement to the MSVC ILStore (CxxIL) symbols parser and increased compatibility with different VS versions
1111.027: Decoding of local symbols table (.cil$sy) of MSVC ILStore (CxxIL) format in OBJ files
1117.033: Displaying the line number of the beginning of the function in the source file in the description of symbols MSVC ILStore (CxxIL)
1117.034: Fixed display of source file names in MSVC ILStore (CxxIL) symbols descriptions for VS 2002 and 2003 versions (encoding is not UTF8)
1118.035: Fixed decoding of LF_POINTER in CodeView and MSVC ILStore (CxxIL) type tables if the described type is a pointer to a class member
1119.036: Changed the names of some keys in the configuration file for portability in future versions
111B.039: Fixed display of CodeView type description in MSVC ILStore (CxxIL) tables, if debug information is moved to PDB
111C.046: Fixed error displaying the incorrect name in the description of a CodeView type referenced by another type or symbol (in rare cases)
1201.071: Accelerated access to sections and their data in OBJ files
1205.081: Added support for ExtendedObj files (a.k.a. BIGOBJ, obj files with more than 0xFEFF sections)
1207.094: For some types of CodeView debug information, a more detailed description is available (for example, for LF_POINTER, LF_MODIFIER, LF_ARRAY and LF_BITFIELD, the description of the type to which they refer and some properties are displayed)
120C.110: Clarified interpretation of data from Rich signature
121B.116: The program license was changed from MIT to Freeware (the text of the License Agreement is located in the "Readme" file)
1303.122: Fixed a bug with parsing version information from the resources section in some cases
1304.123: Fixed error getting a member name for LIB archives created by BSD-compatible toolkit
1304.124: Support for ARM64EC in OBJ files


website # Direct link to PEAnatomist-0.2.1
 

mak

Соломенные сандалии
Администратор
Сообщения
755
Реакции
524
Release 0.2.2 (2021-03-25):

1305.000: Fixed display of the CodeView type name in the description if the type index is not specified
1307.001: Fixed error displaying manifest text from PE resources in rare cases
1307.003: Added support for IA64, MIPS and Hitachi SH4 architectures in the CxxIL parser
1308.006: Fixed CxxIL parsing error for MSVC from VS2008Beta1
1309.007: Fixed infinite parsing of IMAGE_DIRECTORY_ENTRY_BASERELOC table in rare cases
1309.008: Fixed error of IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG display for some files created by linker versions below 6.0
1309.010: Fixed possible erroneous OBJ file recognition (regression of version 0.2.1)
130D.019: Cleaning and optimization of the parser for the ARM Thumb and ARM64 unwind codes
130F.022: Added a textual description of the epilogue execution condition for ARM Thumb unwind codes
130F.023: Fixed error displaying the epilogue execution condition for ARM Thumb unwind codes if the epilogue is specified as the only one (flag E)
130F.028: Added calculation of the epilogue beginning for the ARM Thumb and ARM64 unwind codes, if the epilogue is specified as the only one (flag E)
1311.029: Fixed light error in defining VS2017-2019 minor version in Rich signature (regression of version 0.2.1)
1311.030: Fixed error in displaying values from IMAGE_DELAYLOAD_DESCRIPTOR.UnloadInformationTableRVA in the delayed import table
1312.044: Fixed the mechanism for filling information for the description of RVA in PE, added detection of new information
1312.045: Accelerated display of the GFID table
1313.046: Simplified procedure for loading some files
1315.051: The storage of information for the description of RVA in PE files has been transferred to a hash table, the search time for the description for RVA has been significantly reduced
1318.053: Ctrl+Insert can be used along with Ctrl+C to copy information from the ListView to the clipboard
1318.057: The set of status information from the ListView has been expanded, there are: focused row index, total count of rows, count of selected rows


website # Direct link to PEAnatomist-0.2.2
 

mak

Соломенные сандалии
Администратор
Сообщения
755
Реакции
524
0.2.3.76 (2021-05-09)
PEAnatomist.exe SHA256: 6D7AE0FB725B07E4C264ED79854556A3D270824307F421521BB22FE0A668236C

  • 1319.000: Fixed the Statusbar value of the focused line for an empty ListView in certain situations
  • 131A.001: The possible freeze of the program after the search resumed, if the contents of the list have been changed
  • 131B.007: Added definition of the function beginning and its description on the LoadConfig GuardEHContinuations tab for x64
  • 131B.008: Fixed displaying the type index in the CodeView types table in OBJ files if PCH is used (regression of version 0.2.2)
  • 140B.011: Optimized display of status information from ListView for very large lists
  • 140B.014: Added display of additional Function (.bf, .ef) and FunctionSym symbols in the COFF symbol table of OBJ files
  • 140C.015: Fixed erroneous display of INT value in CFG IAT table if import is performed by ordinal (regression of version 0.2.2)
  • 140D.017: Added XFGHASHMAP parsing in LIB files
  • 140F.022: Added collection of information about exception handlers (x64, ARM, ARM Thumb, ARM64, IA64) and COFF symbols for describing RVA in PE files
  • 1410.025: Accelerated display of COFF symbol table in PE files, added display of some additional symbol records
  • 1411.029: A 'Column' drop-down list in a searching dialog is disabled if only fulltext search is available (i.e. only one search option)
  • 1413.031: Added export of GFID bitmap to file
  • 1415.032: Fixed a bug with parsing the resource table in PE files if IMAGE_RESOURCE_DATA_ENTRY is placed at the end of the table
  • 1416.038: Added optional display of full paths in the recent files list, long paths are limited to the file name and the initial part of the path
  • 1416.039: Changed the format of the main window title, the name of the loaded file is displayed first now
  • 1417.045: Eliminated redundant work with the menu when loading files and generating a list of recent files
  • 1418.046: Added OS shell notification about file associations changing
  • 1419.049: Added optional tooltip with description of RVA calculated in FLC (disabled by default)
  • 141A.053: Added definition of the function beginning and its description on the LoadConfig GuardEHContinuations tab for ARM64 (InsiderPreview 21364)
  • 141B.055: Fixed error displaying multiple values of the "Translation" key in RT_VERSION resources
  • 141B.057: Added a column with functions description in the ExceptionsData table for all supported architectures (for x64, ARM Thumb and ARM64, some columns are now hidden by default)
  • 1505.059: Fixed error displaying SEH Scope on the ExceptionsData page for ARM7/ARM LE in some cases
  • 1507.060: Added a separate tab for the ARM64 unwind chain on the ExceptionsData page
  • 1507.072: Added recognition of some types of exception handlers for all supported architectures
  • 1507.073: Added a column with the type of exception handlers in the ExceptionsData table, the column with the handler's RVA is hidden by default
  • 1508.074: Fixed a rare error filling information from the export table for the RVA description
https://rammerlabs.alidml.ru/files/PEAnatomist-0.2.3.zip
 

BfoX

Постоянный
Мудрец
Сообщения
52
Реакции
213
Обновился
Код:
Обновление программы до версии 0.2.4 (2021-06-08):150F.001: Добавлен код раскрутки для инструкций Pointer Authentication extension из ARM64 (InsiderPreview 21382)1511.003: Добавлена колонка со значением глубины цепи раскрутки в таблице ExceptionsData для x64 (по умолчанию скрыта)1511.004: Исправлена ошибка включения скрытых по умолчанию колонок в ListView после перезапуска программы (регресс с версии 0.2.0)1516.013: Устранен крах программы во время разбора испорченной таблицы COFF-символов в PE-файлах1517.015: Исправлена старая ошибка отображения вкладки "Безопасность" для PE-файлов в отдельных случаях1518.016: Исправлена ошибка валидации настроек положения окна программы, еслипротивоположные стороны окна выходят за пределы рабочего стола (регресс с версии 0.2.0)151B.021: Добавлен график энтропии151B.025: Добавлены настройки вычисленияэнтропии для построения графика и настройки отображения графика1601.032: Добавлена подсказка о смещении в файле и соответствующей секции под курсором на графике энтропии1604.033: Последняя активная вкладка диалога настроек восстанавливается при его повторномоткрытии (до перезапуска программы)1608.040: Добавлены опциональные метки границ секций на графике энтропии
https://rammerlabs.alidml.ru/files/PEAnatomist-0.2.4.zip
 

ajax

Evil
Мудрец
Сообщения
3
Реакции
224
бесспорно, больше утилей разных. кто-нибудь опишет, как использует данный софт в повседневке? мне CFF и LordPE вполне хватает пока.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
176
Реакции
545
Что-то подзабыл (обсуждатось..),
- в документейшене указано требованием минимум WinXP/SP3.
Так вот это SP3 оно реально нужно для какой-то фичи, или не нужно?

Просто запускается вроде бы нормально и в WinXP/SP2 ..
 

SDK

Ветеран
Ветеран
Сообщения
183
Реакции
37
кстати а почему на сайте нет совта от http://rdgsoft.net/

может кто выложит RDG Malware Detector и RDG Packer Detector 0.7.7
 

mak

Соломенные сандалии
Администратор
Сообщения
755
Реакции
524
0.2.5.267 (2021-08-25)
PEAnatomist.exe SHA256: F759677D747651D4C6242A3F04EAFE2476FDEAD77A4B62DDBD93DE38971A579F

  • 161B.008: Добавлено отображение полного пути к записям архива в LIB-файлах, длинные пути ограничиваются до имени файла и начальной части пути
  • 161B.013: Добавлен разбор записи ECSYMBOLS в LIB-файлах (специфичный для ARM64EC набор символов)
  • 161C.015: Исправлена ошибка сохранения записей LIB-файлов с недопустимыми символами в предлагаемом по умолчанию имени
  • 161C.016: Актуализированы некоторые относящиеся к ARM64EC структуры из WDK 22000
  • 1708.038: Добавлено описание элементов IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION с индексом 0x7FFFF в таблице DynamicData Relocations
  • 170F.069: Немного ускорена сортировка ListView
  • 170F.070: Исправлена сортировка списка READYTORUN_IMPORT_SECTION (для R2R и NGEN)
  • 1713.088: Добавлена настройка числа запоминаемых недавних файлов
  • 1714.091: Исправлена ошибка перечисления IP2StateMap для MSVC __CxxFrameHandler4 (регресс версии 0.2.3)
  • 1717.100: Добавлены поддержка Cxx20Modules в парсере MSVC ILStore (CxxIL) и отображение соответствующих глобальных символов
  • 171B.106: Сортировка списка сбрасывается, если скрывается колонка, по которой он отсортирован
  • 171C.113: Добавлена опциональная загрузка последнего открытого файла, если при запуске программы не указано иного
  • 171E.116: Добавлено подменю для копирования в буфер обмена отдельных колонок, если контекстное меню ListView было вызвано с клавиатуры
  • 171F.124: В контекстное меню ListView добавлено подменю сортировки списка
  • 171F.127: Исправлена ошибка позиционирования контекстного меню ListView при вызове с клавиатуры, если выделенная строка вне видимой области
  • 1801.128: Исправлен подсчёт размера выделяемой памяти для копирования в буфер обмена из ListView в случае добавления шапки из заголовка списка
  • 1801.129: Исправлено построчное копирование в буфер обмена содержимого таблицы LoadConfig GFID при наличии сведений в колонке "XFG-хеш"
  • 1803.142: Исправлена ошибка валидации настроек ListView, способная привести к невозможности отобразить скрытую колонку
  • 1805.157: Устранена ошибка копирования в буфер обмена значений отдельного столбца ListView, приводящая к краху программы из-за возможного buffer overflow
  • 1806.160: Устранена ошибка отображения списка COFF-символов в PE и OBJ в присутствии длинных имён символов (более 1000 знаков)
  • 1808.175: Добавлен диалог настройки колонок ListView (отображение/скрытие, порядок следования) вместо контекстного меню заголовка списка
  • 1808.182: В контекстное меню заголовка ListView добавлено меню копирования столбца целиком независимо от выделенных строк
  • 1808.183: Обработка команд контекстного меню заголовка ListView переведена на WM_MENUCOMMAND
  • 1809.193: В диалоге настройки колонок ListView добавлено управление порядком колонок с клавиатуры (CTRL+DOWN/UP/HOME/END) и с помощью drag-n-drop
  • 180B.198: Исправлена ошибка отображения дополнительных COFF-символов для COMDAT-секции в OBJ-файлах, если присутствует второй дополнительный символ
  • 180F.207: Значительно ускорено построение таблицы ExceptionsData в OBJ-файлах
  • 1811.209: Исправлена ошибка отображения длинных имён секций в таблице секций OBJ-файлов
  • 1811.211: Исправлена ошибка индексирования COMDAT-секций с длинными именами в OBJ-файлах (могли не полностью перечисляться данные в таблице ExceptionsData)
  • 1812.215: Добавлена проверка метки времени Reproducible PE-файла на соответствие значению хеша
  • 1813.220: Добавлена возможность поиска только в выделенных строках ListView для поиска в несколько итераций по совокупности критериев
  • 1813.223: Исправлена ошибка неполного копирования в буфер обмена строк из ListView, если содержимое хотя бы одной ячейки было длиннее 1000 символов
  • 1813.230: Небольшая оптимизация потребления памяти во время копирования строк из ListView в буфер обмена с выравниванием ширины колонок
  • 1817.261: Добавлено настраиваемое разделение длинных ячеек ListView на несколько строк при копировании в буфер обмена с выравниванием ширины колонок

https://rammerlabs.alidml.ru/files/0205-5E33-164E-0264/PEAnatomist-0.2.5.zip
 

RamMerLabs

Ordo ab chao
Наставник
Сообщения
11
Реакции
10
...Distributed under the terms of the MIT license (license text applied).
В версии 0.2.1 перенес на Freeware вместо MIT, но текст лицензии по-прежнему прилагается :) (в readme.txt)
На использование и распространение существенных ограничений нет.

На здоровье!

...Так вот это SP3 оно реально нужно для какой-то фичи, или не нужно?
Просто запускается вроде бы нормально и в WinXP/SP2 ..
Не, специальных требований нет, просто на SP2 не тестировал. Если работает - хорошо.

оно на сях сейчас. на асме или другой версии С что-то из апи могло юзаться. вопрос был не о совместимости :)
"Оно" на MASM, как и прежде :)
 
Последнее редактирование:

hors

Посетитель
Ветеран
Сообщения
32
Реакции
437
Очень интересный проект. Детальный разбор структур(Debug, Load Config, Exceptions) делает эту программу уникальной и одной из самых лучших среди просмотрщиков PE файлов.

Огромное уважение автору за его упорный труд.
 

dermatolog

Новичок
Ветеран
Сообщения
7
Реакции
1
Бага с парсингом отложенного импорта, сделанного НЕ компилятором. Скорее всего неправильная интерпретация значения DelayImportDescriptors.Size, которая по идее должна быть кратна размеру IMAGE_DELAY_IMPORT_DESCRIPTOR

Бага с отображением исключений для данных сделанных НЕ компилятором:
1. В названии обработчика нет нормального имени, а только адрес
2. В содержании отображается какой-то шлак.

В целом показ информации по исключениям сделан не очень - зачем снизу показывать 7 закладок, 4 из которых в зависимости от типа обработчика, ВСЕГДА будут пустыми? Я бы вместо 7-ми сделал всего 3 закладки: Коды раскрутки, Данные для обработчика и Содержание. На закладку "Данные обработчика" перенес 5 гридов "Цепь", "SEH Scope", "CxxFH3", "CxxFH4" и "DWARF LSDA" и показывал только нужный грид на этой закладке.
 

RamMerLabs

Ordo ab chao
Наставник
Сообщения
11
Реакции
10
На размер IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT как раз лучше не опираться, там вполне можно ставить 0 и успешно парсить таблицу. Такие PE достаточно часто встречаются.
Можете показать скрин бага или семпл?
<добавлено>
Строго говоря, заполнение RVA и размера IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT в опциональном заголовке вообще никакой роли для загрузки PE не играет (думаю, Вы и так это знаете), т.к. нужные адреса уже захардкодены при обращении к __delayLoadHelper (ну или других смиволов в зависимости от CRT), который и так знает где какие данные ему брать. Соответственно, парсить всю вышеуказанную структуру по однозначно заданным правилам не всегда получится. Приходится подстраиваться под различные варианты по различным вторичным признакам.
</добавлено>

Если отображается лишь RVA обработчика, значит имя определить не удалось - либо это нестандартный обработчик, либо какие-то "некомпиляторо-написанные" данные выходят за известные программе границы. Некоторые подобные данные едва ли вообще можно корректно распознать без отладочных символов.
В "содержании" может быть "шлак", если не удалось корректно определить длину UnwindData (со всеми полями переменной длины). Скрин тоже не помешал бы.

В целом показ информации по исключениям сделан не очень - зачем снизу показывать 7 закладок, 4 из которых в зависимости от типа обработчика, ВСЕГДА будут пустыми? Я бы вместо 7-ми сделал всего 3 закладки: Коды раскрутки, Данные для обработчика и Содержание. На закладку "Данные обработчика" перенес 5 гридов "Цепь", "SEH Scope", "CxxFH3", "CxxFH4" и "DWARF LSDA" и показывал только нужный грид на этой закладке.
7 закладок остались ещё от версий программы, когда она не умела определять тип обработчика - пользователю предлагалось самому найти подходящую вкладку, и, как я Вам ранее писал в ЛС, сейчас этот алгоритм (определения обработчика) ещё не достаточно точен, чтобы гарантированно показать нужную вкладку. Кроме того, есть ещё как минимум тройка "языко-зависимых" наборов данных для EH, которые можно разобрать, но отсутствующих в публичной версии программы. Так что вкладок могло быть даже больше, и такой подход мне самому не нравится.
Вкладку "Цепь" всё таки смешивать с "языко-зависимыми" данными не стОит, это другая сущность.
Но Вы правы, подобный layout категорически неудобен.
 
Последнее редактирование:

dermatolog

Новичок
Ветеран
Сообщения
7
Реакции
1
Можете показать скрин бага или семпл?
Пример
Вкладку "Цепь" всё таки смешивать с "языко-зависимыми" данными не стОит, это другая сущность.
Тут проблема не в сущностях, а в пустых закладках, которые только перегружают GUI. "Цепь" - это структура, не имеющая обработчика вообще. Поэтому пользователю достаточно было показать только закладку Цепь, а остальные 5 закладок с обработчиками просто сделать невидимыми. Тоже самое с закладками, показывающими внутренности данных для обработчика - зачем при этом видеть закладку "Цепь" и другие типы обработчиков я не понимаю.
 
Верх Низ