Windows 内核 ReadProcessMemory() / WriteProcessMemory()?
由于这些 API,它在用户模式下变得简单明了。
如何从 Windows 内核模块读取/写入指定进程的用户空间内存?
驱动程序目标平台是windows xp/2003
It's simple and straightforward in user mode because of those APIs.
How do you read/write specified process's userspace memory from a windows kernel module?
driver target platform is windows xp/2003
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 NtWriteVirtualMemory / NtReadVirtualMemory 写入其他进程 - 您需要首先打开该进程的句柄。
请注意,如果您已经在该进程中,则可以直接写入 - 例如,如果您正在响应来自进程的 DeviceIoControl 请求,您可以直接写入用户模式地址,它们将位于该进程的地址空间中。呼叫您的进程。
Use NtWriteVirtualMemory / NtReadVirtualMemory to write to other processes - you will need to open a handle to the process first.
Note that if you're already in the process, you can just write directly - for example if you're responding to a DeviceIoControl request from a process you can write directly to user-mode addresses and they will be in the address space of the process that called you.
我也开始接触 Windows 驱动程序的世界,根据我所读到的内容,XxxProcessMemory 在 ntdll (R3-UserMode) 中调用 NtXxxVirtualMemory。
NtXxxVirtualMemory 也在 ntdll.dll 中调用 ZwXxxVirtualMemory (R0-KernelMode)。
我相信你应该使用 ZwXxxVirtualMemory。
I'm also starting in the world of windows drivers and from what I've read XxxProcessMemory calls NtXxxVirtualMemory in ntdll (R3-UserMode).
The NtXxxVirtualMemory calls the ZwXxxVirtualMemory (R0-KernelMode) also in the ntdll.
I believe you should use the ZwXxxVirtualMemory.
在内核中,ZwXxx 例程只是 NtXxx 例程的包装器,告诉内核调用者是内核模式组件,而不是用户应用程序。当调用来自用户模式时,内核会执行额外的安全检查。
因此,在内核中使用 ZwXxx。
从另一个进程读取/写入内存的另一种方法是:
In the krnel, ZwXxx routines are just wrappers around NtXxx ones, telling the kernel that the caller is a kernel mode component, rather than an user application. When a call comes from usermode, the kernel performs additional security checks.
So, use ZwXxx when in the kernel.
An alternative approach for reading/writing memory from/to another process is: