1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

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

Тема в разделе "WASM.PROJECTS", создана пользователем RamMerLabs, 11 окт 2019.

  1. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Доброго дня!
    Хочу поделиться небольшой программкой для просмотра внутренностей PE-файлов - PEAnatomist. Да, это очередной просмотрщик PE. Но с некоторыми востребованными (по крайней мере мной:) ) возможностями, которых мне не удалось найти нигде более.

    [​IMG]

    Помимо обычного набора из базовых заголовков, импорта, экспорта, ресурсов и т.д. PEAnatomist глубоко вонзает "скальпель" в таблицы Base Relocations, LoadConfig и ExceptionsData.
    Вскрываются все поля и таблицы из LoadConfig - вплоть до самых свежих из Win SDK 18362 (Enclave и Volatile Metadata). Производится лёгкий анализ содержимого по релоцируемым VA, в т.ч. для специфичных типов релокации архитектур ARM7 Thumb и IA64. И, наконец, полный разбор таблиц ExceptionsData для архитектур x64, ARM7, ARM7 Thumb, ARM64, IA64 и специфичных для языка данных.

    [​IMG] [​IMG]
    Например так отображается таблица Exceptions для x64 и для ARM64 с разбором кодов раскрутки.

    [​IMG]
    На закуску ещё есть декодирование всех элементов из Rich-подписи с указанием всех используемых при создании PE инструментов, отображение многих типов отладочной информации.

    Установка программы не требуется, дополнительных зависимостей нет. Административные права программа не требует, но без них не получится добавить ассоциации с файлами в проводнике. Программа никуда кроме файла настроек (рядом с программой или в %appdata% в зависимости от ряда условий) ничего не пишет, не отправляет.

    Ознакомиться подробнее с возможностями программы и скачать её можно на сайте программы.

    Новая версия 0.1.9 (2019-12-27): Скачать

    Надеюсь, кому-нибудь ещё программа окажется полезной.
     
    Последнее редактирование: 28 дек 2019
    eroha, M0rg0t, hiddy и 2 другим нравится это.
  2. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.2 (2019-10-18):
    -Исправлено отображение иконки исследуемого файла на панели задач
    -Исправлено падение на 16-битных и иных MZ не-PE32 файлах
    -Добавлено отображение ошибок при загрузке файла и уведомление о нехватке прав для изменения ассоциаций
    -Оптимизация размера данных
    -Оптимизация скорости разбора таблиц ExceptionsData

    Тестирование на моей аппаратуре показало ускорение разбора таблицы Exceptions в худшем случае в ~5 раз, в основном в ~8.7 раза. Многопоточности пока ещё нет, на очень больших файлах (больше 100 МБ) GUI ещё подвисает (вплоть до 1-2 минут :-[ ).

    Сайт программы # Скачать новую версию
     
    Mikl___ нравится это.
  3. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.3 (2019-10-19):
    -Исправлен баг в разборе таблиц ExceptionsData для x64

    Из-за чудовищной опечатки (edx вместо eax) некорректно работала функция разбора ExceptionsData для x64 на небольших файлах (на больших файлах значение edx начинало проходить через условие).
    Кроме того ещё на ~8% ускорена обработка вышеупомянутой таблицы.

    Сайт программы # Скачать новую версию
     
  4. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.4 (2019-10-31):
    - Исправлены ошибки в разборе заголовков LSDA в таблице ExceptionsData
    - Добавлен разбор LSDA для C Builder версий 10.2 и выше
    - Добавлена возможность передачи имени файла через командную строку без дополнительных параметров
    - Исправлена мелкая ошибка в обработке имени файла
    - Добавлен список недавних файлов в меню
    - Структура файла настроек модифицирована без обратной совместимости
    - Добавлена поддержка файлов с любым размером оверлея (установщики и подобные)
    - Оптимизация части кода для работы с GUI
    - Неиспользуемые в исследуемом файле вкладки не отображаются
    - Добавлена поддержка HighDPI


    HighDPI пока доступен в режиме System, т.е. без поддержки смены DPI во время работы программы.

    Сайт программы # Скачать новую версию
     
    UbIvItS нравится это.
  5. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.5 (2019-11-09):
    - Добавлен разбор директории IMAGE_DIRECTORY_ENTRY_IAT
    - Добавлено описание символов в таблице Dynamic Value Relocations
    - Добавлено описание к некоторым данным в таблице Volatile Metadata для x86
    - Небольшая оптимизация кода для перехода к новому GUI
    - Исправлены ошибки разбора FuncInfo4 (ExceptionsData table), если размещение некоторых блоков данных было оптимизировано
    - Исправлена ошибка разбора FuncInfo4 (ExceptionsData table) для Separated code segments
    - Добавлен вывод RVA инструкций, соответствующих кодам раскрутки в таблице для x64


    Описание символов в DynValue Relocs - указываются начало и конец таблиц PTE, PDE, PPE, PXE (он же PML4) и PFN_DATABASE, если таковые присутствуют в DynValue Relocs.

    Ошибки разбора FuncInfo4 связаны с обработкой записей с флагом Chain, для таких записей в новой форме FuncInfo не учитывалось наличие таблиц состояний более чем для одного адреса начала функции.

    Сайт программы # Скачать новую версию
     
  6. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.6 (2019-11-23):
    - Исправлена ошибка разбора таблицы импорта, модифицированной некоторыми упаковщиками
    - Добавлена принудительная очистка списка недавних файлов
    - Добавлена реакция на клавишу ENTER в текстовых полях FLC
    - Добавлены настройки:
    -- установка окна программы поверх всех;
    -- контраста цвета чередующегося фона списков;
    -- кол-ва выводимых в HEX-виде байт в описании в таблице Base Relocations;
    -- восстановления последней открытой вкладки;
    -- вставки шапки списка в копируемые в буфер обмена данные;
    -- использования клавиши ESC для выхода из программы
    - Исправлено отображение минормной версии инструмента в RICH-подписи для VS2017 и выше
    - Устранено некорректное поведение при изменении размеров главного окна
    - Исправлена ошибка удаления ассоциации с файлами
    - Поля ввода формы FLC очищаются после загрузки нового файла
    - Исправлена ошибка отображения таблицы секций, если некоторые поля заголовка были занулены
    - Добавлено именование секций по номеру, если их имя не указано в заголовке или не содержит печатных символов
    - Полностью переделан механизм работы с секциями и вычисления соответствия RVA смещению в файле
    - Устранены ошибки в работе FLC


    В этой версии алгоритм расчёта RVA->raw и наоборот, а также работы с секциями полностью переписан. Теперь учитываются многие особенности оригинального загрузчика PE из Windows начиная с XP. Тестирование на моих образцах не показало значительных ошибок - всякие хитрые, но валидные PE были загружены и данные из них отображены. Из незначительных ошибок стоит отметить неточность в вычислении raw->RVA из последней секции в особых случаях. Разумеется, программа не может показать данные из "самомодифицирующихся" при загрузке PE, т.е. если из-за действия например релоков, запуска tls-коллбеков или перемещения заголовков последние модифицируются - программа покажет то, что было в файле изначально. Ну и позволю похвастаться - подавляющее большинство аналогичных программ (в том числе и совсем не бесплатные) не смогли корректно обработать и десятую часть от предлагаемых семплов.
    Конечно, 100% точности ещё нет, поэтому буду рад любым проблемным образцам.

    Сайт программы # Скачать новую версию
     
    Последнее редактирование: 23 ноя 2019
    UbIvItS нравится это.
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.985
    RamMerLabs,

    > Ну и позволю похвастаться - подавляющее большинство аналогичных программ (в том числе и совсем не бесплатные) не смогли корректно обработать и десятую часть от предлагаемых семплов.

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

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Indy_
    >>Из системных гуй апп ?
    На многострадальном calc.exe только и тестирую, разве нужно на чём-то ещё? O_O

    >>Что это вообще за проект
    Как обычно вы читаете через строку и видите только то, что хотите видеть.
    Он не лучше и не хуже. Если вас не устраивает интерфейс - конструктивная критика и предложения приветствуются (хотя от вас этого не дождёшься). У вас ведь наверняка есть всеядный эталон с чудесным юзер-френдли gui/cui, так покажите его! Только не очередную консольную поделку, существующую лишь на скриншотах.
    А вот это ваше бесцельное брюзжание (или простой троллинг?) мне давно глубоко безразлично.
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.985
    RamMerLabs,

    > У вас ведь наверняка есть всеядный эталон с чудесным юзер-френдли gui/cui

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

    > консольную поделку

    Мне нравится консоль, вывод идёт через IPC в серверный процесс, те нет гуя, нэйтив.
     
  10. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Indy_
    Вы сами на свои вопросы и отвечаете: вам нравится одно, другим нравится другое. Так бывает, представляете?
    Любитель или не любитель вы чего-нибудь там я знать совсем не должен, этим занимаются люди другого рода деятельности.
    >>Мне нравится консоль
    Я тоже ничего против консольного вывода не имею, но вы ведь кроме скриншотов ничего давно не показываете.

    PS: если ничего дельного нет - оставьте этот оффтоп пожалуйста.
     
    Indy_ нравится это.
  11. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    4.775
    RamMerLabs, а исходники не выкладываешь?
     
  12. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    UbIvItS
    Не, пока что не выкладываю. Там и смотреть ещё не на что. "Никого не интересует разбор примитивных структур пе формата" (с) :)
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    4.775
    с этим не соглашусь == акь минимум, это справочник :) Впрочем, в любом случае БОЛЬШОЕ СПАСИБО :)
     
    RamMerLabs нравится это.
  14. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    UbIvItS
    >>в любом случае БОЛЬШОЕ СПАСИБО
    Спасибо и Вам на добром слове. Неужели программа оказалась полезной? Если так, это очень приятно слышать.
     
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    4.775
    Хороший инструмент всегда нужОнЪ в хозяйстве. А Хороший инструмент с исходниками ещё Лучшей :)
     
  16. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.7 (2019-12-06):
    - Исправлена ошибка с зависанием при обработке данных подписи PE
    - Исправлен мелкий недочёт с отображением подсказки в полях ввода FLC
    - Устранены мелкие ошибки работы с LSDA в таблице ExceptionsData
    - Исправлено отображение сведений о ресурсах в сдампленных PE
    - Оптимизация кода для работы с GUI
    - Добавлена настройка назначения элементам управления шрифта, используемого оболочкой (изменение настройки требует перезапуска программы)
    - Исправлены мелкие ошибки при отображении диаголов из ресурсов исследуемого файла
    - Исправлена ошибка отображения вкладок для директорий PE для некоторых модифицированных образов


    Это обновление программы преимущественно направлено на исправление некоторых выявленных ошибок; следующая версия обещает быть более щедрой на новые плюшки как по интерфейсу, так и по функционалу. Новый GUI потихоньку пишется, но для публикации ещё не готов.

    Сайт программы # Скачать новую версию
     
  17. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.8 (2019-12-20):
    - Добавлено описание для COFF Groups в таблице отладочной информации
    - Обновление интерфейса главного окна программы с использованием древовидного списка доступной информации
    - Добавлены новые страницы информации о заголовках: отдельные DOS_HEADER, FILE_HEADER, OPTIONAL_HEADER, CHPE_HEADER, VOLATILE_METADATA_HEADER и некоторых других
    - Добавлен разбор таблицы IAT в CHPE для эмулируемой архитектуры
    - Добавлено построение битовой карты CFG и её отображение в HEX-виде
    - Добавлен разбор некоторых специфичных таблиц для приложений, созданных в VisualBasic 5/6
    - Добавлен журнал загрузки файла с отображением предупреждений о несоответствии формату PE (перечень проверок будет расширяться)
    - Реализован множественный выбор строк в списках


    Новая, немного экспериментальная версия. Прежде всего, заметно изменился внешний вид главного окна программы. Это ещё не конечный результат, следующие версии скорее всего покажут ещё больше модификаций GUI. Будут затронуты как layout окна в целом, так и поведение некоторых уже имеющихся элементов управления (статус-бар в частности). Некоторое поведение будет настраиваемым.
    Наконец-то дошла очередь до запрашиваемой многими функции множественного выбора в списках. Обращаю внимание, что копирование в буфер обмена огромных списков целиком (сотни тысяч строк) может не выполниться - это временное явление, копируйте частями по 70-80 тысяч строк.
    Кроме того, добавил ооочень сырую (прям пре-альфа альфы) версию журнала загрузки PE - пока он прикручен в виде отдельного списка и реагирует на совсем небольшое число отклонений от формата. В будущем планируется сделать его более контестно-зависимым и добавить около сотни различных проверок.
    Для интереса сделал функцию построения CFG bitmap образа из GFID и её отображение. Вот такие штуки теперь можно увидеть (это специально подготовленный пример, в привычных приложениях такого не встретить):
    [​IMG]

    Ну и напоследок ещё чуть-чуть безделушек: описание некоторых coff-groups из POGO-debug информации:
    [​IMG]

    Сайт программы # Скачать новую версию
     
  18. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    656
    Адрес:
    подполье
    Похоже, gpe смог выйти даже из под визора
     
  19. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    TrashGen
    О чём вы?
     
  20. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.388
    Обновление программы до версии 0.1.9 (2019-12-27):
    - Оптимизированы некоторые внутренние форматы данных
    - Исправлен способ сохранения настроек, теперь механизм такой:
    -- если отсутствуют файлы настроек рядом с программой и в %appdata%, то файл настроек будет создан рядом с программой;
    -- если файла настроек нет рядом с программой и директория недоступна для записи, то сохранение произойдёт в %appdata%;
    -- если имеется валидный файл настроек рядом с программой - настройки всегда считываются оттуда, сохранение настроек производится, если файл доступен на запись;
    -- если файл настроек уже есть в %appdata%, то для чтения/записи настроек всегда используется он.
    - Скрываемые уменьшением значения "Number Of RVA And Sizes" директории при их наличии помечаются серым цветом
    - Усовешенствована сортировка списков


    Сайт программы # Скачать новую версию