首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在挂接SSDT之后,在将参数传递给NtWriteFile之前修改参数

在挂接SSDT之后,在将参数传递给NtWriteFile之前修改参数
EN

Stack Overflow用户
提问于 2018-12-14 03:51:40
回答 1查看 185关注 0票数 0

我目前正在做一个关于Windows rootkits的讲座(和学习)。我能够挂钩NtWriteFile的SSDT条目并在WinDbg上显示一条简单的消息,但是我现在想知道在将参数传递给原始函数之前更改参数的最佳(也是最安全的)方法是什么。在本例中,如果缓冲区包含"My String“,我将尝试更改缓冲区。如何安全地交换Buffer的内容?

代码语言:javascript
复制
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);
    ...
}

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-16 04:21:50

首先,像这样直接访问(读/写) UserMode指针有一个问题,你首先想要探测读的指针,如果你写它,你还需要使用内核API ProbeForReadProbeForWrite探测写。

其次,我不想向UserMode提供的缓冲区写入修改后的值,而是分配一个新的缓冲区,然后释放它,在我看来这是最安全的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53769130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档