Сейчас на форуме: morgot, sashalogout (+3 невидимых)

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

Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 11 октября 2019 19:56 · Поправил: RamMerlabs
· Личное сообщение · #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.16 (2020-06-26): Скачать

| Сообщение посчитали полезным: 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, r_e, Jaa, stnt, ELF_7719116, Bad_guy, WELL, igorcauret, =TS=, dimon3d, anony-mouse, Artem_N, Jim DiGriz, Alchemistry


Ранг: 90.1 (постоянный), 90thx
Активность: 0.290.56
Статус: Участник

Создано: 22 декабря 2019 16:22
· Личное сообщение · #2

"сабж не превратится в такое же уг как педобир"
Все проще, сабж превратится в платный софт как обычно

-----
В облачке многоточия




Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 22 декабря 2019 16:46
· Личное сообщение · #3

Boostyq
Не вижу для этого никаких предпосылок. Даже donate-ware не рассматривается.
А уж чтобы требовать за ПО деньги нужно помимо наличия выдающегося и уникального функционала обеспечить и защиту этого самого функционала, а учитывая аудиторию пользователей, это должна быть как минимум какая-нибудь ВМ с аппаратным ключом и сканером сетчатки.
Так что не переживайте. Но за оценку перспективы спасибо



Ранг: 0.9 (гость)
Активность: 0.02=0.02
Статус: Участник

Создано: 22 декабря 2019 18:24
· Личное сообщение · #4

@RamMerlabs

>>Thanks for your feedback and sorry for the inconvenience. This is a temporary way for feedback, I will add an e-mail a bit later.
I will try to solve the problem of saving settings for portable mode in the next updates.

Thank you for accepting my suggestion. For me it was not a bug inconvenience- at least I discovered an interesting community. Happy holidays!



Ранг: 128.8 (ветеран), 21thx
Активность: 0.060.05
Статус: Участник

Создано: 22 декабря 2019 18:58 · Поправил: Hugo Chaves
· Личное сообщение · #5

RamMerlabs

Уважаемый Автор, добавьте поиск криптосигнатур, пожалуйста.

Я понимаю, что к сабжу это имеет весьма косвенное отношение ...



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 22 декабря 2019 20:54
· Личное сообщение · #6

Hugo Chaves пишет:
поиск криптосигнатур

Чтобы не делать велосипед, можно прикрутить поддержку плагинов от PEiD'a и юзать Kanal




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 22 декабря 2019 22:58
· Личное сообщение · #7

Hugo Chaves пишет:
поиск криптосигнатур


CryptoCheckers



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 23 декабря 2019 19:25 · Поправил: RamMerlabs
· Личное сообщение · #8

smaragdus
You are welcome!

Hugo Chaves
Обещать ничего не буду насчёт детекта криптосигнатур. Мне не хотелось бы забивать программу тоннами словарей (плюс ещё и поддерживать их в актуальном состоянии), а в случае с детектом криптосигнатур объём их наверное будет сопоставим с размером всей программы.

TryAga1n
О плагинах разговаривали чуть ранее в этой теме, их не будет.

to All:
Если у кого-то Microsoft Defender детектил прогу - обновите пожалуйста базы дефендера, это ложное срабатывание. Я отправлял им абузу, по состоянию на 19:05 МСК программа больше не детектится.
Аналогично для пользователей Avira (и F-Secure, он базы авиры пользует) - они тоже прислали отчёт, что детект был ложным и скорректировали базы.



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 23 декабря 2019 20:04
· Личное сообщение · #9

RamMerlabs
Насчет криптосигнатур. Прикрути к проге yara, сигны можно взять тут.
Имхо это самый простой и относительно легко реализуемый метод.

-----
xchg dword [eax], eax


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

Ранг: 7.1 (гость), 6thx
Активность: 0.040.01
Статус: Участник

Создано: 23 декабря 2019 21:48
· Личное сообщение · #10

RamMerlabs
Заметил, что некоторые программы (игры) не запускаются на Windows XP, хотя и 32-битные.
Долго не мог понять, в чём причина. Ошибка была типа "Файл не является приложением Win32"

Оказалось, дело в параметре "Major OS version", или "Major Subsystem version" (не разобрался, какой из них, т.к. они обычно имеют одинаковое значение)
В-общем, там было значение 6.0, что соответствует Windows Vista (или выше), поэтому и не запускалось ничего.

К чему это я. Неплохо было бы добавить в вашей программе в описание этих параметров название требуемой версии Windows
Например,
5.1 - Windows XP 32-bit
5.2 - Windows XP 64-bit
6.0 - Windows Vista
и так далее

Список версий Windows
https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 24 декабря 2019 01:01 · Поправил: RamMerlabs
· Личное сообщение · #11

lx60
>>не разобрался, какой из них
Это Subsystem Version.
Я намеренно не стал добавлять подобное описание, т.к. привычные значения subsystemversion 5.1, 5.2, 6.0, 6.3 и 10.0 и так известны всем, кто знает об их существовании. Разве что можно добавиь реакцию в журнале загрузки на отличный от привычного номер подсистемы.
Строго говоря, то, что цифры в версии подсистемы такие же как мажорный и минорный номера версии конкретной винды - совпадение. Эти цифры указывают на минимальную версию подсистемы (не версию операционной системы - это параметры Major/Minor OS Version), требуемой для загрузки образа. И, сделав описание на известные номера версий винды, можно это описание просто игнорировать, потому что образ с subsystemversion например 5.99 не соответсвует ни одной из версий винды, но будет валидным и спокойно обработается той же вистой и выше. Для win10 ещё больше вариантов несуществующих версий винды, значение которых будучи записанным в subsystemversion не вызовет нарекания.
И кстати, 5.2 - это не хп64, а server2003. хп64 грубо говоря это та же 2003 с включенными по-умолчанию темами оформления и выключенными сервисами.

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

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 24 декабря 2019 01:21
· Личное сообщение · #12

RamMerlabs
Продолжая тему мелких хотелок, есть вариант показывать версии microsoft redistributable, которые нужно скачать для запуска. Помнится для старых пакетов вылазит мсжбокс про неправильную параллельную конфигурацию.

Возможно, есть смысл добавить анализ "мусора" в pe-хидере, который не попадает в mz/pe-структуры. Например, некоторые проты оставляют там номера своих версий, сигнатуры или другие артефакты. Или из других секций что-то ссылается на этот "мусор" в хидере.

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

Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 24 декабря 2019 12:46
· Личное сообщение · #13

ELF_7719116
На версию vc redistr иногда ссылается манифест (при его наличии), запишу себе в todo его разбор. Если смотреть только по импортируемым библиотекам (MSVCR100.dll и т.д.), то большой надежности не получится - имя файла может быть одно и то же, а циферки в версии могут отличаться (номер сборки или после сервиспака). Мне попадались программы, которые были заточены под версию msvcr не ниже определённого билда (то есть с некоторыми исправлениями), с msvcr меньшей версии падали где им вздумается. Но имя DLL оставалось одинаковым.
Насчёт анализов "мусора" я не уверен - вариаций его может быть куча, это опять получится детектор а-ля peid. Можно просто определить его наличие и выводить сырым хексом.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 24 декабря 2019 17:48
· Личное сообщение · #14

RamMerlabs пишет:
Насчёт анализов "мусора" я не уверен - вариаций его может быть куча

Хотя бы сигнализировать о наличии таких артефактов в хидере.
RamMerlabs пишет:
Но имя DLL оставалось одинаковым.

Скорее всего, различие в количестве экспортируемых функций.



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 24 декабря 2019 18:26
· Личное сообщение · #15

ELF_7719116
>>Хотя бы сигнализировать о наличии таких артефактов в хидере.
Ааа, это будет. Точнее частично уже сейчас есть в журнале загрузки. Проверки на пересечение заголовков, на "дыры" между ними. К следующей версии планирую добавить ещё.

>>Скорее всего, различие в количестве экспортируемых функций.
Не, тогда бы загрузчик сразу рапортовал о том, что "точка входа в процедуру ХХХ не найдена".
В приведённом примере проблема была именно в корявом софте (полу-корпоративная разработка). Но тем не менее, инцидент имел место быть.



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 28 декабря 2019 00:03 · Поправил: RamMerlabs
· Личное сообщение · #16

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


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

Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 10 января 2020 18:17 · Поправил: RamMerlabs
· Личное сообщение · #17

Обновление программы до версии 0.1.10 (2020-01-10):
- Добавлено отображение перенаправления на другую UNWIND_INFO между managed/unmanaged code в таблице ExceptionsData для x64
- Добавлен разбор таблиц и метаданных dotNET


| Сообщение посчитали полезным: ==DJ==[ZLO], Adler, mak


Ранг: 74.4 (постоянный), 76thx
Активность: 0.050.1
Статус: Участник

Создано: 10 января 2020 20:46 · Поправил: ==DJ==[ZLO]
· Личное сообщение · #18

Signature исчезла в новой версии. Или Вы её удалили?


Добавлено спустя 1 часов 15 минут
Просьба - если вы делаете changelog употребляйте + и - или +- как говорится прибыло убыло. Или другие символы) Не сочтите за критику ). Удобно мб будет?)



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 10 января 2020 21:02 · Поправил: RamMerlabs
· Личное сообщение · #19

==DJ==[ZLO]
Сама структура IMAGE_NT_HEADERS не отображается - из-за одного поля не хотелось выделять отдельный список. А вот значение сигнатуры по соответствующему адресу выводится в дос-заголовке в описании поля 'address of new exe header': "PE".

>>Удобно мб будет?)
Звиняюсь, не сразу заметил добавленную часть сообщения.
Это запросто. В readme, который с программой идёт, так и делаю.
На самом деле список изменений не всегда получается полным - иногда случается так, что одним билдом исправляется/добавляется несколько совсем разных вещей и что-то я забываю описать в комментарии к сборке. Особенно если какой-то код многократно переносится из приватной отладочно-экспериментальной ветки в публичную и между переносами вносятся исправления.



Ранг: 145.8 (ветеран), 190thx
Активность: 0.140.36
Статус: Участник

Создано: 11 января 2020 05:52
· Личное сообщение · #20

RamMerlabs

Как насчет добавить возможность изменять размер области дополнительного листвью справа мышью (например см вкладки Import/BaseRelocations)? Сейчас он фиксированного размера, что несколько неудобно. Еще я бы предложил резольвить apiset и показывать его модуль в списке под самим аписетом.



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 11 января 2020 15:21
· Личное сообщение · #21

Alchemistry
Похоже Вы имеете ввиду сплиттер? Если так, он уже пишется - будет вертикальный между treeview и списками и горизонтальный между списками, если их более одного.

>>резольвить apiset и показывать его модуль в списке под самим аписетом
Спасибо, хорошая идея, тем более и код под это дело уже имеется в другой программке. Только отображаться наверное будет отдельной колонкой, а не дополнительной строкой.



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 30 января 2020 21:26 · Поправил: RamMerlabs
· Личное сообщение · #22

Обновление программы до версии 0.1.11 (2020-01-30):
[#] Исправлена ошибка разбора старой версии таблицы отложенного импорта
[#] Небольшая оптимизация функций перевода числа в строку
[+] Добавлен разбор таблицы Native Import Sections (ReadyToRun, NGEN)
[+] Добавлен разбор таблицы MethodDef EntryPoints (ReadyToRun)
[#] Небольшая оптимизация структуры хранения настроек
[#] Небольшая оптимизация сортировки списков
[#] Исправлено копирование в буфер обмена больших списков (более 100000 строк)
[#] Исправлена ошибка загрузки после drag&drop ярлыка исследуемого файла на файл программы
[+] Обновлённый диалог настроек программы
[+] Добавлены несколько новых настроек
[#] Оптимизация FLC
[#] Переделан механизм разбора таблиц метаданных .NET для быстрого доступа к любым полям, строкам, таблицам
[+] Добавлено описание токена метаданных .NET в некоторых таблицах


| Сообщение посчитали полезным: plutos, mak, DimitarSerg, SReg, linhanshi, Hugo Chaves, LinXP, DICI BF

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 31 января 2020 09:16
· Личное сообщение · #23

h__p://prntscr.com/qvf429 ?



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 31 января 2020 12:32 · Поправил: RamMerlabs
· Личное сообщение · #24

Medsft
Так и есть. В некоторых таблицах также есть столбцы, значения в которых ссылаются на строки в других таблицах (Rid), в заголовках таких столбцов указано название таблицы, например #TypeDef, #Method, #Field, #Assembly и т.д. Кроме того, в столбцах, отображающих token метаданных, отмечается название таблицы и номер строки (или текстовое описание, если доступно и включено в настройках программы), на которые ссылается token.
Сигнатуры типов пока не декодируются, в сыром виде выводится длина записи (первый байт) и сама сигнатура (если её длина не превышает указанной в настройках программы - "кол-во байт в hex-виде в описании", иначе выводится её оффсет в Blob).
Флаги в таблицах их предусматривющих пока тоже не декодируются - скорее всего для них будет отдельное окно, непосредственно в списке просто не вместится всё описание.
Если есть какие-то замечания - буду рад услышать, т.к. в среде .net я пока новичок



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 31 января 2020 15:56
· Личное сообщение · #25

RamMerlabs пишет:
Если есть какие-то замечания - буду рад услышать, т.к. в среде .net я пока новичок

найди на просторах NetPe утиль, если сможешь организовать выдачу NET данных
в том же обьеме будет более чем (там все крайне неудобно но если покопаться выдача более чем)
h__ps://dropmefiles.com/hMNzh (исходники есть если что)
NET там чутка спрятаны (идешь CLR а там load)

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

Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 31 января 2020 17:38 · Поправил: RamMerlabs
· Личное сообщение · #26

Medsft
Утилька эта практически на каждом втором (если даже не чаще) PE из проверяемых выбрасывает исключение (хотя ничего особенного в тех PE нет - файлы нетронуты после сборки) и отказывается разбирать те или иные данные, но из тех PE, что удалось открыть, понять, что в её выдаче такого интересного - мне не удалось. Таблицы метаданных - такой же вывод как в том же CFFExplorer и его последователях, ориентированный на работу с отдельной строкой. Чего я хочу избежать.
Ну и просто в виде замечаний в пустоту. Редактирование тех же токенов, например, таблица typeref: поле ResolutionScope, его тип предполагает кодирование токена для таблиц Module, ModuleRef, AssemblyRef и TypeRef и никаких других, утилита при редактировании предлагает любую таблицу и даже безмолвно делает вид, что сохраняет результат (нет). Большие таблицы кстати вообще полностью не вмещаются - в районе 9500h элементов обрыв.
На что всё таки ориентироваться в ней?




Ранг: 74.4 (постоянный), 76thx
Активность: 0.050.1
Статус: Участник

Создано: 31 января 2020 22:43 · Поправил: ==DJ==[ZLO]
· Личное сообщение · #27


Как вызвать такое: Открываем файл с ресурсами Dialog , нажимаем показать свойства PE-ресурса. (Выскакивает Диалог окно) берём второй файл и дропаем в прогу . Опять нажимаем показать Dialog на открывшейся форме и вуаля.
---зы---
Надо как бы не давать дропать или же когда дропаем, закрывать свойства PE-ресурса.
RamMerlabs пишет:
Логичнее будет закрывать этот диалог при обработке нового файла.

Это как бы и имелось ввиду:s1))) Дерзате:s3 Удачи Вам.

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

Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 31 января 2020 23:04 · Поправил: RamMerlabs
· Личное сообщение · #28

==DJ==[ZLO]
Ого, спасибо!
Логичнее будет закрывать этот диалог при обработке нового файла.

Добавлено:
Исправил, попутно ещё пару схожих багов изловил. Но поскольку сценарий воспроизведения ошибки не самый распространённый, новую версию пока не буду выкладывать до накопления планируемых обновлений. Если сильно нужен исправленный вариант - напишите, размещу здесь просто отдельно EXEшник.




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 03 февраля 2020 05:54 · Поправил: plutos
· Личное сообщение · #29

Может тупой вопрос, но как именно использовать Debug -> CodeView option?
Вижу, что там появляется pdb file, поскольку он присутствует рядом с .exe, но что делать дальше не пойму. Или это только задел на будущее?

-----
Give me a HANDLE and I will move the Earth.




Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 03 февраля 2020 12:20 · Поправил: RamMerlabs
· Личное сообщение · #30

plutos
Это ж просто информация из debug-директории.
В целом она используется для связывания PE с соответствующим PDB указанием имени файла и уникального "штампа" отладчику. Отладчик при поиске нужного pdb сверяет тот самый "штамп" (GUID) - он прописывается и в самом pdb.
PEAnatomist пока что просто показывает этот набор данных, как впрочем и другие наборы из debug-директории. Работа с PDB планируется, но т.к. формат очень скудно документирован и "слегка" переполнен излишествами в своём устройстве, то собственный парсер для него пишется очень медленно. А готовый DIA использовать совсем неинтересно



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 03 февраля 2020 15:52
· Личное сообщение · #31

RamMerlabs
PDB в исходниках вроде выкладывали на гитхабе.

-----
старый пень



<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
 eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати