0

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

在系统内核中,我们可以挂钩 SSDT 函数“NtReadVirtualMemory/NtWriteVirtualMemory”来检查谁读写了应用程序的内存。

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

4

1 回答 1

4

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

要查看哪个进程对您的进程有句柄,

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