每个应用程序都有自己的内存空间。在Windows中,所有进程都可以使用“OpenProcess”和“ReadProcessMemory / WriteProcessMemory(NtReadVirtualMemory / NtWriteVirtualMemory)”来读取或写入应用程序的内存。
在系统内核中,我们可以挂钩SSDT函数“NtReadVirtualMemory / NtWriteVirtualMemory”来检查谁读取和写入Application的内存。
我有一个问题:有没有办法在这个应用程序的过程中检查谁读取和写入Application的内存?
答案 0 :(得分:4)
没有。不是没有挂钩其他进程/内核(通过挂钩SSDT,就像你在问题中提到的那样)。您可以检查哪个进程具有应用程序句柄,但这并不一定意味着它们实际上已经读/写任何内容。
要查看哪个流程可以处理您的流程,
NtQuerySystemInformation
(未记录的)为SystemInformationClass
参数调用SystemHandleInformation
,以枚举系统上打开的所有句柄。PROCESS_QUERY_INFORMATION
访问DuplicateHandle
来复制所有句柄(如果我没记错的话,这会过滤掉所有非流程句柄)GetProcessId
以获取进程ID。ProcessId
结构的SYSTEM_HANDLE_INFORMATION
字段来获取原始句柄的所有者}}。