标准黑客案例。Hack 注入一个已启动的游戏进程,并使用WriteProcessMemory
调用写入进程内存。
情况是这样的:
- 我们正在托管一个游戏服务器
- 客户端与他们的游戏一起加入服务器,他们可以使用各种黑客来破坏他们的游戏
- 我们没有机会改变游戏源,就这样。但是,我们确实有可能在客户端加入服务器之前强制运行我们的程序。
所以说清楚一点:我们不能混淆游戏内存,但我们确实有可能同时运行一个单独的程序。我已经尝试使用EnumProcessModules
列出所有进程 DLL 的调用,但没有成功。在我看来,黑客直接注入进程内存,因此未被检测到。在做了很多“谷歌研究”之后,我得出了几个选择:
扫描正在运行的进程名称、游戏目录中的文件、文件的字节模式、正在运行的进程的字节模式......这个任务非常耗时,因为我必须获取所有可用黑客的样本并在每次新的时候更新我们的程序出来。所有 hack 信息都需要存储在源中,这会使程序变得非常大。
ReadProcessMemory
用于监视众所周知的内存偏移量的变化(黑客通常使用相同的偏移量来实现某些目标)。与正常运行相比,我需要运行一些 hack,监控行为并获取 hack 行为样本。该程序基本上会做与黑客相同的事情,但相反。检测
WriteProcessMemory
内存中的调用。我不确定这是否会从合法的 DLL 中带来一些误报,但这个想法似乎很有趣。我将如何扫描此调用的进程内存?如何获取它的字节值?
这是一个 hack 调用的示例:
WriteProcessMemory(phandler,0xsomeoffset,&datatowrite,...);
偏移量实际上至少在低级黑客中是固定的。如果我们能以某种方式重新排列堆栈或以某种方式将其向下推,它可能已经搞砸了 hack 以使游戏崩溃。
还有一些事实:
- 很少发布新的黑客攻击,并且有固定数量的公开可用并且实际有效。他们中的大多数也以类似的方式工作。
- 目标是检测黑客或使其无法正常工作
我的问题是,有什么好的方法可以在这里实现我的目标?欢迎任何会混淆黑客或有助于检测黑客被注入或内存被更改的想法。
我知道没有办法拥有一个 100% 安全的反黑客系统,但如果我们只抓住那些使用公开黑客的人,那已经是 95% 的黑客,我们不在乎少数聪明的黑客。