Anti-Cheat Toolkit(一)(Unity游戏开发--防作弊)

开发游戏时,我们需要保护储存在客户端中的重要数据,防止被玩家修改数据从而达到"开挂"的效果。

内存修改器的下载地址:cheat ngine:https://www.cheatengine.org/index.php

当然这种内存修改器有很多,原理都时一样的。

一、Anti-Cheat Toolkit 介绍


Unity Asset Store 官方插件地址:官方链接

二、Anti-Cheat Toolkit 可以做什么?


• 保护内存中的变量。

• 保护和扩展PlayerPrefs。

• 生成构建代码签名。

• 检测速度。

• 检测时间作弊。

• 检测3种常见类型的墙壁。

• 检测外部托管程序集。

• 有ObscuredPrefs / PlayerPrefs编辑器。

二、1.保护内存中的变量


假设我们在玩魂斗罗的游戏,一共有五条命(存放在内存变量中,并用一个文本显示),每次死亡都会导致生命数-1(通过点击按钮模拟死亡)。直到生命为0时结束游戏。效果如下:


demo效果

下面时实现代码:

usingUnityEngine;

usingUnityEngine.UI;

namespaceTest{

publicclassNewBehaviourScript:MonoBehaviour

    {

[SerializeField] Text text;

[SerializeField] Button btn;

//生命数

publicintlive =5;

voidStart()

        {

text.text ="剩余生命:"+ live;

            btn.onClick.AddListener(() => {

                live--;

if(live >0)

                {

text.text ="剩余生命:"+ live;

                }

else

                {

text.text ="游戏结束";

                }

            });

        }

    }

}


Unity运行状态,打开我们下载好的修改器


修改器使用流程

为了方便测试(因为内存中5的值特别多,扫描结果不直观)我们将测试的live值改为200,然后先First Scan 200的数据,接着,我们先点击Unity的Dead按钮,使值变为199,然后在Cheat Engine中将value的200改为199,点击Next Scan按钮(如果结果还是多,重复减生命,直到少的为止)


修改内存中的值:


修改内存中的值(1)


修改内存中的值(2)

修改完之后点击Dead 发现:


内存修改后

使用Anti-Cheat Toolkit插件 后的代码:

//生命数

publicCodeStage.AntiCheat.ObscuredTypes.ObscuredInt live =5;

这样内存中就搜索不到对应的值,为了更加安全我们可以加上监听,监听数据被意外修改后应该怎么处理(退出游戏,弹框等等)

监听的方法有两种:

    1.监听事件自己预设:

        导入Anti-Cheat Toolkit插件 后 ,选中场景中的任意Gameobject 右键 Create other -->Code Stage -->Anti-Cheat Toolkit -->Obscured Cheating Detector


添加监听事件

上面的数值什么的我不再一一说明,基本上百度一下就可以知道是什么意思。

事件绑定后如图:



 2.监听事件代码赋值:

    代码如下:

            ObscuredCheatingDetector obscuredCheatingDetector = ObscuredCheatingDetector.AddToSceneOrGetExisting();

            obscuredCheatingDetector.enabled = true;

            ObscuredCheatingDetector.StartDetection(Obscured_CheatDetected);


public void Obscured_CheatDetected()

    {

        // 检测到数据被意外修改后的逻辑

    }

运行时会自动创建Anti-Cheat Toolkit 的物体并挂载ObscuredCheatingDetector 脚本,并添加上监听的事件

总结:1.不论是自动创建的Anti-Cheat Toolkit物体都是不销毁的

        2.Anti-Cheat Toolkit插件提供了很多加密的类型,如ObscuredFloat,ObscuredString,ObscuredVector3等等,其内部代码也不难理解,就是 对原始数据进行了简单的异或处理,从而达到加密的效果。(原理:A^B=C,C^B=A)

        3.同时还提供了ObscuredPrefs来替代PlayerPrefs。

剩下的内容等有时间再给大家分享,另外有时间会再出一个Unity混淆的插件,和这个插件配合使用效果会更好。

参考文章:https://blog.csdn.net/wangjiangrong/article/details/93021172

每天多学一点,每天进步一点。

你可能感兴趣的:(Anti-Cheat Toolkit(一)(Unity游戏开发--防作弊))