eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 11 октября 2019 19:56 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #1

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



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


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


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

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

Ознакомиться подробнее с возможностями программы и скачать её можно на сайте программы
Новая версия 0.1.5 (2019-11-09): Скачать
Надеюсь, кому-нибудь ещё программа окажется полезной.

| Сообщение посчитали полезным: mak, Adler, Qbik, Hugo Chaves, HandMill, plutos, MarcElBichon, hors, Bronco, morgot, v00doo, BlackCode, GPcH, DICI BF, ==DJ==[ZLO], CyberGod, TRPD, crypto, DenCoder, UniSoft, exZet, dosprog, -=AkaBOSS=-, SReg, Orlyonok, icerix, topmo3, Jupiter



Ранг: 321.6 (мудрец)
Статус: Участник

Создано: 15 октября 2019 20:27 · Поправил: difexacaw New!
Цитата · Личное сообщение · #2

RamMerlabs

Интересно на ошибки потестить, системный загрузчик не уязвим. А это сырое может там ошибки есть и можно провести атаку. Как такое тестят(по быстрому), рандомом собирать pe, типо брутфорс ?

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 15 октября 2019 23:52 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #3

difexacaw
Ну раз интересно - тестите на здоровье.
[оффтоп]
Я сэкономлю Вам время - ошибки там полюбому есть. И атаку можно провести. На суперсекретные сервера пeнтaгoнa и aнб. Уверен, у Вас непременно получится!
И я очень удивлён, что Вы не написали до сих пор годный мотор (который никому не покажете, кроме как на скриншотах) для тестирования по-быстрому бруДфорсом прямо из кернель-мода. Как так???
[/оффтоп]
Если серьёзно - не сочтите за труд, черкните баг-репорт потом.

| Сообщение посчитали полезным: Gideon Vi


Ранг: 136.6 (ветеран)
Статус: Участник

Создано: 16 октября 2019 11:35 New!
Цитата · Личное сообщение · #4

difexacaw пишет:
системный загрузчик не уязвим

У меня для тебя плохие новости. Октябрьское обновление венды исправляет 5 DoS CVE связанных с некорректной обработкой PE файлов ядром и CI.dll

Ранг: 126.6 (ветеран)
Статус: Участник

Создано: 16 октября 2019 20:12 New!
Цитата · Личное сообщение · #5

Alchemistry
Парни,ну зачем тёрки не по теме?
Обменяйтесь номерами пейджеров.

Ранг: 136.6 (ветеран)
Статус: Участник

Создано: 17 октября 2019 07:09 New!
Цитата · Личное сообщение · #6

Hugo Chaves
Твои пейджеры это как раз не по теме. А разбор ПЕ и святая вера в непогрешимость венды в этом плане это как раз в тему. Купи себе тамагочи и кидай ему на пейджер.


Ранг: 321.6 (мудрец)
Статус: Участник

Создано: 17 октября 2019 20:28 · Поправил: difexacaw New!
Цитата · Личное сообщение · #7

Alchemistry

Твоим новостям лет десять давности, тогда искали ошибки в ядерном загрузчике и их было навалом. Но потом на это дело забили и не возвращались, так как эти ошибки интереса не представляют - поток может зависнуть в загрузчике(можешь подвесить ось простым путём - исчерпать системную память, вызвать не лимитируемый механизм, приводящий к аллокациям, eg: RegisterThreadTermPort()), либо вернётся с исключением. Толку от этого ноль. И речь шла как бы про юзер лоадер(сабж же юзермодный), про ядерный ничего небыло.

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 18 октября 2019 20:40 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #8

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

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


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

| Сообщение посчитали полезным: DimitarSerg, GPcH


Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 19 октября 2019 23:25 New!
Цитата · Личное сообщение · #9

Обновление программы до версии 0.1.3 (2019-10-19):
-Исправлен баг в разборе таблиц ExceptionsData для x64

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

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

| Сообщение посчитали полезным: Orlyonok, Bronco



Ранг: 630.8 (!)
Статус: Участник
Автор VB Decompiler

Создано: 19 октября 2019 23:28 · Поправил: GPcH New!
Цитата · Личное сообщение · #10

RamMerlabs
Проверил на тройке десятков разных сложных сэмплов - вроде нигде не падает. Скорость обработки исключений ускорилась - факт.
PS: Проверял версию 0.1.2

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 19 октября 2019 23:36 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #11

GPcH
Спасибо за проверку!
Скорость теперь на 90% ограничивается заполнением ListView, пора его на виртуальный режим переводить. Заодно и потребление памяти можно будет уменьшить.

И, пожалуйста, обновите программу до 0.1.3 - в 0.1.2 ужасная опечатка нашлась.
Извиняюсь за неудобства.

Ранг: 14.5 (новичок)
Статус: Участник

Создано: 20 октября 2019 10:57 New!
Цитата · Личное сообщение · #12

если можно, просьба добавить передачу имени PE файла как параметр командной строки.
PEAnatomist.exe my.dll
спасибо.

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 20 октября 2019 12:46 New!
Цитата · Личное сообщение · #13

topmo3
Уже есть:
PEAnatomist.exe -pe my.dll
Или воспользуйтесь настройками программы - там предусмотрена возможность добавления в контекстное меню файлов.

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 31 октября 2019 19:07 New!
Цитата · Личное сообщение · #14

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


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

topmo3
Теперь дополнительные ключи командной строки не требуются.

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

| Сообщение посчитали полезным: TryAga1n, DICI BF, Bronco


Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 9 ноября 2019 01:53 New!
Цитата · Личное сообщение · #15

Обновление программы до версии 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 не учитывалось наличие таблиц состояний более чем для одного адреса начала функции.

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

| Сообщение посчитали полезным: TRPD, mak, SReg, Bronco, DICI BF, plutos, morgot, DimitarSerg



Ранг: 269.3 (наставник)
Статус: Участник
Advisor

Создано: 9 ноября 2019 06:07 New!
Цитата · Личное сообщение · #16

вау...с фейсом то что надо, феньк
когда будет редачпе?

Ранг: 136.6 (ветеран)
Статус: Участник

Создано: 9 ноября 2019 08:09 · Поправил: Модератор New!
Цитата · Личное сообщение · #17

difexacaw
10 лет назад ничего этого еще не было дурачок, а твои изыскания в винхп никого не интересуют ни сейчас ни тогда. Ну и тебе может и нет ничего интересного - ты же форумное трепло.

RamMerlabs
У edit боксов главного окна при dpi 144 верхняя граница не прорисовывается пока их не выбрать. Чтобы как-то структурировать отображение информации я бы предложил использовать кастомный деревоподобный компонент, например как тот что есть в processhacker, либо комбинацию из treeview слева и listview справа, наподобие regedit.

От модератора: Вежливее, ещё вежливее.

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 9 ноября 2019 14:34 New!
Цитата · Личное сообщение · #18

Bronco
Оу, редактирование мне самому пока только снится. Сначала хочу переделать интерфейс (хорошо если к новому году успею) и доделать дизасм хотя бы для x86 и x64 (наброски для arm64 и ia64 будут очень долго ещё лишь набросками).

Alchemistry
Про edit понял, увидел у себя тоже. После переделки GUI их там не будет вовсе, так что если это не сильно режет глаза - пусть пока так побудет, ок?
Насчёт GUI: вобщем так и будет - слева treeview, справа MDI со списками, вверху rebar с контролами для FLC, внизу statusbar с небольшой сводной инфой об образе.
Совместный контрол tree-list (как в PH) хотелось бы вместо некоторых списков, но это со временем.

Спасибо всем за интерес к программе и предложения\отзывы\критику!

| Сообщение посчитали полезным: Hugo Chaves


Ранг: 0.3 (гость)
Статус: Участник

Создано: 10 ноября 2019 20:08 · Поправил: anony-mouse New!
Цитата · Личное сообщение · #19

Очень интересненько! Не хватает Хекс вьюера везде. Например в хидерах хочется как-то так:
https://lh3.googleusercontent.com/-6dbGER_63E8/VfEuOCpKjtI/AAAAAAAACH0/LhgAcIU1Qr8/s800-Ic42/tobj-struct.png

IAT, Debug и другие так же.

В секциях тоже хекс - дабл клик или поделить экран.

Ресурсы - есть хекс, хорошо. Думаю лучше поделить экран, тогда легче будет "гулять" по ресурсам и видить данные. Может вообще поделить экран и убрать табы, в General все равно мало инфы.

(правка) и еще - там где есть флаги (например Characteristics, DLL Characteristics, Machine), иногда хочется знать какие флаги есть и что не включено. Может по дабл клику?

Можно добавить disassembler чтобы например быстренько посмотреть что в entry point. Но это наверное после фичи модификации

Еще можно добавить парсер CFG, что-бы например разобрать такой пример:
https://github.com/86hh/cfg-teleport-demo/blob/master/cfg-teleport.exe
статья: https://86hh.github.io/cfg2.html

(правка #2) отключите выход по ESC

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 10 ноября 2019 21:16 New!
Цитата · Личное сообщение · #20

anony-mouse
Hex-view и disasm уже в пути. Сейчас в вялотекущем режиме переделываю интерфейс и одновременный просмотр данных сразу в нескольких видах - основной ориентир. Дизасм будет попозже.

Насчёт отображения всех доступных флагов подумаю, в todo записал.

Про CFG и код в его битовой карте статью читал ранее. Можно конечно заморочиться с построением bitmap'ы по данным из GFID, но велик ли профит от такого подхода "сокрытия" кода?
Хотя чисто из спортивного интереса и на всякий случай наверное можно прикрутить.

А чем esc мешает? Если так принципиально - сделаю настройку на игнор esc в главном окне.

Ранг: 0.3 (гость)
Статус: Участник

Создано: 10 ноября 2019 21:24 New!
Цитата · Личное сообщение · #21

> Можно конечно заморочиться с построением bitmap'ы

Может это слишком. Думаю достаточно показать таблицу, как-то так:
https://raw.githubusercontent.com/86hh/86hh.github.io/master/texts/cfg_images/cfg2_bearvsdb.png

> А чем esc мешает?

Нечаянно окно закрыл. Можно алерт добавить, уверенны ли вы итд.
В любом случае, не так уж критично.

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 10 ноября 2019 21:35 New!
Цитата · Личное сообщение · #22

anony-mouse
>>Думаю достаточно показать таблицу
Так это уже давно есть: GFID table. С флагами Call suppressed и Export Suppressed.
Скрин из примера из той статьи:

LoadConfig Directory разбирается вообще вся (ну ладно, Lock Prefix Table нету, но я её с 2000 винды и не встречал).

Вас услышал, про esc придумаю что-нибудь.

Ранг: 0.3 (гость)
Статус: Участник

Создано: 10 ноября 2019 21:52 New!
Цитата · Личное сообщение · #23

> GFID table

Виноват, не заметил таб. Круто!

Кстати, вот еще забавный баг (или фича):
https://imgur.com/a/QVZ1cb6

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 10 ноября 2019 22:11 New!
Цитата · Личное сообщение · #24

>>Кстати, вот еще забавный баг (или фича)
Хех, так и есть. Баг или фича Я сам хз, как расценивать. Во всём виноват вот такой говнокод:
Code:
  1. .elseif eax == WM_SIZING
  2.   mov esi, lParam
  3.   assume esi: ptr RECT
  4.   
  5.   mov eax, [esi].bottom
  6.   mov edx, [esi].top
  7.   add edx, RL_PROPWINDOW_MINY
  8.   cmp eax, edx
  9.   jnb @f
  10.   mov [esi].bottom, edx
  11. @@:
  12.   mov eax, [esi].right
  13.   mov edx, [esi].left
  14.   add edx, RL_PROPWINDOW_MINX
  15.   cmp eax, edx
  16.   jnb @f
  17.   mov [esi].right, edx
  18.   xor eax, eax
  19.   inc eax
  20.   jmp _Ready
  21. @@:
  22.   xor eax, eax
  23. _Ready:
  24.   assume esi:nothing

Надеюсь, и до него руки дойдут.
Спасибо, что обратили внимание.

Ранг: 245.5 (наставник)
Статус: Участник

Создано: 11 ноября 2019 08:30 · Поправил: TryAga1n New!
Цитата · Личное сообщение · #25

Реквест:
1. Во всех листвью сделать мультиселект и возможность сохранения/копирования всех строк
2. При копировании с листвью сделать опциональное добавление шапки(бесит после каждой вставки ее удалять)
3. Поскольку тулза предназначена исключительно для получения данных, по завершении парсинга освобождать файл, дабы была возможность его редактировать, не закрывая окно с данными
3.1. На главной форме добавить небольшую кнопочку "Перечитать" файл.
4. Сделать опциональным запоминание последней открытой вкладки, либо сделать отдельным для каждого файла, либо выпилить нафиг
5. Выбор цвета чередования строк. Мне не хватает контраста
6. В меню Вид добавить "Поверх всех окон"



Баги:
Сортировка IAT по номерам - не верная, если ее потыкать:
0, 1, 10, 100, 101...109, 11, 110 и т.д.
Наверное имеет смысл в нумерации 001, 002, 010 и т.д.
p.s.: этот баг справедлив ко всем сортировкам на листвью, поэтому нужно делать выравнивание по всем столбцам, чтобы его избежать


Как и многие другие PE-тулзы криво обрабатывает файлы, упакованные Upack by dwing
Для примера взял сам упаковщик WinUpack 0.39f. В характеристиках имеем:
Relocation stripped, Executable image, Line numbers stripped, Local symbols stripped, 32bit machine expected
Но вкладка с символами создается и она пустая. Таблица импорта обрабатывается криво:
Имеем:

Должно быть:



Открыл exe'шник ведьмака 3, при щелчке на вкладке Exceptions получил exception
Крашит короче)

https://www.sendspace.com/file/becakn witcher3.rar (11.64MB)
Если подождать подольше, то таблица заполняется и приложуха не вылетает, главное не щелкать. Парсинг файла работает из Main Thread'a, как я понимаю. Это не гуд. Нужно вывести в отдельный поток(и желательно с прогресс-баром где-нибудь внизу главного окна), чтобы не зависал гуй.

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 11 ноября 2019 15:45 New!
Цитата · Личное сообщение · #26

TryAga1n
1. Множественный выбор будет, уже есть в todo.
2. Отключение шапки сделаю, записал.
3. Освобождать сразу пока не получится, т.к. сведения из файла считываются не сразу все, а в момент перехода на вкладку. Но вопрос совместного доступа решается, как минимум редактирование извне будет, но без возможности удаления открытого файла.
3.1. Сделаю вместе с поддержкой share_write.
4. Сделаю настройку на запоминание, хотя в новом интерфейсе в ней уже не будет надобности.
5. Ок, постараюсь что-нибудь придумать с выбором цвета.
6. Сделаю, в todo записал.

Насчёт сортировки. Проблема мне известная, на сайте в описании программы указана, небольшая часть списков уже переведена на внутреннюю сортировку. Со временем переведу все.

WinUpack посмотрю, на упаковщиках действительно мало тестировал.

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

Большое спасибо Вам за развёрнутый ответ, все недостатки буду потихоньку устранять.

Ранг: 385.7 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 11 ноября 2019 19:00 New!
Цитата · Личное сообщение · #27

RamMerlabs пишет:
Но с некоторыми востребованными (по крайней мере мной ) возможностями, которых мне не удалось найти нигде более.

если на то пошло, впилите, пожалуйста, графический аналог linux-команды ldd для dll'лок из import table. Суть такова: сразу узнать из gui, список dll'к, которые отсутсвуют на компе у юзера, а не вставлять по одной, исходя из сообщений загрузчика Windows.
Алсо, как бонус - прога чекает названия процедур а-ля точка входа drm_pagui_doit не найдена в динамической библиотеке paul.dll

Ранг: 54.0 (постоянный)
Статус: Участник

Создано: 11 ноября 2019 19:31 New!
Цитата · Личное сообщение · #28

ELF_7719116
Идея интересная, такая функция была бы полезной. Но это вполне тянет на отдельную софтину или плагин к какой-нибудь из существующих.
И всё это не совсем соответствует назначению моей программулины - она всё же больше по "кишочкам" PE, нежели по скану чего-нибудь за пределами исследуемого файла на пользовательской ПеКарне.
Я конечно заметку себе оставил, но обещать ничего конкретного пока не буду.
Чем кстати старый добрый depends не подходит?

Ранг: 385.7 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 11 ноября 2019 20:01 New!
Цитата · Личное сообщение · #29

RamMerlabs
depends - тяжелая gui артиллерия. По мне, здорово в одном инструменте сразу получать всю нужную инфу - вывести список не найденных dll'лок/точек входа. Или хотя бы для начала подсветить их как в том же cff_explorer (который не работает, с точками входа dll'лок).
<< . 1 . 2 .
 eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS