我目前正在做一个关于Windows rootkits的讲座(和学习)。我能够挂钩NtWriteFile的SSDT条目并在WinDbg上显示一条简单的消息,但是我现在想知道在将参数传递给原始函数之前更改参数的最佳(也是最安全的)方法是什么。在本例中,如果缓冲区包含"My String“,我将尝试更改缓冲区。如何安全地交换Buffer的内容?
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);
...
}谢谢。
发布于 2018-12-16 04:21:50
首先,像这样直接访问(读/写) UserMode指针有一个问题,你首先想要探测读的指针,如果你写它,你还需要使用内核API ProbeForRead和ProbeForWrite探测写。
其次,我不想向UserMode提供的缓冲区写入修改后的值,而是分配一个新的缓冲区,然后释放它,在我看来这是最安全的方式。
https://stackoverflow.com/questions/53769130
复制相似问题