Как стать автором
Обновить

Process Memory Map

Время на прочтение3 мин
Количество просмотров7.4K

Я программист, а то что я еще и реверсер - ну... так совпало. И как любому из людей занимающимся реверсом мне всегда не хватает функционала отладчика. Постоянно приходится допиливать под конкретную задачу какие-то утилитарные вещи и однажды...
Однажды я решил - хватит, каждый раз пилить новое достаточно утомительно, а что если взять и объединить все наработки в один инструмент и пользоваться именно им!
Это будет скорее рекламный пост - но не спешите минусовать, возможности утилиты, о которой пойдет речь, а называется она Process Memory Map, весьма обширны, и возможно вам понравится :)

Итак - что это такое? Она похожа на всем известный инструмент от Марка Руссиновича VMMap (которая кстати частично основана на коде Джефри Рихтера), её задача проанализировать сторонний процесс и вытащить из него максимум данных, о которых она знает.

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

  1. KUSER_SHARED_DATA - здесь сидит куча системной информации, опорные данные для GetTickCount, флаги процессора, флаги отладочной типа KdDebuggerEnabled и много всего интересного.

  2. Списки загрузчика - если вам встречалась антиотладка, мешающая аттачу отладчика к процессу посредством манипуляции списками (через сброс линков), PMM их покажет

  3. Естественно она знает о PEB, причем отобразит как 32 битный PEB так и 64 битный

  4. Она знает о структуре ApiSet таблиц используемых для редиректа библиотек из таблиц импорта исполняемых фалов

  5. PROCESS ACTIVATION CONTEXT - тоже умеет

  6. Параметры процесса - легко

  7. Конечно же TEB

Впрочем если перечислять все типы структур - это будет слишком объемная статья. По хоткею F2 PMM предоставит быстрый доступ ко всей требуемой информации о которой она знает на текущий момент.

Конечно же основным режимом работы является работа с образами исполняемых файлов, они целиком размаплены и можно увидеть всю их структуру с секциями директориями, заголовками и прочим - причем с учетом актуального состояния в памяти.
Знает о структуре таблиц импорта экспорта, TLS и всем что может потребоваться реверсеру.

Безусловно - дизассемблер в наличии, причем есть два движка работы с отладочной информацией (один под MAP и второй под работу с COFF/DWARF2-3). Вот так выглядит точка входа при подключенной отладочной.

Конечно есть актуальный список экспорта всех загруженных в процесс библиотек, куда сразу подтягиваются данные из отладочной. К диалогу подключен быстрый поиск.

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

Отдельно хочется упомянуть что присутствует модуль сканера перехваченных вызовов (F8). Очень удобный инструмент для детектирования работы песочниц.

Ну и конечно присутствует вывод детального CallStack всех потоков приложения (F4), включая 64 битный стек Wow64 подсистемы для 32 битных приложений и их список SEH фреймов. Стеки развернуты с учетом отладочной информации (если она присутствует).

Утилита постоянно дорабатывается, люди, которые ей пользуются постоянно присылают новые идею по внедрению нового функционала. Собственно и этот рекламный пост был сделан именно с этой целью - найти новых пользователей которые помогут развитию функционала новыми идеями.
Конечно же это полный опенсорс, т.е. - даром :)
https://github.com/AlexanderBagel/ProcessMemoryMap

Планов по развитию еще очень много (тот же PDB еще не подключен, планируется реализовать чтение сразу в RAW формате).

Есть конечно в ней и недочеты - например прямо сейчас снимая скриншоты к статье обнаружил что отвалилось обработка Forward функций в сканере хуков, но это все чинится (но после НГ).
UPD: исправлено в версии 1.5.36 - проблема в том что IMAGE_DIRECTORY_ENTRY_SECURITY вечно занимает не свое место.

Кстати всех с наступающим!

Теги:
Хабы:
Всего голосов 63: ↑63 и ↓0+63
Комментарии19

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань