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

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

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

  1. RamMerLabs

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.385
    Доброго дня!
    Хочу поделиться небольшой программкой для просмотра внутренностей 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.7 (2019-12-06): Скачать

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

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.385
    Обновление программы до версии 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.385
    Обновление программы до версии 0.1.3 (2019-10-19):
    -Исправлен баг в разборе таблиц ExceptionsData для x64

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

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

    RamMerLabs Active Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.385
    Обновление программы до версии 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.385
    Обновление программы до версии 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.385
    Обновление программы до версии 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.784
    RamMerLabs,

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

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

    RamMerLabs Active Member

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

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

    Indy_ Well-Known Member

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

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

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

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

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

    RamMerLabs Active Member

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

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

    UbIvItS Well-Known Member

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

    RamMerLabs Active Member

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

    UbIvItS Well-Known Member

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

    RamMerLabs Active Member

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

    UbIvItS Well-Known Member

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

    RamMerLabs Active Member

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


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

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