首页 > 解决方案 > 应用程序可以做些什么来阻止 ReadProcessMemory 中的其他进程?

问题描述

Windows Internals (7th edition)中,作者提到:

线程不能意外引用另一个进程的地址空间 [...] 除非另一个进程提供其私有地址空间的一部分 [...] 或除非一个进程有权打开另一个进程以使用跨进程内存功能,例如 ReadProcessMemory 和 WriteProcessMemory(使用相同用户帐户运行的进程,而不是在 AppContainer 或其他类型的沙箱内,默认情况下可以获得,除非目标进程具有某些保护)。

(第 1 章,用户模式调度线程,添加了重点)。

我可以添加到我的进程中以防止其他进程调用ReadProcessMemory和的那些“某些保护”是什么WriteProcessMemory?默认情况下是否启用此保护?

这是否意味着我可以编写一个粗略的程序来从其他应用程序中刮取内存而无需管理员?

标签: windowsprocessreadprocessmemory

解决方案


您必须以管理员身份运行才能写入外部进程的内存。但您无需以管理员身份运行即可阅读。

是的,您可以编写抓取外部进程内存的程序。

您在用户模式中所做的所有保护都可以轻松地从用户模式绕过。

如果你想阻止人们在你的进程上使用 ReadProcessMemory,你需要制作一个内核驱动程序来剥离 OpenProcess() 打开的句柄。

作为一种更简单的用户模式保护,您可以枚举所有打开的进程句柄,并在为您的进程找到具有您不喜欢的权限的句柄时关闭您的进程(来自看起来有风险的进程)。对于有技能的人来说,这仍然只是一个小烦恼。


推荐阅读