13

第一的,

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

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

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

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

添加了 minecraft 和 java 标签,它适用于 Minecraft,我知道社区足够大,有人可能会击败我的系统,但我希望通过使用不断的更新和更改,我可以通过独创性和毅力击败他们。

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

1)打开所有其他进程,并hook它们的WriteProcessMemory函数,使它们无法写入您游戏进程中的内存。正确完成这一步将阻止 90% 的所有作弊和作弊引擎。

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

3) 在您的游戏自己的进程中挂钩 VirtualProtectEx/VirtualAllocEx/etc 函数,并监控哪些模块正在更改保护级别或分配新的内存块。当您的游戏进行大量分配时,您必须巧妙地处理这一点,以防止它过于占用 CPU,但这是可以做到的。

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

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

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

7) 使用定制的专有 PE 打包程序来防止对您的游戏进行有用的反汇编。

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

9)如果使用着色器,校验和你的着色器和着色器常数值。

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

4

3 回答 3

8

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

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

客户端本身可能会自行更改,并允许它根据需要随机添加/删除功能

请注意不要在客户端机器中打开攻击向量。阅读“随机给出的任何内存部分”听起来很可怕。您可以通过散列(不小)内存块并检查已知值来减少这种情况。

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

更新:

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

如果你这样做,并且你在注入的代码中有一个错误,你可能会破坏你客户的整个机器的稳定性。这似乎具有侵略性。您在哪个版本的 Windows 上运行?有什么权限?我很确定破解者可以安排从您无权挂钩的进程(例如您在普通用户进程中运行的管理进程)运行他的漏洞利用程序。GetProcAddress此外,出于明显的原因,您还需要挂钩。

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

这并不像听起来那么糟糕,因为您只需要在本地进程中执行此操作。

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

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

7) 使用定制的专有 PE 打包程序来防止对您的游戏进行有用的反汇编。

这是另一个会让您被防病毒软件注意到的问题。

于 2012-12-11T19:14:21.390 回答
1

我个人认为观察内存等没有意义。我可以想象,当有人实现协议并做出一些废话时,你也需要处理它,这也可能让你的服务器崩溃。

但是您是对的,可以检查内存中是否存在通常由作弊者使用的不良软件,例如 egoshooters 中的 wallhacks。

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

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

于 2012-12-11T19:10:12.577 回答
0

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

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

于 2012-12-22T04:43:14.183 回答