Blog. Just Blog
Построение карты памяти процесса
Умение работать с памятью сторонних процессов - полезный навык адепта Темной стороны Силы. Таким способом можно найти нужные данные, хранящиеся в памяти, например, расшифрованные файлы, изображения, пароли, и еще много чего вкусного. Также этот навык пригодится при создании распаковщиков, лоадеров для программ и трейнеров для различных игр. Я привел лишь несколько примеров, на практике их можно найти гораздо больше.Для построения карты памяти процесса используется функция VirtualQueryEx и специальная структура MEMORY_BASIC_INFORMATION. В FASM она как обычно не определена, придется сделать это самостоятельно в сегменте данных:
Code (Assembler) : Убрать нумерацию
- ; Структура для чтения памяти процесса
- struct MEMORY_BASIC_INFORMATION
- BaseAddress dd ?
- AllocationBase dd ?
- AllocationProtect dd ?
- RegionSize dd ?
- State dd ?
- Protect dd ?
- Type dd ?
- ends
- ; Структура для чтения памяти процесса
- mbi MEMORY_BASIC_INFORMATION
Теперь у нас есть все инструменты и условия для работы, можно приступать к самому действу. Переменные, используемые в примере: ptMemory - указатель на текущий блок памяти, hProcess - хэндл исследуемого процесса, структура mbi определена выше.
Code (Assembler) : Убрать нумерацию
- ...
- ; Начало памяти процесса
- mov [ptMemory],0
- .scan_memory:
- ; Получить данные о памяти процесса
- invoke VirtualQueryEx, [hProcess], [ptMemory], mbi,\
- sizeof.MEMORY_BASIC_INFORMATION
- ; Сканирование закончено?
- or eax,eax
- jz .stop_scan
- ...
- ; Здесь можно выполнять все необходимые действия с блоком памяти:
- ; проверить или изменить его атрибуты, записать дамп памяти на
- ; диск, поискать нужные сигнатуры и данные...
- ...
- ; Прибавить к указателю размер прочитанного региона
- mov eax,[mbi.RegionSize]
- add [ptMemory],eax
- jmp .scan_memory
- .stop_scan:
- ...
В приложении консольная программа с исходниками. После запуска она предлагает выбрать исполняемый файл, запускает его и показывает на экране его карту памяти с указанием адресов, размеров, типа и атрибутов каждого блока.
Просмотров: 2230 | Комментариев: 5
Комментарии
Отзывы посетителей сайта о статье
Чтец
(09.04.2010 в 19:36):
Если в ближайшее время будет статья на тему лоадеров, то если будет такая возможность затроньте также, возможность лоадером управлять программой и добавьте ссылки на полезную литературу и другие источники заслуживающие внимания на эту тему, спасибо.
ManHunter
(01.04.2010 в 16:50):
Про трейнеры статья будет обязательно, про лоадеры тоже. Про распаковщики вряд ли.
Чтец
(01.04.2010 в 16:48):
Всё ясно. Я так понимаю, что эта статья, как минимум одна из серии на тему Память чужого процесса?
ManHunter
(01.04.2010 в 16:43):
Это я неправильно сформулировал мысль. VirtualQueryEx для получения инфрмации о блоке памяти, ReadProcessMemory - для чтения содержимого этого блока.
Чтец
(01.04.2010 в 16:42):
Отличная тема, спасибо. Почему не используется ReadProcessMemory вместо VirtualQueryEx, есть какое то принципиальное значение?
Второй вопрос: Будет ли статья на тему создания распаковщиков, лоадеров для программ и трейнеров?
Второй вопрос: Будет ли статья на тему создания распаковщиков, лоадеров для программ и трейнеров?
Добавить комментарий
Заполните форму для добавления комментария
Пример программы с исходным текстом (FASM)