通过代码生成防止作弊

Cheat Prevention by Code Generation

这种反作弊技术是否适用于使用私人服务器(公开未知的可执行文件)的多人游戏:

当客户端启动游戏时,它将每天自动更新(使用启动器)。服务器也会自我更新。 除非有真正的补丁,否则更新仅包含游戏对象内存布局、网络代码和着色器的更改。 这是使用自动生成和随机化 (C++) 类 的自动化系统完成的。 也许它还可以将假对象添加到层次结构中,使识别对象变得更加困难。

我希望通过这种方式比破解者更快地更新游戏,并将进行逆向工程、更新和 publish/update 新作弊。

这行得通吗?黑客能否以某种方式绕过此机制? 他们会每天做这项工作还是可以在某个时候自动完成? 我可以做些什么来改进这个系统?

从长远来看,随机化内存布局似乎无济于事,因为通过跟踪可执行文件中的函数调用并从该代码中提取指针偏移,可以或多或少地轻松提取布局。 所以为了有效地防止这种情况,调用的结构和代码本身也需要随机化。

有什么好的方法吗?这对自动破解有效吗?

Client-side 技术军备竞赛是一种完全错误的方式。你 永远不会 比一群有太多空闲时间的孩子更好或更快。你无法与一群没有成本(除了不做功课)的攻击者竞争,而你的行为会花费你的时间和金钱。这是一场你会输的比赛,无论是在经济上还是在最终结果上。

人们可以通过两种方式作弊:

  1. 获得其他人没有的信息(例如看穿墙壁)
  2. 将其他人必须手动完成的游戏玩法自动化 ("farming")

有两种方法可以阻止人们这样做:

  1. 停止向客户提供该信息。将其保存在服务器上。
  2. 停止让游戏中没有乐趣的部分。人们只会将无聊的部分自动化,他们不会为了无聊而玩游戏。让它变得有趣,没有人会浪费时间尝试自动化。如果您的游戏出现自动化,请认真思考如何改进您的游戏,而不是在技术上与机器人作斗争。

记住那句老话:"The client is in the hands of the enemy."

我不知道这样的系统是否能成功避免作弊,但我会担心生产和维护这样的系统。比如你说

This is done using an automated system that auto generates and randomizes (C++) classes. Maybe it could also add fake objects to the hierarchy to make identifiyng objects harder.

  • 随机化 class 是什么意思?这绝非微不足道。
  • 最终会发现假对象(死代码)

无论如何,我怀疑您是否能够对代码的关键部分执行某种有效的混淆,而不会出现严重的缺陷,例如性能下降或完全错误的计算(例如浮点运算)。如果您有两种不同的机制来计算相同的值,您将最终对同一组输入得到不同的结果。