Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
218
Добавлен:
20.02.2016
Размер:
75.78 Кб
Скачать

2. Получение имени текущего процесса

Расположение имени процесса не документировано. Известно только , что оно расположено недалеко от начала структуры EPROCESS, описывающей процесс. Кроме того, известно, что для всех процессов для данного сеанса работы компьютера это смещение одинаково. Отсюда вытекает принцип поиска имени: для процесса с известным именем ищем это имя в памяти, полученное смещение используем для получения имен других процессов.

Проще всего поиск смещения осуществлять в функции DriverEntry: известно, что эта функция работает в системном контексте, т.е. в контексте процесса “System”. Соответственно, запрашиваем адрес структурыEPROCESSдля процесса “System” путем вызова =PsGetCurrentProcess(), производим поиск строки “System” от начала этой структуры, запоминаем полученное смещение.

В любом неизвестном контексте процесса опять запрашиваем адрес его структуры EPROCESS, по запомненному смещению в ней будет лежать имя процесса.

//----------------------------------------------------------------------

ULONG GetProcessNameOffset( VOID )

{

PEPROCESS curproc;

int i;

curproc = PsGetCurrentProcess();

//

// Scan for 12KB, hopping the KPEB never grows that big!

//

for( i = 0; i < 3*PAGE_SIZE; i++ ) {

if( !strncmp( SYSNAME, (PCHAR) curproc + i, strlen(SYSNAME) )) {

return i;

}

}

//

// Name not found - oh, well

//

return 0;

}

Лабораторная работа №6. Получение копии адресного пространства указанного процесса

Навыки, получаемые при реализации данной работы:

  1. Получение на прикладном уровне списка процессов, запущенных на компьютере, и их PID.

  2. На уровне драйвера – получение адреса структуры PEBпоPID.

  3. На уровне драйвера – переключение адресного пространства на нужный процесс по его PIDс помощью недокументированных функцийKeAttachProcess()/KeDetachProcess().

  4. работа с деревом виртуальных адресных дескрипторов процесса (VAD): получение снимка адресного пространства на уровнеVAD(VirtualAddressDescriptors).

  5. Работа с каталогом страниц.

  6. Работа с файлами на уровне драйвера.

Дополнительная информация: “WindowsNTNativeAPI.pdf”

Драйвер-фильтр получения копии адресного пространства на уровне vaDи на уровне каталога-таблиц страниц.

Принцип реализации:

При загрузке драйвер должен создать эксклюзивное устройство GuiDevice, которое будет обрабатывать 1 код управления – получить копию адресного пространства указанного процесса.

Получив из управляющей программы идентификатор процесса (PID), переключиться на адресное пространство этого процесса

Найти первый элемент дерева VAD, провести полный обход дерева с сохранением каждого блока памяти, описываемого элементом VAD, в файл. В другой файл писать структуру блоков (адрес и размер блока в адресном пространстве, смещение до начала этого блока в файле).

Либо

Проход по всем элементам таблиц страниц и сохранение в файл присутствующих страниц.

Восстановить прежнее адресное пространство.

Модификация диалоговой прикладной программы управления драйверами для тестирования драйвера получения копии адресного пространства

Через вызов NtQuerySystemInformationреализовать получение списка всех процессов и ихPID.

Обновлять содержимое элемент управления со списком процессов по нажатию кнопки.

Реализовать кнопку, при нажатии на которую драйверу отправляется команда сохранения адресного пространства указанного процесса в файл. Процесс выбирать из элемента управления со списком процессов. Процесс однозначно идентифицируется значением PID, именно его отправлять в драйвер.

Соседние файлы в папке Лабы по драйверам