Сейчас на форуме: 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

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

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

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




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

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

MSPDBView

cdf5_03.02.2020_EXELAB.rU.tgz - MSPDBView.zip

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


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


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

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

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

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


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

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

Создано: 13 февраля 2020 22:44 · Поправил: RamMerlabs
· Личное сообщение · #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 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

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

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


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

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

4a7b_14.02.2020_EXELAB.rU.tgz - VirtListView.zip

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


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

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

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

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

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




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 14 февраля 2020 17:14 · Поправил: mak
· Личное сообщение · #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 <--

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




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

Создано: 14 февраля 2020 18:22 · Поправил: RamMerlabs
· Личное сообщение · #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 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 26 апреля 2020 13:15 · Поправил: RamMerlabs
· Личное сообщение · #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 (гость), 2thx
Активность: 0=0
Статус: Участник

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

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

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

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

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

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

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



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

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

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

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



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

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

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

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


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




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

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

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

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




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

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

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


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

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: -5.6 (нарушитель), 3thx
Активность: 0.15=0.15
Статус: Участник

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

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


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



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

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

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





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




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

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

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

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

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

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



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

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

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



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

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

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

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






Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




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

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

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



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

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

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


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





Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

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

dosprog пишет:
SP2

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



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

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

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

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

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





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

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

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

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

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

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



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

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

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

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


<< . 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 » Выход » ЛС
   Для печати Для печати