检测进程内存是否被操纵
Detect if process memory being manipulated?
我想知道如何监控另一个应用程序的进程内存,看看它是否被第三方操纵。例如在特定进程上调用ReadProcessMemory, WriteProcessMemory。例如,nProtect GameGuard可以检测游戏进程内存何时被操纵。
真正的答案可能很长,所以这里有一些简短的提示给你。
首先,你需要一些系统范围的钩子来连接这些函数,以及它们的底层构建块(Zw…, Nt……,甚至系统调用)。这应该由内核驱动程序完成。
第二,您需要一种方法来安装这个驱动程序,并随意删除它。这可以通过一个服务来完成。
第三,你需要一种在内核驱动程序和游戏之间进行通信的方法。在初始化阶段,游戏将安装驱动程序,并告诉它游戏正在运行的进程ID。然后,驱动程序将阻止其他进程对该特定进程的所有访问。
第四,你需要维护一个白名单。杀毒软件之类的应用程序确实需要窥探你的游戏。您的内核驱动程序必须允许通过这些检查。这就是nProtect和类似技术失败的地方。它们只是不断地与其他软件发生冲突。
第五,也许是时候考虑其他方法来保护你的游戏了。David Aucsmith的论文"防篡改软件:一种实现"值得一读。相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 输出操纵器 std::ends 是否向输出缓冲区添加空字符?
- 是否有任何操纵器将枚举值打印为字符串?
- Golang操纵函数中是否有一些方法,例如std :: bind在C 中
- 操纵器是否以某种方式转换流类型
- 是否可以使用用户定义的I / O操纵器操作某些文本
- 是否可以轮询标准C++iostream操纵器的状态
- 是否有粘性操纵器的官方资源?
- 检测进程内存是否被操纵