如何保护客户端防作弊



首先,

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

我对此有一些想法,包括通过允许客户端根据服务器的请求进行扫描(通过TCP),验证它所保护的游戏的文件和内存检查和任何潜在的作弊应用程序,以检测内存注入作弊和/或作弊内存占用。因此,旁路黑客必须监听SSL上发送给它的所有TCP信息,然后通过分解加密/解密函数来解密消息,以了解它想要什么。同样,客户端本身可能会自行更改,并允许其根据需要随意添加/删除功能(但由服务器保留),这样骗子就很难学会如何绕过它。这可能毫无意义?

我只发现这对更有经验的人来说是适度困难的,所以我对其他可能难以绕过的方法持开放态度。

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

添加了minecraft和java标签,这是针对minecraft的,我知道这个社区足够大,有人可能会打败我的系统,但我希望通过不断更新和更改,我可以通过独创性和毅力打败他们。

编辑:我发现了这个帖子:如何防止在我们的(多人)游戏中作弊?我添加了他的建议,以免重复,因为我正在寻找比显而易见的想法更多的想法(我不确定他的建议是否可以绕过)

1)打开所有其他进程,并挂接它们的WriteProcessMemory函数,这样它们就不能写入游戏中的内存过程如果做对了,这一步将阻止90%的作弊和作弊引擎。

2) 做同样的事情,挂接各种鼠标和键盘模拟功能。这将防止许多aimbots和其他类型的自动化机器人。

3) 在您的游戏自己的进程和监控哪些模块正在更改保护级别或分配新的内存块。你必须狡猾这样做是为了防止在游戏做了很多分配,但它是可以做到的。

4) 挂接LoadLibrary函数并监视以防止DLL注入。

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

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

7) 使用定制的专用PE封隔器,防止对你的游戏。

8) 连接到OpenGL或Direct3D函数和方法具有透明度和alpha混合。

9) 如果使用着色器,请检查着色器和着色器常量价值观

10) 对玩家角色使用额外的遮挡剔除技术以防止它们在视线它们被其他几何体阻挡。它可能对您的性能,但它将防止许多墙黑客。

如果你想让你的客户尊重你和游戏,你应该尊重你的客户,并意识到你所看到的游戏客户端机器可能被用来存储有价值的信息。

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

客户端本身可能是自我改变的,并允许其在随机中根据需要添加/删除特征

只需注意不要将攻击向量打开到客户端机器中。阅读"随机给出的记忆的任何部分"听起来都很可怕。你可以通过散列一个(不小的)内存块并检查一个已知值来减少这种情况。

让服务器发送"随机"代码可能会让你的软件看起来像反病毒/安全工具的病毒/僵尸网络。它还让客户端有很大的漏洞可供利用。

更新:

1)打开所有其他进程,并挂接它们的WriteProcessMemory函数

如果你这样做,并且你在注入的代码中有一个错误,你可能会破坏你客户的整个机器的稳定。这似乎很激进。你运行的是什么版本的Windows?拥有什么权限?我敢肯定,一个破解者可以安排从一个你没有权限挂钩的进程(比如一个管理进程,你在一个正常的用户进程中运行)运行他的漏洞。此外,出于显而易见的原因,您还需要挂接GetProcAddress

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

这个并没有听起来那么糟糕,因为你只需要在本地进程中完成。

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

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

7)使用自定义专有PE包装器,防止对游戏进行有用的拆卸。

这是反病毒软件会注意到的另一个问题。

我个人认为观察内存等等是没有意义的。我可以想象,当有人实现了协议并制造了一些可能会让你的服务器崩溃的垃圾时,你也需要处理它。

但你是对的,可以检查内存中是否有作弊者通常使用的坏软件,例如自我射击游戏中的wallhacks。

IMHO你需要检查来自客户端的数据是否有效,并对作弊做出反应。

关于您的更新:
请不要勾选所有其他程序,这有点疯狂,而且它可能会让您的程序被检测为根工具包或类似的东西。

我完全同意这里其他人的说法——其中一些(打开所有其他进程并挂接WriteProcessMemory、鼠标/键盘模拟功能)既疯狂又可笑——尤其是因为用户可以通过放弃进程的特权来绕过这一点。这样做肯定会激起一些用户的愤怒。

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

最新更新