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
每天多学一点,每天进步一点。