我目前正在做关于 Windows 的 rootkit 的讲座(和学习)。我能够挂钩 NtWriteFile 的 SSDT 条目并在 WinDbg 上显示一条简单的消息,但我现在很好奇在将参数传递给原始函数之前更改参数的最佳(也是最安全)方法是什么。在此示例中,如果缓冲区包含“我的字符串”,我将尝试更改它。我怎样才能安全地交换 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);
...
}
谢谢你。