Утиліта Process Memory Map показує, як саме програми використовують пам’ять у Windows. Вона відображає структуру процесу, стек потоків, системні області на кшталт PEB і TEB, імпорти, модулі та навіть дизасембльований код. З її допомогою можна виявити приховані зміни, знайти перехоплення функцій і побачити, як програма поводиться всередині системи. У статті ви дізнаєтеся, як працює ця утиліта, які можливості вона відкриває для аналізу процесів і чому Process Memory Map вважають одним із найзручніших інструментів для реверс-інженерів і дослідників безпеки.
Сучасні системи працюють із величезною кількістю процесів, які постійно взаємодіють між собою, завантажують модулі, виділяють пам’ять і змінюють свій стан. Зрозуміти, що відбувається всередині кожного процесу, — завдання не з простих навіть для досвідчених розробників чи фахівців з інформаційної безпеки. Саме для цього створена утиліта Process Memory Map — інструмент, який дозволяє детально побачити повну карту пам’яті процесу у Windows, включно з усіма потоками, структурами, бібліотеками та змінами в реальному часі.
Вона поєднує в собі глибину аналізу, яку раніше можна було отримати лише за допомогою складних відлагоджувачів, із простотою візуального відображення, що робить її корисною як для дослідників безпеки, так і для розробників програмного забезпечення. Завдяки підтримці дизасемблера, аналізу імпортів та експортів, перевірки перехоплень і контролю змін у пам’яті, ця утиліта допомагає швидко знайти підозрілі ділянки коду, відстежити поведінку процесу або дослідити роботу власного ПЗ на низькому рівні.
Нижче наведено докладний опис можливостей, структури та принципів роботи утиліти Process Memory Map.
купи процесу;
дані по нитках, як то: стек, 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
Складання здійснюється з використанням Delphi 10.4.2 Sydney в режимі “Win32/Release”, при цьому автоматично буде зібрано та підключено (у вигляді ресурсу) 64-бітну версію даної утиліти. Під старішими версіями Delphi працездатність ProcessMemoryMap не перевірялася і гарантується.
MemoryMap Core – 1.4.37
RawScanner Core – 1.1.25
FWZip – 2.0.6
Distorm – 3.5.3
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.
Утиліта Process Memory Map підтримує зручну фільтрацію за типами даних, що дозволяє швидко знаходити потрібні області пам’яті. Наприклад, можна відобразити лише ті блоки, які містять системні структури, такі як KUSER_SHARED_DATA, PEB та інші ключові елементи, відповідальні за роботу процесу. Це значно спрощує аналіз і допомагає зосередитися на важливих ділянках пам’яті, уникаючи зайвої інформації.
Дані всіх підтримуваних структур розмаплені їхнього зручнішого сприйняття. Наприклад, так виглядає відображення блоку оточення 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)
Присутня модуль деманглінгу стека викликів потоків, включаючи 32 і 64 біта + 32SEH (F4)
Результати пошуку виводяться на окремий діалог (Shift+F)
Ну і ось так виглядає перелік змін у виділених блоках з останньої перевірки (F5)
Process Memory Map — це не просто утиліта для аналізу пам’яті, а повноцінний інструмент дослідження внутрішньої архітектури процесів Windows. Вона поєднує точність низькорівневого аналізу з наочністю графічного інтерфейсу, дозволяючи одночасно бачити структуру пам’яті, стек потоків, підвантажені бібліотеки, системні області, імпорт і експорт функцій. Завдяки підтримці дизасемблера, аналізу перехоплень, DWARF та MAP-файлів, програма відкриває можливість глибоко розуміти поведінку будь-якого процесу в реальному часі.
Ця утиліта стане у пригоді дослідникам безпеки, реверс-інженерам, розробникам і фахівцям з налагодження, які прагнуть контролювати те, що відбувається «під капотом» Windows. Вона допомагає знаходити перехоплення, виявляти зміни у пам’яті, перевіряти стабільність програм і розуміти логіку роботи коду на найнижчому рівні.
Process Memory Map — приклад того, як інструменти з відкритим кодом можуть стати професійними рішеннями для аналітики пам’яті, реверсу та відлагодження. Проєкт активно розвивається, отримує оновлення й залишається одним із найцікавіших засобів для тих, хто працює з внутрішніми процесами Windows.