Изменение параметров перед их передачей в NtWriteFile после подключения SSDT. - PullRequest
0 голосов
/ 13 декабря 2018

В настоящее время я работаю над лекцией (и изучаю) о руткитах для Windows.Мне удалось подключить запись SSDT для NtWriteFile и отобразить простое сообщение на WinDbg, но теперь мне любопытно, каким будет лучший (и самый безопасный) способ изменения параметров перед передачей их исходной функции.В этом примере я пытаюсь изменить буфер, если он содержит «My String».Как я могу безопасно поменять содержимое буфера?

NTSTATUS ZwWriteFileHook(
IN HANDLE           FileHandle,
IN HANDLE           Event,
IN PIO_APC_ROUTINE  ApcRoutine,
IN PVOID            ApcContext,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN PVOID            Buffer,
IN ULONG            Length,
IN PLARGE_INTEGER   ByteOffset,
IN PULONG           Key
) 
{
    ... 
    if (!strncmp((PCHAR) Buffer, "My String", Length)) {
        // Modify parameters here
    }
    ntStatus = ((PZwWriteFile) zwWriteFileOld)(FileHandle, Event,
    ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, ByteOffset,
    Key);
    ...
}

Спасибо.

1 Ответ

0 голосов
/ 15 декабря 2018

Прежде всего, существует проблема с прямым доступом к указателям UserMode (чтение / запись), сначала вы хотите проверить указатель на READ, если вы записываете в него, вам также необходимо проверить WRITE, используяAPI ядра ProbeForRead и ProbeForWrite .

Во-вторых, я скорее не пишу в предоставленный буфер UserMode измененное значение, но выделяю новый буфер и затем освобождаю его впоследствии, вНа мой взгляд, это самый безопасный способ.

...