在应用层一般是通过ReadProcessMomory来读取指定进程的内存数据。其函数原型如下:
BOOL
ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead
);
但有的时候,并不是所有的进程能都很轻晚的读取,这时需要提权等相关的操作。但是如果在驱动层,就没有上面一系列的问题,我们完全可以任意读取进程的内存数据。但在内核中有一个问题就是,在读取数据是,由于进程的调度,有的时候读的时候发生了进程切换,导致了读取应用层的数据时虽然地址正确,但读的数据却是别的进程的。
Windows给我们提供了一下函数KeStackAttachProcess,可使当前的内核环境附加到目标进程,这时候读的内存就是指定进程的内存数据了。
具体的代码可详见:https://www.bytekits.com/wdm/windrv-attach-to-process.html
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课