1

几个月前我开始编程。我正在 Animate CC 中制作完整的客户端游戏,因此我正在尝试针对内存扫描软件的简单措施。

我试图避免人们改变我的金钱变量。

var canMoneyChange = false;
var money = 0;
var previousMoney = 0;

function everyFrame() { //Let's admit that this function is called every frame
    if (moneyChange == true) {
        lastMoney = money;
        canMoneyChange = false;
    } else {
        if (lastMoney != money) { //If money is "magically" changed it should drop here
            resetGame();
        }
    }

现在,每当我更新货币视觉显示时,我还必须包含布尔变量:

//...
canMoneyChange = true;
money += 100; //For example
updateMoney(); //This is only for visual effects
//...

想知道这是否有效,谢谢。

编辑:该死的,我没有意识到 CE 会同时找到 lastMoney 和 money。我可以做一些事情,比如乘以一个数字来隐藏 lastMoney:

function everyFrame() { //Let's admit that this function is called every frame
    if (moneyChange == true) {
        lastMoney = money * 8;
        canMoneyChange = false;
    } else {
        if (lastMoney != money * 8) {
            resetGame();
        }
    }
4

1 回答 1

1

这将阻止 50% 的作弊引擎用户,因为大多数用户缺乏经验,只能进行简单的扫描和内存修改。他们只会放弃,因为你已经将对抗成本提高到了他们的门槛之上。

正如其他人评论的那样,这是一场猫捉老鼠的游戏。

用户仍然可以扫描“未知初始值”并扫描减少和增加的值。这将产生混淆的货币价值和常规价值,从那里计算出来并不需要太多。

用户还可以执行“查找写入此地址的内容”,这将在货币地址上放置一个写断点,然后它会向他们提供将货币更改回原始值的指令。此时他们将看到:

lastMoney = money * 8;

在组装中并能够从那里弄清楚。

在所有反作弊情况下,您实施的每一项威慑都会增加对抗成本并过滤掉另一层作弊者。你的目标永远不应该是阻止所有作弊者,因为这永远不会发生。但是在几个小时内,您可以采取一些混淆措施和一些反调试措施来阻止 75% 的作弊者。问题是当其他 25% 代表有经验的作弊​​者发布作弊时。在这一点上,75% 缺乏经验的群体的对抗成本代表了在搜索引擎上的搜索。

我会说添加一些IsDebuggerPresent()类型检查,但我想在您的平台上这是不可能的。

我对 Animate CC 或 Flash 不熟悉,但是将 1 种自定义混淆技术(就像您现在正在研究的那样)与公共免费混淆器相结合会惹恼大量的人而放弃。

于 2018-04-01T00:47:05.293 回答