代码生成中的作弊预防

时间:2015-02-06 13:30:41

标签: c++ multiplayer anti-cheat cheat-engine

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

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

通过这种方式,我希望能够比破解者更快地更新游戏并进行逆向工程,更新和发布/更新新的作弊。

这会起作用还是黑客能以某种方式解决这个机制? 他们会每天做这项工作还是可以在某些时候自动完成? 我该怎么做才能改进这个系统?

似乎随机化内存布局在长期内没有帮助,因为通过跟随可执行文件中的函数调用并从该代码中提取指针偏移量,可以或多或少地轻松地提取布局。 因此,为了有效地防止这种情况,调用结构和代码本身也需要随机化。

有没有很好的方法呢?这对自动化破解是否有效?

2 个答案:

答案 0 :(得分:8)

客户端技术军备竞赛是一种完全错误的做法。你会从不比一群有太多时间的孩子更好或更快。你不能与一大群没有成本的攻击者竞争(除了不做功课),而你的行为既花费你的时间又花钱。这是一场你将失去的比赛,无论是在经济上还是在最终结果中。

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

  1. 获取其他人没有的信息(例如透过墙壁查看)
  2. 自动化其他人必须手动完成的游戏过程("耕作")
  3. 有两种方法可以阻止人们这样做:

    1. 停止向客户提供该信息。将它保存在服务器上。
    2. 停止让游戏的某些部分变得不好玩。人们只会使无聊的部分自动化,他们不会玩游戏而感到无聊。让它变得有趣,没有人会浪费他的时间来尝试自动化。如果你的游戏自动化出现了,那么就要认真思考如何改进你的游戏,而不是在技术上与机器人作战。
    3. 记住那句老话:"客户掌握在敌人手中。"

答案 1 :(得分:4)

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

  

这是使用自动生成和自动生成的系统完成的   随机化(C ++)类。也许它还可以添加假对象   层次结构使识别对象更难。

  • 通过随机排课是什么意思?这远非微不足道。
  • 最终会发现虚假物品(死码)

无论如何,我怀疑你能够对你的代码的关键部分进行某种有效的混淆而没有严重的缺点,例如降级的性能或完全错误的计算(例如浮点运算)。如果您有两种不同的机制来计算相同的值,那么最终对于同一组输入会有不同的结果。