
Запись мини-дампа процесса на Ассемблере
Дампы или мини-дампы создаются обычно в случае аварийного падения процесса или системы. С помощью специальных программ по дампам можно восстановить примерное окружение, на котором произошел сбой, проанализировать его и установить процесс или код, который привел к критическому сбою.Для создания дампов памяти есть официально документированная функция MiniDumpWriteDump из динамической библиотеки dbghelp.dll. C ее помощью можно точно настроить, какие данные должны попасть в создаваемый дамп. Вызывается она примерно так (вариант для текущего процесса):
Code (Assembler) : Убрать нумерацию
- ; Создать файл для записи дампа
- invoke CreateFile,fname,GENERIC_WRITE,\
- FILE_SHARE_WRITE,0,CREATE_NEW,\
- FILE_ATTRIBUTE_ARCHIVE,0
- mov [desc],eax
- ; Получить ID текущего процесса
- invoke GetCurrentProcessId
- mov ebx,eax
- invoke GetCurrentProcess
- MiniDumpNormal = 0x00000000
- ; Сделать дамп
- invoke MiniDumpWriteDump,eax,ebx,[desc],MiniDumpNormal,0,0,0
- ; Закрыть файл
- invoke CloseHandle,[desc]
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump <PID> dump.dmp full
До некоторых пор таким способом можно было сохранить дамп процесса lsass.exe и затем при помощи какого-нибудь инструмента типа Mimikatz вытащить из него пароли учетных записей пользователей компьютера.
Но у нас тут не командная строка, а Ассемблер, да и малварой я не занимаюсь. Для вызова функции MiniDumpW требуется подготовить ей строку с параметрами. Она состоит из числового идентификатора процесса, с которого надо снять дамп, имени файла для записи дампа и типа создаваемого дампа - полный или мини.
Code (Assembler) : Убрать нумерацию
- buff rw MAX_PATH
- ; Маска для полного дампа
- mask1 du '%u my_dump_full.dmp full',0
- ; Маска для мини-дампа
- mask2 du '%u my_dump_mini.dmp ',0
Code (Assembler) : Убрать нумерацию
- ; Получить ID текущего процесса
- invoke GetCurrentProcessId
- mov ebx,eax
- ; Сформировать командную строку для полного дампа
- invoke wsprintf,buff,mask1,ebx
- add esp,12
- ; Сделать дамп
- invoke MiniDump,0,0,buff
- ; Сформировать командную строку для мини-дампа
- invoke wsprintf,buff,mask2,ebx
- add esp,12
- ; Сделать дамп
- invoke MiniDump,0,0,buff
В приложении примеры программ с исходными текстами, которые после запуска записывают дамп своего процесса.
Просмотров: 408 | Комментариев: 0

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий
Заполните форму для добавления комментария
