我想问你如何检测作弊引擎?
这是我发现的:
- 进程名称
- 进程主窗口标题
- 进程图标文件 (?)
- 处理EXE文件哈希
- 进程EXE全路径
你知道其他方法吗?
我不是该领域的专家,但我认为您提到的参数都不可靠。请记住,它是一个开源软件,因此可以轻松更改所有参数(自定义构建)以欺骗您。
我认为像 CE 这样的所有程序最常见的方面是DLL 注入(这是一个 Windows 术语,但在其他操作系统中也有类似的技术)。尽管这只是 CE 提供的功能之一。
因此,您必须检查进程地址空间中所有已加载的 DLL。您知道应该有什么以及其他任何内容都注入了您的进程。您可以通过Process Explorer进行检查(确实存在可用于检测的相关 API自动(即无需用户与图形软件交互),但对不起,我不是 Windows 人)。如果您想阅读更多内容,Chris Hoffman 有一篇很好的文章。
如果有人提出更好的答案,我很高兴听到。
您可以将CreateToolhelp32Snapshot与此 api 一起使用,您可以获取系统中运行的每个进程信息,您可以使用EnumWindows获取窗口名称您可以绕行挂钩LoadLibraryA和LoadLibraryExA来检测是否有任何 dll 被注入并使用IsDebuggerPresent和CheckRemoteDebuggerPresent来阻止进程调试
你说的大部分是外部扫描,基本上只是扫描作弊引擎的某些方面来检测它。
如果您计划为反作弊检测它,那么您提到的方法不走运,因为所有所说的东西都很容易被欺骗,如果您开始开发反作弊,我建议检测代码注入或十六进制修改之类的东西。
如果您在一个项目上工作只是为了检测 CE 的功能并且您不专注于停止作弊引擎,那么您可以编写一个脚本来检测进程名称或 PID,对于 EXE 文件哈希和 EXE 完整路径,这些都不可靠因为它们可以轻松更改整个脚本历史记录并通过图标文件检测进程,所以您也很不走运,因为您需要知道进程名称或 PID 以获取有关进程的信息并 RIP 图标以读取它然后匹配图像.
窗口标题也确实不可靠,因为当内存黑客和其他与 CE 相关的东西时,CE 标题会发生很大变化。
进程名称也非常不可靠,因为 CE 标题会在内存黑客等情况下发生变化。
检测 CE 的可靠方法是检测其调试器,尝试检测 CE 何时将其调试器附加到进程,并扫描 CE 注入和使用的未知库。
为了检测 CE,我建议您尝试检测 CE 调试器的基地址,您也可以尝试检测某些装配动作,例如这里
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
// NULL
originalcode:
mov [ecx+38],eax
mov eax,[edx+3C]
exit:
jmp returnhere
"process.exe" +B5B23
jmp newmem
nop
returnhere:
这是 CE 调试器使用的代码注入脚本
这只是您需要检测的一个示例,但是您需要一个非常优化的脚本和快速脚本来尝试扫描汇编字节和地址的过程以找到特定的字节数组。如果你打算这样做,我建议用 C++ 或 C# 进行编码,在这种情况下,Python 并不可靠,因为你需要扫描内存地址,并且使用当前用于 python 的内存黑客库工具集,它只是无法工作在这种情况下,我推荐 C++ 或 C#。