当使用 OpenProcess 从外部进程打开我的进程的新句柄时,如何收到通知?

问题描述 投票:0回答:1

我正在研究游戏反作弊解决方案,以便更好地掌握此类安全性的工作原理。许多作弊者使用的方法是使用

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 的语言,我真的不介意:))。

winapi memory memory-management heap-memory anti-cheat
1个回答
-1
投票

我有同样的问题。你解决这个问题了吗? msdn 上没有关于此功能的文档...您可以通过与 @RbMm 的聊天编写新代码吗

© www.soinside.com 2019 - 2024. All rights reserved.