我几个月前开始编程。我正在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和金钱。我可以做一些事情,例如乘以一个数字以隐藏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();
        }
    }

最佳答案

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

正如其他人所评论的,这是一个猫捉老鼠的游戏。

用户仍然可以扫描“未知初始值”,也可以扫描减小和增大的值。这将产生混淆的货币价值和常规价值,不需要花太多的钱就可以搞清楚。

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

lastMoney = money * 8;


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

在所有反作弊情况下,您实施的每种威慑措施都会增加对抗成本,并过滤掉另一层作弊者。您的目标绝不应是阻止所有从未发生的作弊行为。但是在几个小时内,您就可以进行一些混淆处理和一些反调试措施,以阻止75%的作弊者。问题是当其他25%的有经验的作弊​​者释放作弊时。那时75%的经验不足的小组的对抗性费用代表着在搜索引擎上的搜索。

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

我对Animate CC或Flash并不熟悉,但是将您正在使用的1种自定义混淆技术与公共免费混淆器结合起来会惹恼足够多的人放弃。

10-08 00:21