Skip to content

AlexanderBagel/ProcessMemoryMap

Repository files navigation

Process Memory Map

Утилита предназначена для отображения карты памяти процесса.

1

Отображает следующие данные:

  • кучи процесса
  • данные по нитям, как то: стек, TEB, SEH фреймы и CallStack
  • информация по подгруженным PE файлам с разбивкой на секции, точки входа в каждый загруженный образ, их структуры
  • данные из PEB
  • данные из KUSER_SHARED_DATA
  • встроенный x86/x64 дизассемблер (на базе DiStorm)

Предоставляет возможность:

  • анализа памяти на предмет установленных перехватчиков в таблицах импорта/экспорта/отложенного импорта
  • анализа установленных перехватчиков в экспортируемых функциях, точках входа и TLS калбэках
  • анализа блоков памяти на основе их контрольных сумм (например отображение изменений во взломанном ПО).
  • поиска в памяти процесса.

Из дополнительных возможностей:

  • выводит список экспортируемых функций.
  • поддерживает отладочные MAP файлы. (влияет на список распознанных функций и выхлоп дизассемблера)
  • отображает изменения в выделенных блоках памяти (alloc/realloc/free)
  • быстрая подсказка по известным блокам памяти

Сборка проекта:

Для самостоятельной сборки потребуется:

Сборка осуществляется с использованием Delphi 10.4.2 Sydney в режиме "Win32/Release", при этом автоматически будет собрана и подключена (в виде ресурса) 64-битная версия данной утилиты. Под более старыми версиями Delphi работоспособность ProcessMemoryMap не проверялась и не гарантируется.

Внутренние версии фреймворков:

  • MemoryMap Core - 1.4.37
  • RawScanner Core - 1.1.24
  • FWZip - 2.0.4
  • Distorm - 3.5.3

RoadMap (с предположительными версиями):

  • 1.5 полная поддержка DWARF 4 и 5 версий, поддержка типов STUB
  • 1.6 вывод размапленой информации по директории resources
  • 1.6 вывод используемых ресурсов в виде дерева
  • 1.7 вывод размапленой информации по директорям exceptions, security
  • 1.7 вывод размапленой информации по директории com+ в виде дерева
  • 1.8 вывод размапленой информации по директории debug
  • 1.8 поддержка отладочных PDB файлов
  • 1.8 перевод вывода системных структур на основе полученных данных из PDB
  • 1.9 поддержка отладочной информации JclDebug (возможно в виде плагина)
  • 2.0 перевод Hex дампов и дизассемблера на FWHexView

Обновления:

1.5.45 от 10.11.2024

  • В анализаторе хуков расширен warning при проверке ImgDelayDescr.ModuleInstance. Добавлена информация об адресе дескриптора.
  • В свойствах региона ImgDelayDescr.ModuleInstance теперь дополнительно выводит адрес и имя модуля.
  • Изменен диалог поиска, предыдущие поисковые запросы сохраняются в течении сессии.
  • Новый диалог результатов поиска.
  • В настройки добавлен лимит выводимых поисковых запросов (максимум 1000).
  • Исправлена неверная работа с флагом PAGE_WRITECOPY при чтении
  • Исправлена неверная работа якорей при смене DPI у нижнего вьювера страниц на главной форме.

1.5.44 от 07.11.2024

  • В настройки добавлен таймер автообновления окна свойств региона. По умолчанию отключен.

1.5.43 от 30.10.2024

  • Исправлен некорректный контроль результата в GetDwarfLineAtAddr, приводящий к "Argument out of range".

1.5.42 от 20.09.2024

  • Исправлено падение на чтении отладочной COFF в упакованных через UPX исполяемых файлах.

Полный список обновлений в файле updates.txt

Скриншоты:

Как и в оригинальной утилите от Марка Руссиновича, присутствует фильтрация по типам данных. В данном случае отображаются только те блоки памяти, которые содержат системные данные (KUSER_SHARED_DATA, PEB, etc...)

2

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

3

А вот так выглядит IMAGE_DOS_HEADER

4

Если не известно что за структура мапится на текущий адрес памяти, то данные отобрадаются в RAW режиме. Например вот так выглядит код на точке входа kernel32.dll

5.1

Он же, но в виде дизассемблированного кода (переключение между видами в меню по правой клавише мышки "Show as disassembly" или по горячей клавише Ctrl+D):

5.2

  • Для нагрядности дизассемблерный выхлоп форматирован.
  • Код известных экспортируемых функций предваряется описанием.
  • Выхлоп форматируется дабы не мозолили глаза NOP и INT3 инструкции, выделяется окончание функций (RET/IRET/RETF).

5.3

Для быстрой навигации по известным структурам предсмотрено оглавление, доступное через меню View -> Show Known Data... или по горячей клавише F2

6

Присутствует список всех импортируемых/экспортируемых функций (Ctrl+E). В него же добавляются данные из отладочного МАР файла (если присутствует - поддерживаются MAP файлы Delphi/С++) К нему добавлен поиск как по адресу, так и по имени функции (поиск по наименованию библиотеки не производится)

7

При наличии информации известные вызовы в дизассемблере коментируются. 7.1

Включая вызовы через таблицу импорта. 7.2

Присутствует модуль анализа процесса на предмет установленых перехватчиков фунций (F8) 8

Присутствует модуль деманглинга стека вызовов потоков включая 32 и 64 бита + 32SEH (F4) 9

Результаты поиска выводятся в отдельный диалог (Shift+F) 10

Ну и вот так выглядит список изменений в выделенных блоках с последней проверки (F5)

11

Ну и много много чего еще интересного.