【发布时间】:2012-01-22 01:52:21
【问题描述】:
由于这些 API,它在用户模式下变得简单明了。
如何从 Windows 内核模块读取/写入指定进程的用户空间内存?
驱动目标平台是windows xp/2003
【问题讨论】:
-
您应该在捕获阶段在上下文中访问内存,之后您应该只对捕获的值进行操作。否则你有一个安全漏洞。
标签: windows kernel driver kernel-module
由于这些 API,它在用户模式下变得简单明了。
如何从 Windows 内核模块读取/写入指定进程的用户空间内存?
驱动目标平台是windows xp/2003
【问题讨论】:
标签: windows kernel driver kernel-module
使用 NtWriteVirtualMemory / NtReadVirtualMemory 写入其他进程 - 您需要先打开该进程的句柄。
请注意,如果您已经在进程中,则可以直接写入 - 例如,如果您正在响应来自进程的 DeviceIoControl 请求,您可以直接写入用户模式地址,它们将在地址中调用你的进程的空间。
【讨论】:
我也开始研究 Windows 驱动程序,从我读过的内容来看,XxxProcessMemory 在 ntdll (R3-UserMode) 中调用 NtXxxVirtualMemory。 NtXxxVirtualMemory 在 ntdll 中也调用了 ZwXxxVirtualMemory (R0-KernelMode)。
我相信你应该使用 ZwXxxVirtualMemory。
【讨论】:
在 krnel 中,ZwXxx 例程只是 NtXxx 的包装器,告诉内核调用者是内核模式组件,而不是用户应用程序。当调用来自用户模式时,内核会执行额外的安全检查。
所以,在内核中使用 ZwXxx。
从另一个进程读取/写入内存的另一种方法是:
【讨论】: