Сейчас на форуме: 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 |
|
Создано: 29 апреля 2020 14:37 · Поправил: dosprog · Личное сообщение · #2 RamMerlabs пишет: А моя утилитка на sp2 как себя чувствует? Да вроде шевелится без странностей. Покорёженные дампы, правда, ей не подсовывал, но если там и есть косяки, то они проявятся на любой системе. --Добавлено-- Ну, вот собственно: Заголовки дампа читаются без падений, а вот на чтении ресурсов затык (ну, это как раз нормально) - ненормально, что затык этот сопровождается мёртвым зависанием. Так и надо было тестировать эту софтину. --Конец добавленного-- VOLKOFF пишет: Обычно когда цикл жизни продукта завершается для тестов используют последнюю версию, поэтому и появился вопрос. Так последняя и была SP2, так оно выглядит. VOLKOFF пишет: В последний пак надергали по мелочи из Висты Вот именно. И не по мелочи. Если бы они не занимались усиленно к тому моменту вистой, тогда и можно было бы о чём-то говорить. Обновление SP2->SP3 весило больше 300 Мб, в запакованном виде. Это по факту вообще новая система. Ну, обновление SP1->SP2 весило не меньше, но как-то прошло без особых траблов. VOLKOFF пишет: даже в мсдн отсылки всегда идут на трешку. Ну, это явный послабон они себе сделали. .. Но это всё имхо. Можно списать на тупо консерватизм. [offtop] --Добавлено2-- По поводу SP2 -> SP3, -- вот, что официально об этом пишут: В Windows XP SP3 добавлено ряд новых функций: Опциональный UI средств настройки безопасности – делает структуру Центра Безопасности более понятной и интуитивной во избежание проблем, связанных с ошибочными настройками безопасности. Улучшенная безопасность данных политик администрирования и служб – улучшение связано с System Center Essentials, специально для SP3. Определение маршрутизаторов-“Черных дыр” – определяет маршрутизаторы, которые отбрасывают пакеты, которые нельзя фрагментировать, не сообщая о своих действиях; в Windows XP SP3 задействован по умолчанию. Криптографический модуль Microsoft – данный криптографический модуль (FIPS.SYS) отвечает требованиям Федерального Стандарта Обработки Информации FIPS 140-1. Защита доступа к сети (NAP) – Платформа применения политик, встроенная в операционные системы Windows Vista, Windows 2008 (beta), а теперь и в Windows XP Service Pack 3, которая обеспечивает повышенную безопасность сети за счет соответствия требованиям по поддержанию работоспособности системы. В Windows XP появились еще некоторые возможности, которые ранее были доступны в качестве отдельных компонентов, теперь они стали частью пакета обновлений: Фоновая интеллектуальная служба передачи (BITS) 2.5 Простое обновление политики IPsec Службы Microsoft Core XML Services 6.0 Консоль управления Microsoft (MMC) 3.0 Служба управления цифровыми удостоверениями (DIMS) Протокол Peer Name Resolution Protocol 2.1 Защищенный доступ Wi-Fi (WPA) 2 Установщик Windows 3.1 v2 Но в отличие от SP2, SP3 не несет в себе никаких новых важных особенностей, с точки зрения конечного пользователя. Он включает в себя несколько сотен исправлений, которые Microsoft выпустила с момента появления Windows XP. Почитать обсуждение и статьи на эту тему можно здесь: http://www.softboard.ru/lofiversion/index.php/t46760.html Из всего этого великолепия реально необходимое только вот это: Защищенный доступ Wi-Fi (WPA) 2 , который ранее был доступен в качестве отдельного компонента - а оно скачивается и устанавливается отдельным пакетом и работает нормально. Весит аж 3Мб (три мегабайта). это KB917021-x86_WinXP_SP2. И кстати, на микрософтовском сайте пяток лет назад эту раздачу зарубили. Мне, когда понадобилось, RUS найти не удалось, а найденную ENU пришлось уговаривать установиться. Но установилась и работает вполне ничего себе. А вот новый Установщик Windows 3.1 v2 привёл к тому, что куча налепленных инсталляций софта стала требовать именно наличие этого установщика, и зачастую всё решалось тупо извлечением рабочих файлов из инсталляшки с помощью всяких посторонних инструментов. Софт же потом работал без вопросов. [/offtop] |
|
Создано: 29 апреля 2020 16:09 · Личное сообщение · #3 dosprog >>- ненормально, что затык этот сопровождается мёртвым зависанием. Действительно ненормально. Вобщем-то во всему коду при наличии цикла прохода по смапленному файлу есть проверки на выход за пределы маппинга и положительный шаг прироста. Т.е. рано или поздно в разумное время цикл споткнётся об условие или break. Обычно этим закрывается процентов 80 нештатных ситуаций. Остальные ситуации контекстно-зависимы от структур данных, но тоже вполне формализуемы. Похоже, что какое-то условие я не учёл. Не могли бы Вы показать пример файла, на котором возникает висяк? Спасибо! |
|
Создано: 29 апреля 2020 16:36 · Поправил: dosprog · Личное сообщение · #4 Да вот, пожалуйста: Упоминавшаяся тут выше утиль PPEE при открытии этого файла просто сворачивается и тихо завершается. Добавлено спустя 39 минут RamMerlabs пишет: Вобщем-то во всему коду при наличии цикла прохода по смапленному файлу есть проверки на выход за пределы маппинга и положительный шаг прироста. Т.е. рано или поздно в разумное время цикл споткнётся об условие или break. Обычно этим закрывается процентов 80 нештатных ситуаций. Остальные ситуации контекстно-зависимы от структур данных, но тоже вполне формализуемы. )) Паслуш, ты только вот не обижайся да. Не мудри с образом в памяти, а выполняй реальное чтение реального файла на диске - в случае корявых данных система тебе вернёт ошибку при сикании или чтении. вот тогда об этой ошибке надо доложить юзеру (только придумать, как бы это сделать тактичней))) - и всё на этом. Это и будет нормальной разумной формализацией. | Сообщение посчитали полезным: RamMerlabs |
|
Создано: 29 апреля 2020 18:25 · Личное сообщение · #5 dosprog >>ты только вот не обижайся да. >>Не мудри с образом в памяти, а выполняй реальное чтение реального файла на диске Дык че тут обижаться на конструктивную критику. Идея про отказ от маппинга была озвучена ещё на самой первой странице, я от этой затеи не отказываюсь. Тем более что с появлением поддержки того же LIB-формата есть далеко ненулевая вероятность нарваться на файл более 2 Гб (даже более ~1.4 Гб, часть АП уже занята ведь), который не получится смапить целиком (без костылей и извращений) в АП 32битного процесса. И в один прекрасный день прямое чтение из файла делать всё равно придётся. На данный момент ограничения маппинга не сильно мешают остальному коду, а проверка границ чтения совсем не затратна - пара cmp регистра и переменной из кучи и пара jxx ничем не будет отличаться от такого же cmp на возвращаемое значение после readfile. Конкретно в случае с Вашим примером (ну и таблицей ресурсов в целом) дело как раз совсем не в границах чтения, а в том, что вместо IMAGE_RESOURCE_DIRECTORY получаем что попало. И его как-то надо отличать от нормальных данных. Вот здесь одна из проверок в моей программке и даёт некорректный результат, заставляя цикл крутиться снова и снова. И тут ещё сыграло роль то, что ресурсы у меня парсятся не рекурсивно, иначе было хотя бы переполнение стека |
|
Создано: 29 апреля 2020 19:03 · Поправил: dosprog · Личное сообщение · #6 |
|
Создано: 29 апреля 2020 19:11 · Личное сообщение · #7 RamMerlabs Необходимо отображать, иначе данные окажутся не соответствующими реальности(при загрузке, а без загрузки данные не используются..) ----- vx |
|
Создано: 29 апреля 2020 19:29 · Поправил: RamMerlabs · Личное сообщение · #8 difexacaw Этой фишке с двойными данными сто лет в обед. Мне только интересно как в контексте задачи дампера pe-файлов вы будете отображать (ведь насколько я понимаю, речь о SEC_IMAGE, а не SEC_COMMIT) например ARM64 образ под x86-виндой. Ведь нам не интересен дампер, который будет принимать на вход только x86, не так ли? С SEC_IMAGE штатный загрузчик пошлёт и будет прав. Ведь неспроста даже ImageBase у 64битных образов рекомендуется выставлять за пределы 4 гб (0x180000000 и 0x140000000), хоть и особые компоновщики (из mingw кажется) плевать на всё это хотели. Поэтому для случаев с "двойными" данными нужен свой загрузчик, который независимо от целевой архитектуры образа построит эдакий layout секций в памяти и позволит ходить по ним. И совершенно без разницы будет ли использоваться маппинг с SEC_COMMIT или прямое чтение из файла. Важно лишь эмулировать некоторое поведение оригинального загрузчика. Вобщем, коммент ниочём. PS: да, моя программка пока не применяет этот самый layout (хоть и делает построение карты секций по-своему, с учётом выравниваний и взаимного расположения, для вычисления оффсета по RVA), а читает файл как есть, но всему своё время. | Сообщение посчитали полезным: Jupiter |
|
Создано: 29 апреля 2020 19:36 · Личное сообщение · #9 RamMerlabs > Важно лишь эмулировать некоторое поведение оригинального загрузчика. Это не реально реализовать. > Вобщем, коммент ниочём. Конечно ниочём, читай из файла и тогда будет о чём, так как данные окажутся загружены левые, что значит тулз не работает на не стандарт файлах. Особенно приятно такими не наджными поделками опасные файлы смотреть, почему я это и не юзаю никогда. Одним авторам лишь известно как оно там читает формат и главное когда. Из за не верной инфы из формата может отвалится всё вообще. ----- vx |
|
Создано: 29 апреля 2020 19:46 · Поправил: RamMerlabs · Личное сообщение · #10 difexacaw >>Это не реально реализовать. Продолжайте в это верить. Только без оффтопа здесь, пожалуйста. >>Особенно приятно такими не наджными поделками опасные файлы смотреть Как будто каждая такая тулза непременно пустит образ на исполнение. Пусть там хоть стопиццот мегатроянцов будет - читаем файл как данные. Если дампер позволяет пустить хоть одну инструкцию исследуемого файла на исполнение, то это уже не дампер, а херота какая-то. И как раз с SEC_IMAGE вы на шаг будете к этому ближе. >>Из за не верной инфы из формата может отвалится всё вообще. Если что-то отваливается, но ещё не почернело - обратитесь к врачам, может удастся пришить на место. |
|
Создано: 29 апреля 2020 20:24 · Личное сообщение · #11 RamMerlabs > Если дампер позволяет пустить хоть одну инструкцию исследуемого файла на исполнение Я не говорил про утечку управления. Если тулз может ошибочную инфу выдавать, даже если при этом предупредит, то зачем он нужен не понимаю. Придётся в любом случае смотреть чем то иным. Хотя мне всё равно, я эту фигню не стабильную не юзаю, предпочитая хекс редактор или отладчик, но удачи конечно может кому то и пригодится. ----- vx |
|
Создано: 29 апреля 2020 21:25 · Личное сообщение · #12 а кому нужно мнение простого белорусского электрика ? я бы еще понял если бы он втирал на каком то электро форуме - какой предохранитель поставить в щиток | Сообщение посчитали полезным: DrVB_5_6 |
|
Создано: 29 апреля 2020 22:43 · Поправил: Bronco · Личное сообщение · #13 dosprog пишет: PPEE v.1.2 падает в kernel32.dll при попытке прочесть RichHeader самого себя. WinXP/SP2. возможно, но для меня хрюша уже давно не показатель, с любым паком. по факту большинство утиль не парсит дальше первой таблицы, и по ходу не знают о содержании унвид инфо. в таблице много элементов, и поиск значения очень уместен. да, ппее не идеален, но других у меня нет. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 29 апреля 2020 22:49 · Личное сообщение · #14 Alchemistry пишет: Просмотр ресурсов, RT_MANIFEST, Text view, мусор перед данными - п»ї<?xml version="1.0" encoding="UTF-8" standalone="yes"?> RamMerlabs пишет: >>мусор перед данными Есть такое, причём одинаковый dword во всех найденных мной образцах. Это разве не BOM? п»ї Похоже на UTF-8 - 0xEF, 0xBB, 0xBF | Сообщение посчитали полезным: mak, RamMerlabs |
|
Создано: 29 апреля 2020 23:34 · Личное сообщение · #15 |
|
Создано: 31 мая 2020 01:04 · Поправил: RamMerlabs · Личное сообщение · #16 Обновление программы до версии 0.1.15 (2020-05-30): [#] Исправлена ошибка определения минорной версии VS 2017-2019 при декодировании сигнатуры Rich (регресс 0.1.13 и 0.1.14) [#] Исправлена ошибка декодирования ресурсов RT_STRING при наличии некорректных данных [+] Добавлена вкладка с подробным описанием заголовков ресурсов PE [#] Вкладка ресурсов переделана на список без группировки по типу ресурсов [#] Исправлена сортировка списка ресурсов [#] Изменена процедура парсинга директории ресурсов, добавлены новые критерии корректности данных [#] Исправлена ошибка работы с файлом настроек при первом запуске программы [#] Исправлено поведение парсера COFF-символов при наличии некорректных данных о длинных именах символов [#] Исправлена ошибка построения контекстного меню для listview в виртуальном режиме [#] Исправлено сохранение выбранного фильтра по типу файлов в диалоге "Открыть файл" [#] Исправлено некорректное распознавание UTF16 строк в редких случаях [+] Добавлена страница обнаруженных ANSI и UTF16 строк в PE-файле [+] Добавлен парсинг CodeView для OBJ-файлов [+] Добавлен парсинг символов CodeView для OBJ-файлов [+] Добавлен парсинг типов CodeView для OBJ-файлов [+] Добавлен разбор новых записей символов CodeView до S_REGREL32_INDIR_ENCTMP включительно [+] Добавлен разбор новых записей типов CodeView до LF_INTERFACE2 включительно [+] Добавлен разбор информации о типах в OBJ-файлах, скомпилированных MSVC с флагом /GL или иных в формате MS ILStore Декодирование CodeView доступно пока только для OBJ-файлов, PDB на подходе к следующей версии вероятно. Обрабатываются символы и типы, остальные данные будут вместе с PDB. Свежие записи символов и типов имеются вплоть до свеженьких из VS16.6 (S_REGREL32_INDIR_ENCTMP - 0x117B и LF_INTERFACE2 - 0x160B соответственно). Для выбранных записей доступно описание всех полей структур этих записей, но пока некоторые записи выглядят достаточно топорно (LF_FIELDLIST). Надеюсь, что скоро прикручу более человеко-понятное описание, возможно в том числе и с декодированием в сишный\масмовый синтаксис. Кроме этого, декодируются типы из OBJ-файлов, скомпиленных MSVC с /GL флагом, т.е. результатом работы фронтенда компилятора в виде CIL (C Intermediate Language, не Common IL из дотнета!), оформленном в ILStore-формат. | Сообщение посчитали полезным: MarcElBichon, SReg, anony-mouse, hors, mak, GPcH |
|
Создано: 31 мая 2020 18:40 · Поправил: anony-mouse · Личное сообщение · #17 |
|
Создано: 31 мая 2020 18:51 · Личное сообщение · #18 anony-mouse >>Поиск напрашивается >>VA/RVA/Offset может позволить убрать в view? В todo записал, прикрутим! Только чуть попозже. | Сообщение посчитали полезным: anony-mouse |
|
Создано: 01 июня 2020 21:25 · Личное сообщение · #19 Из всего многообразия существующих просмотрщиков PE/PE+ этот проект самый лучший. ----- http://ntinfo.biz | Сообщение посчитали полезным: RamMerlabs, mak, GPcH, DICI BF, MarcElBichon |
|
Создано: 02 июня 2020 10:36 · Личное сообщение · #20 |
|
Создано: 02 июня 2020 15:12 · Личное сообщение · #21 RamMerlabs пишет: Поиск напрашивается Кстати, в других местах тоже, например imports, exports... И если будет такой поиск - в imports можно выбрать несколько библиотек, но функции только одной показываются. Показывать бы список выбранных либ. Так работает в x64dbg. Фотка - https://i.imgur.com/9PlnJ77.png |
|
Создано: 02 июня 2020 17:22 · Личное сообщение · #22 hors пишет: Из всего многообразия существующих просмотрщиков PE/PE+ по мне так эталон фейса для пе формата, всё таки за этим годков так N, на форуме это обсуждалось. anony-mouse пишет: Так работает в x64dbg. дык...раньше 2й версии поиск не обещали. да... и фильтрация как в дбг, удобна только для клика с переходом в диз.. тут куда переходить? а для таблиц это очень не комфортно ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 02 июня 2020 18:13 · Личное сообщение · #23 |
|
Создано: 26 июня 2020 21:04 · Личное сообщение · #24 Обновление программы до версии 0.1.16 (2020-06-26): [#] Небольшая оптимизация [#] Исправлена ошибка определения названия регистра в описании символов CodeView в очень редких случаях [+] Добавлена возможность копирования в буфер обмена отдельных столбцов целиком при множественном выборе строк [+] Добавлены настройки отображения панели FLC и панели состояния [#] Исправлена ошибка масштабирования размера ячеек панели состояния [+] В большинство вкладок добавлены элементы управления для изменения пропорций размеров списков (сплиттеры) [+] Добавлено определение принимающей DLL в таблицах импорта для библиотек ApiSet [+] Добавлен выбор внешней DLL для определения хоста ApiSet в настройках программы [+] Добавлен частичный поиск по таблице ExceptionsData (экспериментальная функция) Bronco Добавил поиск в ExceptionsData, но пока лишь экспериментально: только по некоторым столбцам, про полнотекстовый поиск пока речи нет. Хотелось бы услышать замечания и предложения по этой функции, чтобы оценить как лучше её реализовать к грядущей 0.2 версии программы. Ещё появился резолв хоста ApiSet-переходников (api-ms-xxxxx.dll и ext-ms-xxxxx.dll), в настройках программы добавилась опция для выбора источника данных - система (из PEB своего процесса) или внешняя DLL ApiSetSchema для резолва на "неродных" исследуемому образу системах. | Сообщение посчитали полезным: Bronco, icerix, mak, hors |
|
Создано: 26 июня 2020 23:56 · Личное сообщение · #25 RamMerlabs пишет: Добавил поиск в ExceptionsData, но пока лишь экспериментально: только по некоторым столбцам, про полнотекстовый поиск пока речи нет проверил, работает, уже нравится, быстро, удобно, для этой задачи идеальный инструмент. текст не ищу, ибо может быть слишком много совпадений. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 30 июня 2020 09:23 · Личное сообщение · #26 Так как программа умеет резольвить файлы с ярлыков при drag&drop было бы неплохо если бы она также умела резольвить их с ярлыков созданных MSI инсталерами. Пример такой программы вендовый трансмишн. | Сообщение посчитали полезным: RamMerlabs |
|
Создано: 05 июля 2020 16:13 · Поправил: ==DJ==[ZLO] · Личное сообщение · #27 Приветствую всех!) To: Стоит ли считать "багом" не отображение ресурсного диалога в программе ? Если да, то есть утилита (нирвана) как говорится, девственна на ентропию, открывается во всех нами известных PE редакторах, но вот Dialog-107 не отображается в PEAnatomist-е. Хотелки: В этих же самых ресурсах если кликать 100500 раз на диалог, меню, айкон и т.п столько же раз и откроется дочернее окно. М.б. дать возможность открытия одного экземпляра диалога, меню и т.п ? Секции - Колонка - Размер в памяти - Хотелось бы отображение после Hex в (скобках) Dec. Импорт - Колонка - "Перенаправление и Метка времени" - специально скрыты или "схлопнулись с "Имена функций" ? М.б. их отобразить ? Пысы: Добавил линк на сайт с утилитой | Сообщение посчитали полезным: RamMerlabs, mak |
|
Создано: 05 июля 2020 17:55 · Поправил: RamMerlabs · Личное сообщение · #28 ==DJ==[ZLO] >>Стоит ли считать "багом" не отображение ресурсного диалога в программе ? Определённо. Но баг мне известен - >>М.б. дать возможность открытия одного экземпляра диалога, меню и т.п ? Хорошая идея, сделаем. >>Секции - Колонка - Размер в памяти - Хотелось бы отображение после Hex в (скобках) Dec. Чуть позже список секций планируется переделать, в т.ч. и с отображением инфы в разных формах. >>Импорт - Колонка - "Перенаправление и Метка времени" - специально скрыты или "схлопнулись с "Имена функций" ? Специально, чтобы освободить место для недавно добавленной колонки "ApiSet Host". В любом listview в программе есть возможность скрытия/отображения колонок - ПКМ на заголовке колонок. В некоторых списках есть скрытые по-умолчанию колонки. К сожалению, пока что механизм скрытия/отображения колонок примитивен и опирается на установку ширины колонки в 0 с установкой флага во внутренней структуре. Надо переделать конечно, но... лень |
|
Создано: 06 июля 2020 13:57 · Поправил: RamMerlabs · Личное сообщение · #29 ==DJ==[ZLO] Был неправ: >>в диалоге скорее всего присутствует элемент управления там действительно баг в собственном коде. Не знаю, когда будет следующее обновление программы, поэтому при желании можно временно и не очень надёжно (возможно некорректное построение или ошибка построения диалога из порченных\сжатых ресурсов) исправить патчем экзешника: - по смещению 0x22B80 заменить на nop'ы 6 байт (сейчас там jae xxxxxx) или - по смещению 0x22B7E вместо 0x00 вписать 0x01 (1 байт) оффсеты актуальны для 0.1.16 версии. После обновления этот "код" будет переписан. Спасибо, что обратили внимание на эту проблему! |
|
Создано: 07 июля 2020 01:55 · Личное сообщение · #30 |
|
Создано: 07 июля 2020 10:49 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . |
eXeL@B —› Софт, инструменты —› PEAnatomist - внутренности PE-файлов |