我正在研究游戏反作弊解决方案,以便更好地掌握此类安全性的工作原理。许多作弊者使用的方法是使用
OpenProcess
打开进程句柄,以便他们可以使用 ReadProcessMemory
直接读取数据:
var procHandle = Kernel32.OpenProcess(
ProcessAccessRights.MemoryRead,
false, process.Id
);
(C# 游戏作弊片段)
例如,这可以用于检索游戏世界中各种实体的位置,而无需注入任何类型的 DLL;使用这种方法的作弊称为“外部”作弊(与将 DLL 注入进程的“内部”作弊相对)。
在我的反作弊引擎中,我想检测此类操作。我无法找到任何 WinAPI 方法在打开新的内核进程句柄时调用任何类型的回调。如果这样的方法不存在,我愿意使用轮询和枚举(检查每个进程句柄以查看它是否引用我的游戏进程,以及它是否具有
PROCESS_VM_READ
访问权限。但是,我不能'找不到一个函数来获取所有此类句柄。
我非常确定 Valve Anti-Cheat 或 BattleEye 等反作弊引擎使用这种检测;因此,我认为这在用户模式下是可能的,因为据我所知,VAC 不安装任何类型的内核驱动程序。如果这也是不可能的,当调用
ReadProcessMemory
时发出通知也可以,但我怀疑这是可能的。
文档中对可以完成此类任务的 WinAPI 方法的任何引用都将受到赞赏,或者可以演示此类行为的片段(以任何可以使用 WinAPI 的语言,我真的不介意:))。
我有同样的问题。你解决这个问题了吗? msdn 上没有关于此功能的文档...您可以通过与 @RbMm 的聊天编写新代码吗