windows - 应用程序可以做些什么来阻止 ReadProcessMemory 中的其他进程?
问题描述
在Windows Internals (7th edition)中,作者提到:
线程不能意外引用另一个进程的地址空间 [...] 除非另一个进程提供其私有地址空间的一部分 [...] 或除非一个进程有权打开另一个进程以使用跨进程内存功能,例如 ReadProcessMemory 和 WriteProcessMemory(使用相同用户帐户运行的进程,而不是在 AppContainer 或其他类型的沙箱内,默认情况下可以获得,除非目标进程具有某些保护)。
(第 1 章,用户模式调度线程,添加了重点)。
我可以添加到我的进程中以防止其他进程调用ReadProcessMemory
和的那些“某些保护”是什么WriteProcessMemory
?默认情况下是否启用此保护?
这是否意味着我可以编写一个粗略的程序来从其他应用程序中刮取内存而无需管理员?
解决方案
您必须以管理员身份运行才能写入外部进程的内存。但您无需以管理员身份运行即可阅读。
是的,您可以编写抓取外部进程内存的程序。
您在用户模式中所做的所有保护都可以轻松地从用户模式绕过。
如果你想阻止人们在你的进程上使用 ReadProcessMemory,你需要制作一个内核驱动程序来剥离 OpenProcess() 打开的句柄。
作为一种更简单的用户模式保护,您可以枚举所有打开的进程句柄,并在为您的进程找到具有您不喜欢的权限的句柄时关闭您的进程(来自看起来有风险的进程)。对于有技能的人来说,这仍然只是一个小烦恼。
推荐阅读
- c# - ObserveEveryValueChanged 未收到所有更改
- javascript - Angular 7,使用来自对象的一些值创建新对象
- python-3.x - 在使用 COPY 将大表读入 pandas 数据帧时使用参数化 SQL 查询
- c# - 如何使用 LINQ/Divide and Conquer 方法以优雅的方式迭代一个循环或无循环
- sql - oracle如何逐日选择24小时时间间隔?
- python-3.x - How can I make the largest number with most numbers of divisors appear in the output?
- python - dask 将数据帧导出到远程存储(S3)
- routing - 从哪里获得已注册 ASN(自治系统编号)的完整列表?
- reactjs - 如何将一些参数(动态路径)从 mapDispatchToProps 发送到 watcherSaga/workingSaga(中间件)?
- python - 从字典中获取多个键