谁读/写我的应用程序的内存

时间:2013-03-28 06:52:18

标签: windows

每个应用程序都有自己的内存空间。在Windows中,所有进程都可以使用“OpenProcess”和“ReadProcessMemory / WriteProcessMemory(NtReadVirtualMemory / NtWriteVirtualMemory)”来读取或写入应用程序的内存。

在系统内核中,我们可以挂钩SSDT函数“NtReadVirtualMemory / NtWriteVirtualMemory”来检查谁读取和写入Application的内存。

我有一个问题:有没有办法在这个应用程序的过程中检查谁读取和写入Application的内存?

1 个答案:

答案 0 :(得分:4)

没有。不是没有挂钩其他进程/内核(通过挂钩SSDT,就像你在问题中提到的那样)。您可以检查哪个进程具有应用程序句柄,但这并不一定意味着它们实际上已经读/写任何内容。

要查看哪个流程可以处理您的流程,

  1. 使用NtQuerySystemInformation(未记录的)为SystemInformationClass参数调用SystemHandleInformation,以枚举系统上打开的所有句柄。
  2. 通过PROCESS_QUERY_INFORMATION访问DuplicateHandle来复制所有句柄(如果我没记错的话,这会过滤掉所有非流程句柄)
  3. 对于每个重复的句柄,请致电GetProcessId以获取进程ID。
  4. 如果process-id与您的应用程序的process-id匹配,那么我们可以通过查找{{1}返回的原始ProcessId结构的SYSTEM_HANDLE_INFORMATION字段来获取原始句柄的所有者}}。