Утилита предназначена для отображения карты памяти процесса.
Отображает следующие данные:
- кучи процесса
- данные по нитям, как то: стек, TEB, SEH фреймы и CallStack
- информация по подгруженным PE файлам с разбивкой на секции, точки входа в каждый загруженный образ, их структуры
- данные из PEB
- данные из KUSER_SHARED_DATA
- встроенный x86/x64 дизассемблер (на базе DiStorm)
Предоставляет возможность:
- анализа памяти на предмет установленных перехватчиков в таблицах импорта/экспорта/отложенного импорта
- анализа установленных перехватчиков в экспортируемых функциях, точках входа и TLS калбэках
- анализа блоков памяти на основе их контрольных сумм (например отображение изменений во взломанном ПО).
- поиска в памяти процесса.
Из дополнительных возможностей:
- выводит список экспортируемых функций.
- поддерживает отладочные MAP файлы. (влияет на список распознанных функций и выхлоп дизассемблера)
- отображает изменения в выделенных блоках памяти (alloc/realloc/free)
- быстрая подсказка по известным блокам памяти
Для самостоятельной сборки потребуется:
- установленный пакет компонентов Virtual TreeView версии 8.0 и выше: https://github.com/JAM-Software/Virtual-TreeView
- установленный набор классов для работы с ZIP архивами FWZip версии 1.0.9 и выше: https://github.com/AlexanderBagel/FWZip
Сборка осуществляется с использованием Delphi 10.4.2 Seattle в режиме "Win32/Release", при этом автоматически будет собрана и подключена (в виде ресурса) 64-битная версия данной утилиты. Под более старыми версиями Delphi работоспособность ProcessMemoryMap не проверялась и не гарантируется.
- MemoryMap Core - 1.4.33
- RawScanner Core - 1.0.18
- FWZip - 2.0.2
- Distorm - 3.5.3
- 1.4 полная поддержка DWARF 4 и 5 версий, поддержка типов STUB
- 1.5 вывод размапленой информации по директорям exceptions, security
- 1.6 вывод размапленой информации по директории com+ в виде дерева
- 1.7 вывод размапленой информации по директории resources
- 1.7 вывод используемых ресурсов в виде дерева
- 1.8 вывод размапленой информации по директории debug
- 1.8 поддержка отладочных PDB файлов
- 1.8 перевод вывода системных структур на основе полученных данных из PDB
- 1.9 поддержка отладочной информации JclDebug (возможно в виде плагина)
- 2.0 перевод Hex дампов и дизассемблера на FWHexView
1.4.34 от 19.12.2023
- в дизассемблере отключен вывод имени текущего модуля, имя модуля указывается только для внешних адресов
- добавлено детектирование имени секции при парсинге COFF
- переделан механизм фильтров страниц для вывода данных по приоритетному фильтру в случае если страница имеет несколько аттрибутов (Shared/Mapped etc...)
- добавлена обработка загрузки аттрибута DW_AT_location из секции .debug_loc
- добавлена обработка загрузки модулей из секции .debug_info в которых присутствует только DW_TAG_compile_unit, или только файлы/директории из секции .debug_line.
- исправлен неверный размер аттрибута DW_AT_language у тэга DW_TAG_compile_unit
- добавлено детектирование имен секций в отладочном COFF по символу IMAGE_SYM_CLASS_STATIC (и проверку на имя начинающееся с точки). Такие записи исключены из вывода.
Полный список обновлений в файле updates.txt
Как и в оригинальной утилите от Марка Руссиновича, присутствует фильтрация по типам данных. В данном случае отображаются только те блоки памяти, которые содержат системные данные (KUSER_SHARED_DATA, PEB, etc...)
Данные всех поддерживаемых структур размаплены для их более удобного восприятия. К примеру, вот так выглядит отображение блока окружения 64 битного процесса.
А вот так выглядит IMAGE_DOS_HEADER
Если не известно что за структура мапится на текущий адрес памяти, то данные отобрадаются в RAW режиме. Например вот так выглядит код на точке входа kernel32.dll
Он же, но в виде дизассемблированного кода (переключение между видами в меню по правой клавише мышки "Show as disassembly" или по горячей клавише Ctrl+D):
- Для нагрядности дизассемблерный выхлоп форматирован.
- Код известных экспортируемых функций предваряется описанием.
- Выхлоп форматируется дабы не мозолили глаза NOP и INT3 инструкции, выделяется окончание функций (RET/IRET/RETF).
Для быстрой навигации по известным структурам предсмотрено оглавление, доступное через меню View -> Show Known Data... или по горячей клавише F2
Присутствует список всех импортируемых/экспортируемых функций (Ctrl+E). В него же добавляются данные из отладочного МАР файла (если присутствует - поддерживаются MAP файлы Delphi/С++) К нему добавлен поиск как по адресу, так и по имени функции (поиск по наименованию библиотеки не производится)
При наличии информации известные вызовы в дизассемблере коментируются.
Включая вызовы через таблицу импорта.
Присутствует модуль анализа процесса на предмет установленых перехватчиков фунций (F8)
Ну и вот так выглядит список изменений в выделенных блоках с последней проверки (F5)
Ну и много много чего еще интересного.