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

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

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

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

Создано: 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.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


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

Создано: 03 февраля 2020 18:34 New!
Цитата · Личное сообщение · #2

r_e
Выкладывали, видел, читал. Иногда подглядываю в основном define'ы всякие. Но там кода в несколько раз больше, чем во всём peanatomist )) Прикрутить целиком получится только линкуя obj, но вместе с тем и получить дополнительные зависимости. Переписывать всё это как есть не хочется, да и нет необходимости все фичи переносить, поэтому пишу с нуля хотя бы до уровня таблицы символов. Но это пока совсем не приоритетная задача.




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 03 февраля 2020 19:28 New!
Цитата · Личное сообщение · #3

MSPDBView

{ Атач доступен только для участников форума } - MSPDBView.zip

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



Ранг: 625.3 (!)
Статус: Участник
_Вечный_Студент_

Создано: 04 февраля 2020 00:00 New!
Цитата · Личное сообщение · #4

Aвтор проэкта не хочет совать в него чужой код и хочет все сделать сам.
Это вполне понятно и заслуживает уважения.
Удачи!

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


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

Создано: 13 февраля 2020 22:44 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #5

Обновление программы до версии 0.1.12 (2020-02-13):
[#] Исправлена ошибка интеграции в контекстное меню оболочки
[#] Исправлено поведение программы во время загрузки нового файла при наличии открытых окон свойств ресурсов
[#] Исправлена ошибка отображения описания некоторых символов в таблице Dyn.Value Relocations
[#] Исправлена ошибка разбора таблицы ExceptionsData для ARM Thumb: некорректная информация о сохраняемых регистрах в сжатой форме UnwindInfo
[+] Натуральная сортировка добавлена для ещё нескольких списков
[#] Исправлена ошибка наполнения списка Catch Handlers для UnwindInfo.EHData.CPP_EH4
[#] Устранена ошибка, приводящая к медленному выполнению операции "Выделить всё" на больших списках
[+] Часть списков с большим количеством строк переведены на виртуальный режим
[+] Добавлен переход по связанным элементам UNWIND_INFO списка ExceptionData для x64


Список ExceptionsData теперь переведён на виртуальный режим, что значительно ускорило отображение на большом количестве элементов. Ожидание на таблице в полмиллиона строк - порядка 0.3 секунды.

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



Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 14 февраля 2020 01:53 New!
Цитата · Личное сообщение · #6

RamMerlabs пишет:
Хотелось бы как-то асинхронно наполнять массив для хранения состояния строк и так же асинхронно (через LVN_DISPINFO) это состояние выдавать.


How to Use Virtual List-View Controls - --> Link <--
Using virtual lists --> Link <--

В атаче пример на ассемблере ...

{ Атач доступен только для участников форума } - VirtListView.zip

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


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

Создано: 14 февраля 2020 11:41 New!
Цитата · Личное сообщение · #7

mak
Это всё известно, используется и полностью работоспособно:
>>Список ExceptionsData теперь переведён на виртуальный режим

Вопрос в самостоятельном хранении состояния строк - выделено, в фокусе - и переносе этого состояния на строки после сортировки.




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 14 февраля 2020 17:14 · Поправил: mak New!
Цитата · Личное сообщение · #8

RamMerlabs пишет:
Вопрос в самостоятельном хранении состояния строк - выделено, в фокусе - и переносе этого состояния на строки после сортировки.


Selection Problems
After adding advanced features to my virtual list, such as caching and searching capabilities, I felt that it was pretty much "feature complete." One last minor issue was to select an initial entry when the list is first displayed. With normal listviews, this generally isn't a big deal. It's simply a matter of setting a particular item's state to selected. Unfortunately, that didn't turn out to be so simple with a virtual listview. I used the normal listview approach of setting an item's selected state, but much to my dismay the selection never appeared. After much struggle, I eventually came to the conclusion that programmatic selection must not work properly for virtual listviews. But, it was very interesting to note that although selecting an entry through code didn't work properly, selecting it with a mouse always yielded the desired results. Having spent many years developing Windows applications, I immediately thought of a less-than-glamorous workaround.

I theorized that if I could mimic the behavior of a user's mouse click, I might be able to trick the virtual list control into a programmatic selection. I did this by calling the CListCtrl::EnsureVisble() method to make sure the item to select is in the visible area of the list. Next, I called the ClistCtrl::GetItemRect() method to get the rectangle of the item I wanted to select. Then I called CListCtrl::SetItemState() to set the item's state to selected. Finally, I posted a "fake" mouse message to the list control by sending WM_LBUTTONDOWN and WM_LBUTTONUP messages to the virtual list, while supplying the item's rectangle as the location of the mouse clicks. Much to my surprise, this simple solution worked extremely well for programmatically selecting list items. To simplify using this approach, I incorporated the code into the SelectItem() method of my CVListCtrl class (see vlist.cpp).



Code:
  1. void CVListCtrl::SelectItem(int nIndex)
  2.          CRect rc;
  3.  
  4.          EnsureVisible(nIndex,FALSE);
  5.          GetItemRect(nIndex,rc,LVIR_BOUNDS);
  6.          SetItemState(nIndex,LVIS_SELECTED,LVIS_SELECTED);
  7.          PostMessage(WM_LBUTTONDOWN,0,MAKELPARAM(rc.left,rc.top));
  8.          PostMessage(WM_LBUTTONUP,0,MAKELPARAM(rc.left,rc.top));
  9. }
  10.  
  11. void CVListCtrl::SelectItem(LPCTSTR lpszItem)
  12. {
  13.          LV_FINDINFO lvFindInfo;
  14.  
  15.          lvFindInfo.flags = LVFI_PARTIAL;
  16.          lvFindInfo.psz = lpszItem;
  17.          int nIndex = FindItem(&lvFindInfo);
  18.  
  19.          if(nIndex >= 0) 
  20.                  SelectItem(nIndex);
  21. }


--> Link <--
Весь проект - --> Link <--



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

Создано: 14 февраля 2020 18:22 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #9

mak
Блин, и это я читал уже, и это снова совсем не о том.
Здесь речь о выделении конкретной строки с заранее заданным номером. Причём в этом примере процедура излишне усложнена. Все эти примеры кочуют по сайтам и показывают только самое примитивное использование.
Повторюсь в очередной раз - мой вопрос о том, как асинхронно (т.е. в момент возникновения события изменения состояния строки) сохранить состояние себе и так же асинхронно (т.е. в момент запроса ListView на отображение строки - LVN_GETDISPINFO) вернуть его после изменения порядка отображения строк.
Документация оговаривает такую возможность отправкой сообщения LVM_SETCALLBACKMASK, но это прекрасно работает, когда нужно обрабатывать состояние например чекбокса (при его наличии) - wParam=LVIS_STATEIMAGEMASK, но если обрабатывать состояния LVIS_SELECTED | LVIS_FOCUSED, то выходит фигня. По крайней мере у меня. Получить состояние вобщем-то не проблема - LVN_ODSTATECHANGED (хоть и ооочень ограниченно - только выделение строк подряд и отсутствие реакции на программное выделение) и LVN_ITEMCHANGED в помощь. Но выдача этого состояния через LVN_GETDISPINFO оборачивается отсутствием фокусной рамки и самого выделения строки при прорисовке. Если программно запросить состояние - всё ок, как надо. Но прорисовки нет.
Остаётся пока только проходить по всему списку LVM_GETNEXTITEM (LVNI_SELECTED), сохраняя индексы себе, до сортировки списка и отдельно каждую отмеченную строку выделять после сортировки. Оверхед бешеный.
Вот я и интересуюсь - делал ли кто-нибудь что-то подобное и как?
Гугло-яндо-бинго-байда-утко-поиски прочесаны вдоль и поперёк с кучей вариантов запросов.



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

Создано: 26 апреля 2020 13:15 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #10

Обновление программы до версии 0.1.13 (2020-04-25):
[#] Исправлена ошибка сортировки некоторых списков с signed-long данными
[#] Исправлена ошибка отображения таблицы ExceptionsData при наличии некорректных данных
[#] Исправлена ошибка отображения имени секции в описании RVA в некоторых случаях
[+] Добавлены новые строки описания групп секций на странице "POGO" в IMAGE_DEBUG_DIRECTORY
[#] Оптимизация и рефакторинг значительной части кода
[+] Добавлены новые поля в LOAD_CONFIG_DIRECTORY из SDK 19041 - GuardEHContinuations, и недокументированные - eXtended CFG (xFG)
[+] Добавлена страница со списком GuardEHContinuations
[+] Добавлены новые флаги характеристик в списке GFID
[#] Исправлена ошибка с некорректным окончанием строки при копировании в буфер обмена
[#] Исправлена ошибка разбора таблицы COFF-символов, если указан некорректный адрес
[-] Иконка главного окна программы больше не изменяется на иконку загружаемого файла
[#] Исправлена ошибка разбора таблицы связанного импорта
[+] Добавлена поддержка форматов OBJ-файлов и LIB-файлов
[+] Добавлена поддержка non-COFF OBJ-файлов
[+] Добавлен разбор таблицы символов OBJ-файлов
[+] Добавлен вывод сводной информации о библиотеках импорта в LIB-файлах
[+] Добавлен разбор таблицы секций и релокаций OBJ-файлов
[+] Увеличено число расширений файлов для интеграции в контекстное меню проводника
[#] Исправлена ошибка интеграции в контекстное меню оболочки в случае, если расширение файла не было ранее зарегистрировано в системе

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


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

Создано: 26 апреля 2020 21:11 New!
Цитата · Личное сообщение · #11

0.1.13 в отличии от предыдущих версий крашится при парсинге файлового заголовка на некоторых файлах.

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


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

Создано: 26 апреля 2020 21:48 New!
Цитата · Личное сообщение · #12

Хотелось бы архив со всеми версиями программы начиная с первого релиза. Есть у кого?

PS
В очередной раз озвучу про наличие в природе гитов, многие моменты будут удобнее втч релизы и багрепорты.
Автор упорно не хочет, видимо сырки "военная тайна", а он не в курсе что принудиловки по их наличию нет



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

Создано: 26 апреля 2020 22:49 New!
Цитата · Личное сообщение · #13

Json
Точно, есть такое. Проморгал изменение esp в прологе в одной процедуре, стек в эпилоге не восстанавливается. Проявляется на delphi'йских PE с фиксированным timestamp 0x2A425E19.
Большое спасибо за отзыв. Завтра-послезавтра выложу обновление.

VOLKOFF
Гитхаб с его политикой совершенно не интересен, а git как продукт в целом - возможно когда-нибудь. Программа преимущественно пишется под собственные нужды и интересы и имеющиеся процедуры обновления кода, публикации и структура исходников меня устраивают на все сто.



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

Создано: 26 апреля 2020 22:57 New!
Цитата · Личное сообщение · #14

"Хотелось бы архив со всеми версиями программы начиная с первого релиза. Есть у кого?"
Есть такое: скачать
В архиве версии 0.1.1 - 0.1.13.
Пароль на архив: ru-board

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



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

Создано: 27 апреля 2020 02:57 New!
Цитата · Личное сообщение · #15

RamMerlabs, а когда будет поиск по таблице эксепшенов?
выделение по столбцам как-то не прививается..



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

Создано: 27 апреля 2020 12:47 New!
Цитата · Личное сообщение · #16

Bronco
Всё, что касается изменений в GUI, планируется к версии 0.2.0. В случае поиска по exception'ам нужен отдельный диалог для параметров поиска и этот самый диалог хотелось бы сразу сделать унифицированным и масштабируемым для поиска в любых таблицах, так что с интерфейсом тут больше возни, чем с логикой.

VOLKOFF
Вот чисто из праздного любопытства вопрос - что Вы делаете со старыми версиями?




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 27 апреля 2020 13:15 New!
Цитата · Личное сообщение · #17

RamMerlabs пишет:
Вот чисто из праздного любопытства вопрос - что Вы делаете со старыми версиями?


Баг трекинг ..



Ранг: -5.6 (нарушитель)
Статус: Участник

Создано: 28 апреля 2020 07:51 New!
Цитата · Личное сообщение · #18

mak пишет:
Баг трекинг ..


А для чего он нужен? Чтобы проще было воровать анализировать код?



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

Создано: 28 апреля 2020 15:26 · Поправил: RamMerlabs New!
Цитата · Личное сообщение · #19

Обновление программы до версии 0.1.14 (2020-04-28):
[#] Исправлена ошибка, приводящая к краху программы при просмотре файлового заголовка PE-файлов, собранных в Borland Delphi
[#] Небольшая оптимизация внутренних структур данных
[+] Добавлена возможность извлечения записей из LIB-файлов
[+] Добавлено меню закрытия файла





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

Создано: 29 апреля 2020 00:19 · Поправил: Bronco New!
Цитата · Личное сообщение · #20

RamMerlabs пишет:
планируется к версии 0.2.0.

типо потерпеть , всего то 86 билдов осталось ?
потерпим, как бы есть приблуда, но у неё парс медленный.



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

Создано: 29 апреля 2020 00:35 New!
Цитата · Личное сообщение · #21

Bronco
>>всего то 86 билдов осталось
а может быть шесть... или 986 хехехе

что за приблуда? взглянуть можно?




Ранг: 1056.0 (!!!!)
Статус: Участник

Создано: 29 апреля 2020 00:48 New!
Цитата · Личное сообщение · #22

2 мес между билдами
86*2/12=14 лет всего то навсего в лучшем случае



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

Создано: 29 апреля 2020 01:01 New!
Цитата · Личное сообщение · #23

reversecode
>>2 мес между билдами
>>86*2/12=14 лет всего то навсего в лучшем случае
Значит вы уже менеджером стали? Графики, отчёты, код-ревью, митапы... на обеденный перерыв отпустите? А "где деньги, Лебовски?"



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

Создано: 29 апреля 2020 01:32 New!
Цитата · Личное сообщение · #24

reversecode пишет:
2 мес между билдами

А куда спешить? Пускай делает под настроение.
Ящетаю.






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

Создано: 29 апреля 2020 05:14 · Поправил: Bronco New!
Цитата · Личное сообщение · #25

RamMerlabs пишет:
что за приблуда? взглянуть можно?

--> Link <--
-------------
ипать...звезда покраснела...второй раз между прочим..



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

Создано: 29 апреля 2020 07:57 New!
Цитата · Личное сообщение · #26

RamMerlabs
Просмотр ресурсов, RT_MANIFEST, Text view, мусор перед данными - п»ї<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Но не всегда, пример файла http://live.sysinternals.com/Autoruns.exe
Будет неплохо если тулза также будет разлистывать известные компоненты манифеста отдельно (по типу как сделано с rich sig), включая редиректы длл.



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

Создано: 29 апреля 2020 12:27 New!
Цитата · Личное сообщение · #27

Bronco пишет:
--> Link <--


PPEE v.1.2 падает в kernel32.dll при попытке прочесть RichHeader самого себя. WinXP/SP2.





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

Создано: 29 апреля 2020 13:06 New!
Цитата · Личное сообщение · #28

dosprog пишет:
SP2

Ого, что ты тестишь на втором сервиспаке?



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

Создано: 29 апреля 2020 13:22 · Поправил: dosprog New!
Цитата · Личное сообщение · #29

VOLKOFF пишет:
Ого, что ты тестишь на втором сервиспаке?

Да всё подряд. Хорошая система, без выгибонов.

Кстати, у меня уже даже некий критерий для всяких утилит общего назначения
- если не работает под XP/SP2, то сразу же и досвидос. Этот показатель работает нормально.





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

Создано: 29 апреля 2020 14:10 New!
Цитата · Личное сообщение · #30

Bronco
>> --> Link <--
А, эта. Там ошибок много кстати, в т.ч. и в обработке таблицы исключений. Я разрабу писал, но ни ответа ни привета.

Alchemistry
>>мусор перед данными
Есть такое, причём одинаковый dword во всех найденных мной образцах.
Моё предположение, что появляется это из-за участия компоновщика (возможно определённой версии) в создании части манифеста (/MANIFEST) при наличии манифеста в RES-файле. Декодирование Rich говорит, что компоновщик это как раз делает: "Linker generated Manifest RES". А может файл манифеста изначально такой уже был перед сборкой ресурсов, т.к. в утильках sysinternals это началось только с определённого момента времени (и использования /MANIFEST).

>>включая редиректы длл
Это уже планируется, чуть ранее тут обсуждалось.
Как раз с парсером xml можно будет тот мусор отбрасывать.

dosprog
А моя утилитка на sp2 как себя чувствует? Я ниже sp3 не тестил, но документация к некоторым апишкам описывает для sp2 и sp3 немного разное поведение, что не учитывается у меня в коде. Т.е. расчёт минимально на sp3.



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

Создано: 29 апреля 2020 14:19 New!
Цитата · Личное сообщение · #31

dosprog пишет:
если не работает под XP/SP2, то сразу же и досвидос

Обычно когда цикл жизни продукта завершается для тестов используют последнюю версию, поэтому и появился вопрос.
Это как бы "негласное правило хорошего тона", даже в мсдн отсылки всегда идут на трешку. Про неофициальные пакеты обновлений речи естественно нет.
В последний пак надергали по мелочи из Висты и работает немного иначе, да и апишки например не все есть (GetLogicalProcessorInformation, GetProcessDEPPolicy итп).


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

Видеокурс ВЗЛОМ