Сейчас на форуме: morgot, sashalogout (+3 невидимых) |
eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
Посл.ответ | Сообщение |
|
Создано: 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% в зависимости от ряда условий) ничего не пишет, не отправляет. Ознакомиться подробнее с возможностями программы и скачать её можно на | Сообщение посчитали полезным: 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 |
|
Создано: 22 декабря 2019 16:22 · Личное сообщение · #2 |
|
Создано: 22 декабря 2019 16:46 · Личное сообщение · #3 Boostyq Не вижу для этого никаких предпосылок. Даже donate-ware не рассматривается. А уж чтобы требовать за ПО деньги нужно помимо наличия выдающегося и уникального функционала обеспечить и защиту этого самого функционала, а учитывая аудиторию пользователей, это должна быть как минимум какая-нибудь ВМ с аппаратным ключом и сканером сетчатки. Так что не переживайте. Но за оценку перспективы спасибо |
|
Создано: 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! |
|
Создано: 22 декабря 2019 18:58 · Поправил: Hugo Chaves · Личное сообщение · #5 |
|
Создано: 22 декабря 2019 20:54 · Личное сообщение · #6 |
|
Создано: 22 декабря 2019 22:58 · Личное сообщение · #7 |
|
Создано: 23 декабря 2019 19:25 · Поправил: RamMerlabs · Личное сообщение · #8 smaragdus You are welcome! Hugo Chaves Обещать ничего не буду насчёт детекта криптосигнатур. Мне не хотелось бы забивать программу тоннами словарей (плюс ещё и поддерживать их в актуальном состоянии), а в случае с детектом криптосигнатур объём их наверное будет сопоставим с размером всей программы. TryAga1n О плагинах разговаривали чуть ранее в этой теме, их не будет. to All: Если у кого-то Microsoft Defender детектил прогу - обновите пожалуйста базы дефендера, это ложное срабатывание. Я отправлял им абузу, по состоянию на 19:05 МСК программа больше не детектится. Аналогично для пользователей Avira (и F-Secure, он базы авиры пользует) - они тоже прислали отчёт, что детект был ложным и скорректировали базы. |
|
Создано: 23 декабря 2019 20:04 · Личное сообщение · #9 RamMerlabs Насчет криптосигнатур. Прикрути к проге yara, сигны можно взять Имхо это самый простой и относительно легко реализуемый метод. ----- xchg dword [eax], eax | Сообщение посчитали полезным: Alchemistry |
|
Создано: 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 |
|
Создано: 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.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 24 декабря 2019 01:21 · Личное сообщение · #12 RamMerlabs Продолжая тему мелких хотелок, есть вариант показывать версии microsoft redistributable, которые нужно скачать для запуска. Помнится для старых пакетов вылазит мсжбокс про неправильную параллельную конфигурацию. Возможно, есть смысл добавить анализ "мусора" в pe-хидере, который не попадает в mz/pe-структуры. Например, некоторые проты оставляют там номера своих версий, сигнатуры или другие артефакты. Или из других секций что-то ссылается на этот "мусор" в хидере. | Сообщение посчитали полезным: mak |
|
Создано: 24 декабря 2019 12:46 · Личное сообщение · #13 ELF_7719116 На версию vc redistr иногда ссылается манифест (при его наличии), запишу себе в todo его разбор. Если смотреть только по импортируемым библиотекам (MSVCR100.dll и т.д.), то большой надежности не получится - имя файла может быть одно и то же, а циферки в версии могут отличаться (номер сборки или после сервиспака). Мне попадались программы, которые были заточены под версию msvcr не ниже определённого билда (то есть с некоторыми исправлениями), с msvcr меньшей версии падали где им вздумается. Но имя DLL оставалось одинаковым. Насчёт анализов "мусора" я не уверен - вариаций его может быть куча, это опять получится детектор а-ля peid. Можно просто определить его наличие и выводить сырым хексом. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 24 декабря 2019 17:48 · Личное сообщение · #14 |
|
Создано: 24 декабря 2019 18:26 · Личное сообщение · #15 ELF_7719116 >>Хотя бы сигнализировать о наличии таких артефактов в хидере. Ааа, это будет. Точнее частично уже сейчас есть в журнале загрузки. Проверки на пересечение заголовков, на "дыры" между ними. К следующей версии планирую добавить ещё. >>Скорее всего, различие в количестве экспортируемых функций. Не, тогда бы загрузчик сразу рапортовал о том, что "точка входа в процедуру ХХХ не найдена". В приведённом примере проблема была именно в корявом софте (полу-корпоративная разработка). Но тем не менее, инцидент имел место быть. |
|
Создано: 28 декабря 2019 00:03 · Поправил: RamMerlabs · Личное сообщение · #16 Обновление программы до версии 0.1.9 (2019-12-27): - Оптимизированы некоторые внутренние форматы данных - Исправлен способ сохранения настроек, теперь механизм такой: -- если отсутствуют файлы настроек рядом с программой и в %appdata%, то файл настроек будет создан рядом с программой; -- если файла настроек нет рядом с программой и директория недоступна для записи, то сохранение произойдёт в %appdata%; -- если имеется валидный файл настроек рядом с программой - настройки всегда считываются оттуда, сохранение настроек производится, если файл доступен на запись; -- если файл настроек уже есть в %appdata%, то для чтения/записи настроек всегда используется он. - Скрываемые уменьшением значения "Number Of RVA And Sizes" директории при их наличии помечаются серым цветом - Усовешенствована сортировка списков | Сообщение посчитали полезным: SReg, DICI BF, Jupiter |
|
Создано: 10 января 2020 18:17 · Поправил: RamMerlabs · Личное сообщение · #17 Обновление программы до версии 0.1.10 (2020-01-10): - Добавлено отображение перенаправления на другую UNWIND_INFO между managed/unmanaged code в таблице ExceptionsData для x64 - Добавлен разбор таблиц и метаданных dotNET | Сообщение посчитали полезным: ==DJ==[ZLO], Adler, mak |
|
Создано: 10 января 2020 20:46 · Поправил: ==DJ==[ZLO] · Личное сообщение · #18 |
|
Создано: 10 января 2020 21:02 · Поправил: RamMerlabs · Личное сообщение · #19 ==DJ==[ZLO] Сама структура IMAGE_NT_HEADERS не отображается - из-за одного поля не хотелось выделять отдельный список. А вот значение сигнатуры по соответствующему адресу выводится в дос-заголовке в описании поля 'address of new exe header': "PE". >>Удобно мб будет?) Звиняюсь, не сразу заметил добавленную часть сообщения. Это запросто. В readme, который с программой идёт, так и делаю. На самом деле список изменений не всегда получается полным - иногда случается так, что одним билдом исправляется/добавляется несколько совсем разных вещей и что-то я забываю описать в комментарии к сборке. Особенно если какой-то код многократно переносится из приватной отладочно-экспериментальной ветки в публичную и между переносами вносятся исправления. |
|
Создано: 11 января 2020 05:52 · Личное сообщение · #20 |
|
Создано: 11 января 2020 15:21 · Личное сообщение · #21 Alchemistry Похоже Вы имеете ввиду сплиттер? Если так, он уже пишется - будет вертикальный между treeview и списками и горизонтальный между списками, если их более одного. >>резольвить apiset и показывать его модуль в списке под самим аписетом Спасибо, хорошая идея, тем более и код под это дело уже имеется в другой программке. Только отображаться наверное будет отдельной колонкой, а не дополнительной строкой. |
|
Создано: 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 |
|
Создано: 31 января 2020 09:16 · Личное сообщение · #23 |
|
Создано: 31 января 2020 12:32 · Поправил: RamMerlabs · Личное сообщение · #24 Medsft Так и есть. В некоторых таблицах также есть столбцы, значения в которых ссылаются на строки в других таблицах (Rid), в заголовках таких столбцов указано название таблицы, например #TypeDef, #Method, #Field, #Assembly и т.д. Кроме того, в столбцах, отображающих token метаданных, отмечается название таблицы и номер строки (или текстовое описание, если доступно и включено в настройках программы), на которые ссылается token. Сигнатуры типов пока не декодируются, в сыром виде выводится длина записи (первый байт) и сама сигнатура (если её длина не превышает указанной в настройках программы - "кол-во байт в hex-виде в описании", иначе выводится её оффсет в Blob). Флаги в таблицах их предусматривющих пока тоже не декодируются - скорее всего для них будет отдельное окно, непосредственно в списке просто не вместится всё описание. Если есть какие-то замечания - буду рад услышать, т.к. в среде .net я пока новичок |
|
Создано: 31 января 2020 15:56 · Личное сообщение · #25 RamMerlabs пишет: Если есть какие-то замечания - буду рад услышать, т.к. в среде .net я пока новичок найди на просторах NetPe утиль, если сможешь организовать выдачу NET данных в том же обьеме будет более чем (там все крайне неудобно но если покопаться выдача более чем) h__ps://dropmefiles.com/hMNzh (исходники есть если что) NET там чутка спрятаны (идешь CLR а там load) | Сообщение посчитали полезным: mak |
|
Создано: 31 января 2020 17:38 · Поправил: RamMerlabs · Личное сообщение · #26 Medsft Утилька эта практически на каждом втором (если даже не чаще) PE из проверяемых выбрасывает исключение (хотя ничего особенного в тех PE нет - файлы нетронуты после сборки) и отказывается разбирать те или иные данные, но из тех PE, что удалось открыть, понять, что в её выдаче такого интересного - мне не удалось. Таблицы метаданных - такой же вывод как в том же CFFExplorer и его последователях, ориентированный на работу с отдельной строкой. Чего я хочу избежать. Ну и просто в виде замечаний в пустоту. Редактирование тех же токенов, например, таблица typeref: поле ResolutionScope, его тип предполагает кодирование токена для таблиц Module, ModuleRef, AssemblyRef и TypeRef и никаких других, утилита при редактировании предлагает любую таблицу и даже безмолвно делает вид, что сохраняет результат (нет). Большие таблицы кстати вообще полностью не вмещаются - в районе 9500h элементов обрыв. На что всё таки ориентироваться в ней? |
|
Создано: 31 января 2020 22:43 · Поправил: ==DJ==[ZLO] · Личное сообщение · #27 Как вызвать такое: Открываем файл с ресурсами Dialog , нажимаем показать свойства PE-ресурса. (Выскакивает Диалог окно) берём второй файл и дропаем в прогу . Опять нажимаем показать Dialog на открывшейся форме и вуаля. ---зы--- Надо как бы не давать дропать или же когда дропаем, закрывать свойства PE-ресурса. RamMerlabs пишет: Логичнее будет закрывать этот диалог при обработке нового файла. Это как бы и имелось ввиду:s1))) Дерзате:s3 Удачи Вам. | Сообщение посчитали полезным: RamMerlabs |
|
Создано: 31 января 2020 23:04 · Поправил: RamMerlabs · Личное сообщение · #28 ==DJ==[ZLO] Ого, спасибо! Логичнее будет закрывать этот диалог при обработке нового файла. Добавлено: Исправил, попутно ещё пару схожих багов изловил. Но поскольку сценарий воспроизведения ошибки не самый распространённый, новую версию пока не буду выкладывать до накопления планируемых обновлений. Если сильно нужен исправленный вариант - напишите, размещу здесь просто отдельно EXEшник. |
|
Создано: 03 февраля 2020 05:54 · Поправил: plutos · Личное сообщение · #29 |
|
Создано: 03 февраля 2020 12:20 · Поправил: RamMerlabs · Личное сообщение · #30 plutos Это ж просто информация из debug-директории. В целом она используется для связывания PE с соответствующим PDB указанием имени файла и уникального "штампа" отладчику. Отладчик при поиске нужного pdb сверяет тот самый "штамп" (GUID) - он прописывается и в самом pdb. PEAnatomist пока что просто показывает этот набор данных, как впрочем и другие наборы из debug-директории. Работа с PDB планируется, но т.к. формат очень скудно документирован и "слегка" переполнен излишествами в своём устройстве, то собственный парсер для него пишется очень медленно. А готовый DIA использовать совсем неинтересно |
|
Создано: 03 февраля 2020 15:52 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов |