如何防止使用Gamecih作弊?

2022-09-04 07:38:20

背景

我已经遇到了很长一段时间的问题,玩家在我的Android游戏中作弊。对于一个严格的单人游戏来说,这不是一个大问题,但是由于我的游戏包含多人游戏和全球高分列表,它会导致合法玩家因为作弊者而停止玩。

他们如何作弊

作弊者为root用户使用一个名为Gamecih的应用程序。Gamecih 允许用户暂停应用,更改变量值,然后恢复应用。因此,在我的情况下,他们只是暂停游戏,将“生命值”更改为74万亿,然后在多人游戏上将废话踢出所有人。这是一个视频,展示了Gamecih是如何在水果忍者(不是我的游戏)中作弊的。

考虑的方法

  1. 代码模糊处理。这不起作用,因为模糊处理不会更改变量,只会更改变量名称。这意味着作弊者仍然可以找到与其当前生命值相同的变量,然后更改该变量。
  2. 代码混淆 + getter & setter 值更改。这样,健康实际上并不能代表真正的健康价值。在 getter 方法中,我会做一些类似返回 health*10 的事情;在二传手中,我会做health=input/10;这当然可能更复杂。

我想要什么

可以说,考虑方法nr 2是我应该使用的,但话说回来,它并不能阻止黑客攻击,它只是使它变得更加困难。理想情况下,我想检测人们何时使用Gamecih作弊,显示一个弹出窗口说“的你,你这个讨厌的黑客”,然后关闭应用程序。我不想要依赖于服务器的解决方案,因为我希望我的玩家也能在离线时玩游戏。如果可能的话,我还想避免代码混淆。


答案 1

您可以将寿命存储在X个变量中,实际值将是它们的总和(始终动态计算)。您可以随机选择要更新的一个。最重要的是,您可以添加一些一致性检查,作弊者很难意识到要更改的内容和方法。

一致性检查可以是一个简单的规则,例如,第 1、第 2 和第 3 个变量按增长顺序排列,第 4 个变量最小。使用此工具需要一些好时间才能弄清楚这一点。

Yoy还可以获得更多的创造力,并在上面混合一些加密等(您提到的方式)。然后,除非有人拥有您的代码,否则它将变得次序渐远。

编辑:添加100个随机变量,这些变量始终使用随机名称(或数组中的位置,以使其更容易)进行更改,然后祝作弊者寻找合适的变量好运。并让它全部动态,所以每次他们不得不再次破解它。


答案 2

您可以定期检查您的值是否在不应该更改时发生了变化。

例如,可以在单独的隐藏标志中存储运行状况值已更改的事实。如果您的 check 方法确实检测到值中的更改,并且未设置标志,则可以判断该更改是非法的。

例如:

void incrementHealth(int amount) {
    health = health + amout;
    hiddenCheck.hasChanged = true;
    }

和必须定期调用的单独方法中:

void checkHealth() {
    if (hiddenCheck.hasChanged) {
        // change is valid
        hiddenCheck.hasChanged = false;
        hiddenCheck.lastKnownValue = health;
        } else {
            if (hiddenCheck.lastKnownValue != health) {
                // An illegal change has occured ! Punish the hacker !
                }
            }
        }
   }

推荐