挂钩 NtReadFile。更改文本

Hook NtReadFile. Change text

我想连接 NtReadFile 以便它可以更改从文件中读取的文本。但是当我尝试读取文件时,我收到消息 "This application has failed to start because the application configuration is incorrect".

这是我的代码。怎么了?

NTSTATUS HookNtReadFile (
    IN HANDLE FileHandle,
    IN HANDLE Event,
    IN PIO_APC_ROUTINE ApcRoutine,
    IN PVOID ApcContext,
    OUT PIO_STATUS_BLOCK IoStatusBlock,
    OUT PVOID Buffer,
    IN ULONG Length,
    IN PLARGE_INTEGER ByteOffset,
    IN PULONG Key) 
{
    NTSTATUS retstatus;

    retstatus = glRealNtReadFile (FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, ByteOffset, Key);

    IoStatusBlock->Information = 3;
    Length = 3;
    Buffer = ExAllocatePool(PagedPool, Length);
    Buffer = "hi";

    return retstatus;
}

http://www.rohitab.com/discuss/topic/40492-my-first-kernel-mode-rootkit/

我知道它看起来很狡猾 link。但您所寻求的答案,只需点击一下即可找到。

这显然行不通:

Buffer = ExAllocatePool(PagedPool, Length);
Buffer = "hi";

您正在分配内存,然后立即丢弃该地址。这不是您在 C 中复制字符串的方式。您需要使用 strcpy,或者最好使用更安全的替代方法之一。

还值得指出的是,本机 API 不使用 ASCII 字符。一般来说,所有字符串都应该是宽字符串。

最后,如果 return 代码指示成功,并且(正如其他人在评论中指出的那样)当文件句柄与您正在尝试的特定文件相关联时,您应该只更改值改变。