首页
社区
课程
招聘
[讨论]在内核中读取指定进程内存
发表于: 2020-11-23 19:03 3817

[讨论]在内核中读取指定进程内存

2020-11-23 19:03
3817

在应用层一般是通过ReadProcessMomory来读取指定进程的内存数据。其函数原型如下:

1
2
3
4
5
6
7
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead
);

但有的时候,并不是所有的进程能都很轻晚的读取,这时需要提权等相关的操作。
但是如果在驱动层,就没有上面一系列的问题,我们完全可以任意读取进程的内存数据。
但在内核中有一个问题就是,在读取数据是,由于进程的调度,有的时候读的时候发生了进程切换,导致了读取应用层的数据时虽然地址正确,但读的数据却是别的进程的。

 

Windows给我们提供了一下函数KeStackAttachProcess,可使当前的内核环境附加到目标进程,这时候读的内存就是指定进程的内存数据了。

  • 根据进程ID使用PsLookupProcessByProcessId获取进程的指针PEPROCESS。
  • 分配非分页内存空间KAPC_STATE。
  • 使用KeStackAttachProcess将当前线程附加到指定的进程。
  • 读取内存….
  • 将当前线程从指定进程剥离KeUnstackDetachProcess
  • 资源回收非分页内存空间KAPC_STATE#

具体的代码可详见:https://www.bytekits.com/wdm/windrv-attach-to-process.html


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1028
活跃值: (720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
但凡R/W=0
2020-11-23 20:16
0
游客
登录 | 注册 方可回帖
返回
//