美文网首页unity3D技术分享
Anti-Cheat Toolkit(一)(Unity游戏开发-

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

作者: Mr_南 | 来源:发表于2020-12-08 18:45 被阅读0次

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

    内存修改器的下载地址: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游戏开发-

        本文链接:https://www.haomeiwen.com/subject/zrrqgktx.html