如何保护客户端反作弊

第一,

我想表明我知道从客户端发送的任何信息都不可信,因为它可能是欺骗性的。 我对通过默默无闻的安全方法感兴趣,以阻止99.9%的潜在骗子和能够检测到实时绕过安全的程序。

我对此有一些想法包括validation它正在保护的游戏的文件和内存校验和以及任何潜在的作弊应用程序,允许客户端根据服务器的请求(通过TCP)扫描,两者都用于检测内存注入作弊或作弊记忆足迹。 因此,旁路黑客必须侦听在SSL上发送给它的所有TCP信息,然后通过反汇编加密/解密function来解密消息以了解它想要什么。 类似地,客户端本身可能是自我更改的,并允许它随机添加/删除function(但由服务器保留),以便欺骗学习如何绕过它。 这可能毫无意义?

我发现对于经验较丰富的人来说,这对于中等难度,所以我对其他可能难以绕过的方法持开放态度。

我只对可能的实现感兴趣,而不是对客户端的反热是不可能的,我只是想让它变得非常困难。

添加了我的世界和java标签,它是为了Minecraft,我知道社区足够大,有人可能会击败我的系统,但我希望通过使用不断的更新和变化,我可以通过聪明才智和坚持不懈来打败他们。

编辑:我发现这篇文章: 如何防止在我们的(多人)游戏中作弊? 我正在添加他的建议,所以不要重复,因为我正在寻找比明显更多的想法(我不确定他是否可以绕过)

1)打开所有其他进程,并挂钩它们的WriteProcessMemory函数,使它们无法在游戏进程中写入内存。 做得好这一步将阻止所有作弊和欺骗引擎的90%。

2)做同样的事情,挂钩各种鼠标和键盘仿真function。 这将阻止许多目标机器人和其他类型的自动化机器人。

3)在游戏自己的进程中加入VirtualProtectEx / VirtualAllocEx / etc函数,并监视哪些模块正在改变保护级别或分配新的内存块。 为了防止它在你的游戏进行大量分配时过于耗费CPU,你必须对此非常狡猾,但它可以完成。

4)挂钩LoadLibrary函数并监视动态加载的任何DLL,以防止DLL注入。

5)在游戏连接上使用一些轻量级多态编码。

6)使用一些反调试技术来防止调试器附加到您的进程。 谷歌反调试,你应该能够找到很多东西。

7)使用定制的专有PE打包器来防止有用的游戏拆卸。

8)了解处理透明度和alpha混合的OpenGL或Direct3D函数和方法。

9)如果使用着色器,则校验和着色器和着色器常量值。

10)对玩家角色使用额外的遮挡剔除技术,以防止在他们的视线被其他几何体阻挡时完全渲染它们。 它也可能对您的表现有所帮助,也可能没有帮助,但它可以防止许多问题。

如果您希望您的客户尊重您和游戏,您应该尊重您的客户并意识到您所看到的游戏客户端机器可能用于存储有价值的信息。

允许客户端扫描服务器随机给出的任何内存部分

客户端本身可能是自我更改的,并允许它随机添加/删除function

请注意,您不会在客户端计算机中打开攻击媒介。 阅读“随意给出的任何记忆部分”听起来很可怕。 你可以通过散列(不小)内存块并检查已知值来减少它。

让服务器发送“随机”代码可能会使您的软件看起来像病毒/僵尸网络到防病毒/安全工具。 它还使客户对潜在的利用敞开大门。

更新:

1)打开所有其他进程,并挂钩其WriteProcessMemory函数

如果您这样做,并且注入的代码中存在错误,则可能会破坏客户整个计算机的稳定性。 这看起来很激进。 你在运行什么版本的Windows? 有什么权限? 我很确定一个破解者可以安排从你没有权限挂钩的进程中运行他的漏洞利用(比如你在普通用户进程中运行的管理进程)。 此外,您还需要挂钩GetProcAddress ,原因很明显。

4)挂钩LoadLibrary函数并监视动态加载的任何DLL,以防止DLL注入。

这个没有听起来那么糟糕,因为你只需要在本地进程中执行此操作。

6)使用一些反调试技术来防止调试器附加到您的进程。

当然值得做(如果你有时间),但它只是一个经验丰富的cookies的减速带。 请记住,他始终可以从启动时跟踪您的代码并观察或绕过您的反调试。 (这需要时间,但有些破解者喜欢这个。)

7)使用定制的专有PE打包器来防止有用的游戏拆卸。

这是另一个可以让你注意到反病毒软件。

我个人认为观察记忆等没有意义。 我可以想象,当有人实现protocoll并使得一些废话也可能让你的服务器崩溃时你也需要处理它。

但你是对的,可以检查内存中是否有欺骗者通常使用的不良软件,例如像egoshooters中的wallhacks。

恕我直言,你需要检查来自客户端的数据是否看起来有效并做出反应而不是作弊。

关于您的更新:
请不要挂钩所有其他程序,这有点疯狂,也可能让你的程序被检测为根工具包或类似的东西。

我完全同意其他人的说法 – 其中一些(打开所有其他进程并挂钩WriteProcessMemory,鼠标/键盘仿真function)是疯狂和荒谬的 – 特别是因为用户可以通过删除特权到您的进程来绕过这一点。 这样做肯定会激起一些用户的愤怒。

但是,如果你真的想全力以赴做恶意软件之类的疯狂事情,为什么不编写一个内核驱动程序来修补Protected标志(适用于Windows Vista及更高版本)或修补OpenProcess? 后者是一种更常见的方法(见于AV软件和恶意软件); 先前不太常见,但仍然可行 – 如果您可以加载KMD,您可以修补标志并绕过Microsoft签名要求。