Unity 保护内存变量 Anti-Cheat Toolkit 反作弊

Unity使用Anti-Cheat Toolkit反作弊
部署运行你感兴趣的模型镜像

开发游戏的时候,往往我们需要对一些存放在客户端的重要的内存变量进行加密保护,防止被玩家利用一些修改器,修改其数据从而达到"开挂"的效果。

Unity Asset Store有一个反作弊包的插件Anti-Cheat Toolkit可以达到以上效果,官网地址:https://assetstore.unity.com/packages/tools/utilities/anti-cheat-toolkit-10395

这边提供一个下载地址:https://download.youkuaiyun.com/download/wangjiangrong/11250361

同时我们需要一款修改器来验证其效果,cheat ngine:https://www.cheatengine.org/index.php

模拟

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

代码自然也很简单:

using UnityEngine;
using UnityEngine.UI;

namespace Test {
    public class NewBehaviourScript : MonoBehaviour
    {
        [SerializeField] Text text;
        [SerializeField] Button btn;

        //生命数
        public int live = 5;

        void Start()
        {
            text.text = "剩余生命:" + live;

            btn.onClick.AddListener(() => {
                live--;
                if (live > 0)
                {
                    text.text = "剩余生命:" + live;
                }
                else
                {
                    text.text = "游戏结束";
                }
            });
        }
    }
}

然后轮到我们的修改器登场了,首先我们启动unity,然后点击修改器的左上角类似小电脑的图标,选择我们的Unity进程,然后在右边输入我们要查找的内存变量的值(5即为当前生命值)。然后点击First Scan 按钮进行扫描,在左边的列表就就会帮你找到所有的值为5的内存变量的地址。

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

此时你会发现左边的列表中只剩两个值了,这对应的就是我们live的值,当你再点击dead按钮时,会发现这两个值中的value也会自动进行相应的变化(若列表中的值还较多的话,可以在进行dead = 197,然后value = 197,再next scan操作)

找到我们想要的值的物理地址后,接着就可以进行修改值的操作了,如图,输入我们想要修改的值即可。

整个操作的动图如下(生命值通过修改器直接从198变为5):

 

反作弊

通过上面的例子,我们知道了内存的数据是不安全的,所以我们需要进行一些加密处理,也就是之前所说的Anti-Cheat Toolkit 插件。将插件导入unity后,我们只需要对代码进行简单的修改即可,即将原始的int改为CodeStage.AntiCheat.ObscuredTypes.ObscuredInt,其余用法不变。

//生命数
public CodeStage.AntiCheat.ObscuredTypes.ObscuredInt live = 5;

然后使用工具的时候会发现,找不到对应的值了。

 

其他

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

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

至于其他的功能还需要再研究研究。。。

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

反作弊工具包(ACTk) 为那些作弊/攻击/破解你游戏的人带来额外麻烦。 一站式提供各种反作弊技巧和技术,易于使用,附有完整的资源、详细的文档和边角案例。 共同功能 保护内存中的变量保护并扩展PlayerPrefs。 生成版本代码签名。 检测速度攻击。 检测时间作弊。 检测3种常见的穿墙类型。 检测外部托管的程序集。 具有ObscuredPrefs/PlayPrefs编辑器。 模糊类型 使你的敏感变量远离所有内存扫描器和搜索器。 涵盖所有基本类型和少数专用于Unity的类型。 检测作弊尝试。 视频教程 模糊的预制件 用自动迁移、加密和其他受到支持的类型替换PlayerPrefs。 可以选择将所有保存的数据锁定至设备。 包括篡改检测! 备有适用于PlayerPrefs和ObscuredPrefs的编辑器! 视频教程 代码哈希生成器 生成代码哈希签名,比较当前的哈希,确保编译后的代码不被更改。 截至目前,适用于Windows独立平台和Android。 速度攻击检测器 让你了解那些试图减缓或加速你的游戏的可恶作弊者。 正确应对时间小故障。 通过SpeedHackProofTime类抵御速度攻击。 视频教程 时间作弊检测器 利用互联网连接获得可靠的时间。 反应于会话期间或会话之间不正确的系统时间和实际作弊情况,抓住那些改变时间以加速长期流程(构建流程、精力恢复等)的人。 可在互联网连接较弱时正常运作。 穿墙检测器 涵盖3种常见的穿墙类型: •射穿墙壁 •穿过墙壁 •透视墙壁 使用通用沙盒方式,可检测未知作弊。 视频教程 注入检测器 反应于运行时注入或注入至该版本的外部托管程序集。 视频教程 总体亮点 超过6年的支持和更新! 可与micro mscorlib和IL2CPP一起使用。 具有详细的手册,带有示例和提示。 具有完整的API文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值