Сейчас на форуме: -Sanchez-, 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 |
|
Создано: 15 октября 2019 20:27 · Поправил: difexacaw · Личное сообщение · #2 |
|
Создано: 15 октября 2019 23:52 · Поправил: RamMerlabs · Личное сообщение · #3 difexacaw Ну раз интересно - тестите на здоровье. [оффтоп] Я сэкономлю Вам время - ошибки там полюбому есть. И атаку можно провести. На суперсекретные сервера пeнтaгoнa и aнб. Уверен, у Вас непременно получится! И я очень удивлён, что Вы не написали до сих пор годный мотор (который никому не покажете, кроме как на скриншотах) для тестирования по-быстрому бруДфорсом прямо из кернель-мода. Как так??? [/оффтоп] Если серьёзно - не сочтите за труд, черкните баг-репорт потом. | Сообщение посчитали полезным: Gideon Vi |
|
Создано: 16 октября 2019 11:35 · Личное сообщение · #4 |
|
Создано: 16 октября 2019 20:12 · Личное сообщение · #5 |
|
Создано: 17 октября 2019 07:09 · Личное сообщение · #6 |
|
Создано: 17 октября 2019 20:28 · Поправил: difexacaw · Личное сообщение · #7 Alchemistry Твоим новостям лет десять давности, тогда искали ошибки в ядерном загрузчике и их было навалом. Но потом на это дело забили и не возвращались, так как эти ошибки интереса не представляют - поток может зависнуть в загрузчике(можешь подвесить ось простым путём - исчерпать системную память, вызвать не лимитируемый механизм, приводящий к аллокациям, eg: RegisterThreadTermPort()), либо вернётся с исключением. Толку от этого ноль. И речь шла как бы про юзер лоадер(сабж же юзермодный), про ядерный ничего небыло. ----- vx |
|
Создано: 18 октября 2019 20:40 · Поправил: RamMerlabs · Личное сообщение · #8 Обновление программы до версии 0.1.2 (2019-10-18): -Исправлено отображение иконки исследуемого файла на панели задач -Исправлено падение на 16-битных и иных MZ не-PE32 файлах -Добавлено отображение ошибок при загрузке файла и уведомление о нехватке прав для изменения ассоциаций -Оптимизация размера данных -Оптимизация скорости разбора таблиц ExceptionsData Тестирование на моей аппаратуре показало ускорение разбора таблицы Exceptions в худшем случае в ~5 раз, в основном в ~8.7 раза. Многопоточности пока ещё нет, на очень больших файлах (больше 100 МБ) GUI ещё подвисает (вплоть до 1-2 минут :-[ ). | Сообщение посчитали полезным: DimitarSerg, GPcH |
|
Создано: 19 октября 2019 23:25 · Поправил: RamMerlabs · Личное сообщение · #9 Обновление программы до версии 0.1.3 (2019-10-19): -Исправлен баг в разборе таблиц ExceptionsData для x64 Из-за чудовищной опечатки (edx вместо eax) некорректно работала функция разбора ExceptionsData для x64 на небольших файлах (на больших файлах значение edx начинало проходить через условие). Кроме того ещё на ~7% ускорена обработка вышеупомянутой таблицы. | Сообщение посчитали полезным: Orlyonok, Bronco |
|
Создано: 19 октября 2019 23:28 · Поправил: GPcH · Личное сообщение · #10 |
|
Создано: 19 октября 2019 23:36 · Поправил: RamMerlabs · Личное сообщение · #11 |
|
Создано: 20 октября 2019 10:57 · Личное сообщение · #12 |
|
Создано: 20 октября 2019 12:46 · Личное сообщение · #13 |
|
Создано: 31 октября 2019 19:07 · Поправил: RamMerlabs · Личное сообщение · #14 Обновление программы до версии 0.1.4 (2019-10-31): - Исправлены ошибки в разборе заголовков LSDA в таблице ExceptionsData - Добавлен разбор LSDA для C Builder версий 10.2 и выше - Добавлена возможность передачи имени файла через командную строку без дополнительных параметров - Исправлена мелкая ошибка в обработке имени файла - Добавлен список недавних файлов в меню - Структура файла настроек модифицирована без обратной совместимости - Добавлена поддержка файлов с любым размером оверлея (установщики и подобные) - Оптимизация части кода для работы с GUI - Неиспользуемые в исследуемом файле вкладки не отображаются - Добавлена поддержка HighDPI HighDPI пока доступен в режиме System, т.е. без поддержки смены DPI во время работы программы. topmo3 Теперь дополнительные ключи командной строки не требуются. | Сообщение посчитали полезным: TryAga1n, DICI BF, Bronco |
|
Создано: 09 ноября 2019 01:53 · Поправил: RamMerlabs · Личное сообщение · #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 |
|
Создано: 09 ноября 2019 06:07 · Личное сообщение · #16 |
|
Создано: 09 ноября 2019 08:09 · Поправил: Модератор · Личное сообщение · #17 difexacaw 10 лет назад ничего этого еще не было дурачок, а твои изыскания в винхп никого не интересуют ни сейчас ни тогда. Ну и тебе может и нет ничего интересного - ты же форумное трепло. RamMerlabs У edit боксов главного окна при dpi 144 верхняя граница не прорисовывается пока их не выбрать. Чтобы как-то структурировать отображение информации я бы предложил использовать кастомный деревоподобный компонент, например как тот что есть в processhacker, либо комбинацию из treeview слева и listview справа, наподобие regedit. От модератора: Вежливее, ещё вежливее. |
|
Создано: 09 ноября 2019 14:34 · Личное сообщение · #18 Bronco Оу, редактирование мне самому пока только снится. Сначала хочу переделать интерфейс (хорошо если к новому году успею) и доделать дизасм хотя бы для x86 и x64 (наброски для arm64 и ia64 будут очень долго ещё лишь набросками). Alchemistry Про edit понял, увидел у себя тоже. После переделки GUI их там не будет вовсе, так что если это не сильно режет глаза - пусть пока так побудет, ок? Насчёт GUI: вобщем так и будет - слева treeview, справа MDI со списками, вверху rebar с контролами для FLC, внизу statusbar с небольшой сводной инфой об образе. Совместный контрол tree-list (как в PH) хотелось бы вместо некоторых списков, но это со временем. Спасибо всем за интерес к программе и предложения\отзывы\критику! | Сообщение посчитали полезным: Hugo Chaves |
|
Создано: 10 ноября 2019 20:08 · Поправил: anony-mouse · Личное сообщение · #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 |
|
Создано: 10 ноября 2019 21:16 · Личное сообщение · #20 anony-mouse Hex-view и disasm уже в пути. Сейчас в вялотекущем режиме переделываю интерфейс и одновременный просмотр данных сразу в нескольких видах - основной ориентир. Дизасм будет попозже. Насчёт отображения всех доступных флагов подумаю, в todo записал. Про CFG и код в его битовой карте статью читал ранее. Можно конечно заморочиться с построением bitmap'ы по данным из GFID, но велик ли профит от такого подхода "сокрытия" кода? Хотя чисто из спортивного интереса и на всякий случай наверное можно прикрутить. А чем esc мешает? Если так принципиально - сделаю настройку на игнор esc в главном окне. |
|
Создано: 10 ноября 2019 21:24 · Личное сообщение · #21 > Можно конечно заморочиться с построением bitmap'ы Может это слишком. Думаю достаточно показать таблицу, как-то так: https://raw.githubusercontent.com/86hh/86hh.github.io/master/texts/cfg_images/cfg2_bearvsdb.png > А чем esc мешает? Нечаянно окно закрыл. Можно алерт добавить, уверенны ли вы итд. В любом случае, не так уж критично. |
|
Создано: 10 ноября 2019 21:35 · Личное сообщение · #22 anony-mouse >>Думаю достаточно показать таблицу Так это уже давно есть: Скрин из примера из той статьи: LoadConfig Directory разбирается вообще вся (ну ладно, Lock Prefix Table нету, но я её с 2000 винды и не встречал). Вас услышал, про esc придумаю что-нибудь. |
|
Создано: 10 ноября 2019 21:52 · Личное сообщение · #23 |
|
Создано: 10 ноября 2019 22:11 · Поправил: RamMerlabs · Личное сообщение · #24 |
|
Создано: 11 ноября 2019 08:30 · Поправил: TryAga1n · Личное сообщение · #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 Но вкладка с символами создается и она пустая. Таблица импорта обрабатывается криво: Имеем: Должно быть: Крашит короче) Если подождать подольше, то таблица заполняется и приложуха не вылетает, главное не щелкать. Парсинг файла работает из Main Thread'a, как я понимаю. Это не гуд. Нужно вывести в отдельный поток(и желательно с прогресс-баром где-нибудь внизу главного окна), чтобы не зависал гуй. |
|
Создано: 11 ноября 2019 15:45 · Личное сообщение · #26 TryAga1n 1. Множественный выбор будет, уже есть в todo. 2. Отключение шапки сделаю, записал. 3. Освобождать сразу пока не получится, т.к. сведения из файла считываются не сразу все, а в момент перехода на вкладку. Но вопрос совместного доступа решается, как минимум редактирование извне будет, но без возможности удаления открытого файла. 3.1. Сделаю вместе с поддержкой share_write. 4. Сделаю настройку на запоминание, хотя в новом интерфейсе в ней уже не будет надобности. 5. Ок, постараюсь что-нибудь придумать с выбором цвета. 6. Сделаю, в todo записал. Насчёт сортировки. Проблема мне известная, на сайте в описании программы указана, небольшая часть списков уже переведена на внутреннюю сортировку. Со временем переведу все. WinUpack посмотрю, на упаковщиках действительно мало тестировал. Про вкладку эксепшендата - так и есть, приложение пока однопоточное, проблема с ожиданием заполнения списка известная (на сайте программы в известных проблемах это тоже указано). Собственно сами данные подготавливаются достаточно быстро, процентов 90 времени уходит на заполнение Listview таким количеством строк, возможно переведу его на виртуальный режим. Но многопоточность будет, с прогрессбаром и/или с поэтапным заполнением списка по мере обработки. Вылетать там вроде не из-за чего, винда просто определяет приложение "подвисшим" (hung), т.к. не получает вовремя ответ на отправленное окну сообщение, и предлагает завершить задачу. Большое спасибо Вам за развёрнутый ответ, все недостатки буду потихоньку устранять. | Сообщение посчитали полезным: TryAga1n |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 11 ноября 2019 19:00 · Личное сообщение · #27 RamMerlabs пишет: Но с некоторыми востребованными (по крайней мере мной ) возможностями, которых мне не удалось найти нигде более. если на то пошло, впилите, пожалуйста, графический аналог linux-команды ldd для dll'лок из import table. Суть такова: сразу узнать из gui, список dll'к, которые отсутсвуют на компе у юзера, а не вставлять по одной, исходя из сообщений загрузчика Windows. Алсо, как бонус - прога чекает названия процедур а-ля точка входа drm_pagui_doit не найдена в динамической библиотеке paul.dll |
|
Создано: 11 ноября 2019 19:31 · Личное сообщение · #28 ELF_7719116 Идея интересная, такая функция была бы полезной. Но это вполне тянет на отдельную софтину или плагин к какой-нибудь из существующих. И всё это не совсем соответствует назначению моей программулины - она всё же больше по "кишочкам" PE, нежели по скану чего-нибудь за пределами исследуемого файла на пользовательской ПеКарне. Я конечно заметку себе оставил, но обещать ничего конкретного пока не буду. Чем кстати старый добрый depends не подходит? |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 11 ноября 2019 20:01 · Личное сообщение · #29 |
|
Создано: 23 ноября 2019 00:52 · Поправил: RamMerlabs · Личное сообщение · #30 Обновление программы до версии 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% точности ещё нет, поэтому буду рад любым проблемным образцам. anony-mouse, баг с перемещением при изменении размера окна исправлен. TryAga1n, несколько Ваших запросов постарался воплотить в настройках. Баг с разбором импорта под упаковщиком исправлен. Спасибо, что пнули - давно пора было переделать. | Сообщение посчитали полезным: DimitarSerg, Jupiter, ELF_7719116, mak, plutos, Bronco, TryAga1n, SReg, =TS=, DICI BF |
|
Создано: 23 ноября 2019 01:30 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов |