Windows系统下所有进程都可拒绝PROCESS_VM_READ访问权限吗?
你对PROCESS_VM_READ权限的推测是正确的,那份内存读取代码确实只能对持有该权限的目标进程生效。你提到的“游戏直接拒绝该权限拦外挂”的思路无法落地,核心有几个原因:
- 首先进程默认的DACL规则没有办法只拒绝外挂的访问请求。如果强行修改进程安全描述符,拦截所有外部进程的
PROCESS_VM_READ权限,首先会导致系统自身的正常组件无法运行:比如Windows的错误报告服务、输入法进程、第三方杀毒软件、系统调试组件等都需要读取目标进程的内存,全量拦截会直接导致游戏程序崩溃或者无法正常启动。 - 其次用户态的权限规则对高权限进程无效。只要外挂进程持有管理员权限,并且开启了
SeDebugPrivilege特权,就可以直接绕过目标进程的DACL校验,甚至直接修改目标进程的安全描述符获取任意权限,游戏进程自己设置的拒绝规则在更高权限的进程面前没有任何防御作用。 - 最后外挂有大量绕开权限校验的实现路径。比如常见的DLL注入技术,会把外挂代码直接注入到游戏进程内部运行,此时外挂读取的是当前进程自身的内存,完全不需要申请
PROCESS_VM_READ权限;更进阶的内核级外挂直接从系统内核层读取物理内存,用户态的权限控制机制根本无法触达这一层级的操作。
实际的游戏反作弊方案不会采用修改DACL的逻辑,而是通过多层防御实现:比如用户态Hook系统API拦截异常的句柄申请、内核层做内存访问的规则校验、定期扫描进程的代码段完整性、检测异常注入的模块等,实现对内存读取类外挂的拦截。
内容的提问来源于stack exchange,提问作者J.Todd
相关产品推荐
相关产品推荐

