|
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 1
|
|
C/C++ Можно ли сделать дамп памяти пользовательского процесса из драйвера режима ядра?03.04.2022, 19:21. Показов 2241. Ответов 3
В рамках курсовой нужно сделать драйвер антивируса под Windows10. Необходимо реализовать отслеживание создания процессов и копирование его адресного пространства (дамп памяти), и в зависимости от дампа решить убивать процесс или разрешить ему выполнение. Отследить создание процесса можно с помощью PsSetCreateProcessNotifyRoutineEx. Я понял как завершить процесс, но как его приостановить для создания дампа, и чтоб потом ему можно было продолжить выполнение, мне не понятно. И вообще как сделать дамп памяти пользовательского процесса из драйвера ядра? И возможно ли это? Как я понял, функция MiniDumpWriteDump работает только в пользовательском режиме, а чего-то другого я найти не смог.
0
|
|
| 03.04.2022, 19:21 | |
|
Ответы с готовыми решениями:
3
Просмотр файла дампа памяти процесса пользовательского режима Как по хэндлу процесса сделать дамп его памяти и записать его в файл? Дамп памяти процесса |
|
Эксперт Hardware
|
|||||||
| 04.04.2022, 04:29 | |||||||
|
В теории это выглядит приблизительно так.. PsSetCreateProcessNotifyRoutineEx() возвращает вам PID нужного процесса, и остаётся передать его в PsLookupProcessByProcessId() - так получите указатель на структуру EPROCESS клиента. Далее подключаетесь к процессу через KeStackAttachProcess(), проверяете доступ к региону памяти через ProbeForRead(), и если всё ок, то пытаемся прочитать эту память удобным способом типа MmCopyVirtualMemory() или RtlCopyMemory(). В сети имеется подобный пример:
1
|
|||||||
|
Эксперт Hardware
|
||||||||||||||||||||||||||
| 04.04.2022, 07:55 | ||||||||||||||||||||||||||
|
Кстати если это курсовая, можно чуть расширить возможности драйвера..
Из примера выше видно, что придётся дампить мин. 2 Gb доступной процессу памяти, что не очень удобно. Из всего пула, процесс на данный момент может реально использовать лишь некоторую часть, например порядка 100 Mb памяти, а остальное принадлежит процессу, но лежит в резерве, пока её не выделишь через VirtualAlloc().Поскольку уже имеется линк на EPROCESS, можно вычислить страницы реально используемой вирт.памяти, и в цикле сдампить только их, отсеив таким образом свободные. Если запустить отладчик WinDbg, запросить инфу о вcех процессах !process 0 0, найти среди них свой и просмотреть его структуру, можно обнаружить в ней следующие поля:
в том числе "VirtualSize", и адрес списка VAD (Virtual Address Descriptor):
Все активные страницы процесса хранятся в его древовидном списке VAD, а адрес на этот список прописан в той-же структуре EPROCESS. Поскольку PsLookupProcessByProcessId() уже вернула нам указатель на эту структуру, остаётся вычислить смещение поля "VadRoot" (корень древа), где и будут лежать номера активных вирт.страниц. Значимые поля структуры представлены ниже:
WindDbg имеет расширение !vad для просмотра древа, и в моём случае оно выглядит так (адрес см. в первом логе, или записи выше):
В столбцах "Start\End" лежат уже адреса страниц, относительно базы загрузки образа в память. Всё это теория и уверен, что в ядре имеются спец.функции для поиска валидных страниц процесса.
2
|
||||||||||||||||||||||||||
|
Эксперт Hardware
|
|
| 04.04.2022, 08:01 | |
|
В защищённом режиме для обхода древа VAD используется функция
VirtualQuery(). Для драйверов можно поискать в Ntoskrnl.exe что-то аналогичное.
2
|
|
| 04.04.2022, 08:01 | |
|
Помогаю со студенческими работами здесь
4
Как можно прочесть сохраненный в файл дамп памяти с помощью средств Delphi? Как получить дамп памяти программы, чтоб потом можно было его сохранить и проанализировать? Помогите с драйверами режима ядра Можно ли как получать уведомление о изменении области памяти другого процесса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|