游戏开发防作弊以及原理

原文链接

http://dingixaowei.cn/2019/06/20/ (手动复制到浏览器打开)

无意中发现了一个巨牛巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,小白也能学,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家。点这里可以跳转到教程!

前言

如何防作弊在游戏开发中还是占蛮重的比例的,这也涉及到游戏盈利的问题,如果不做防作弊措施,或许我们开发出来的app当前上线或许第二天就出破解免费版了,这个事情我亲身经历过,当然这是基于app做的比较好被外挂公司盯上了,一度很火的吃鸡游戏端游版本其实外挂非常猖獗,这也是因为没有做防外挂,如何防作弊在求职者求职的时候也会经常被问到,当然我们能想到最简单的方案就是不要信任客户端任何数据,以服务器数据校验为准,当然这种方案在一些客户端服务器交互比较少的情况是可以这样设计的,假设FPS,我们每次射击造成的伤害,一帧里面会射击好多次,不可能每次都去向服务器校验吧,交互太频繁了,体验也很差,但如果不校验的话,客户端就是修改武器属性值,这就是客户端作弊了,如何解决这样的问题,下文会介绍到防作弊的思路。

客户端如何作弊

手机端

我在当初手游刚起步的时候,flappy bird想必玩游戏的人都知道,是一款非常虐的手游,当时也非常火,朋友圈都在晒分数,后来我知道用一款《八门神器》的app能够作弊修改分数,然后修改成很高的分数晒在朋友圈就显得自己“很牛逼”,满足一下自己的虚荣心,原理就是修改分数内存值来达到作弊的效果。

PC端

PC上修改内存也有对应的软件,例如Cheat Engine,就类似手机上的八门神器,如何应用见下图:
在这里插入图片描述

如何防作弊

Unity开发推荐一款插件Anti-Cheat Toolkit,自行上Asset Store上下载。具体原理就是我们通过数据混淆,UI上显示的值实际上是我们经过计算出来的值,所以内存修改器根据UI上显示出来的值去搜内存地址是搜不到的。

防作弊原理

private int curATK;
private int curAtkKey;
public int CurATK {
    get {
        return curATK ^ curAtkKey;
    }
    set {
        curAtkKey = Random.Range(0, 0xffff);
        curATK = value^curAtkKey;
    }
}

分析:^运算是异或运算,需要一点二进制的知识,异或运算是相同为0,不同为1,下面举例:3 ^ 4=7,3对应的二进制是11,4对应的二进制是100,异或运算之后的结果二进制是111对应的十进制就是7,下图程序验证一下:
在这里插入图片描述

分析

根据上面的程序你是否真真明白是如何防作弊的呢,num是我们输入的值,例如玩家当前的金币数量是4,但我们UI上的显示并不是直接Coin.Text = num.ToString(),这样玩家搜到num的内存就很容易修改了,就作弊了,我们UI上的显示值是hiddenValue^cryptoKey的值。玩家就算搜出num的值并修改了,对我们显示金币真实的数量并没有影响。

分析插件Anti-Cheat Toolkit

我们Unity开发估计很多人都会用这个插件,他是如何实现数据加密的呢,我们看下手册就会知道它是将Unity的基本数据类型都封装了一个对应的数据类型,例如:int->ObscuredInt,Float->ObscuredFloat,string->ObscuredString等。拿ObscuredInt举例:
在这里插入图片描述
会发现它封装了一个跟Int对应的结构体,并且有一个混淆因子cryptoKey=444444,我们再看string类型的封装的一个类ObscuredString,它的混淆因子是string cryptoKey=“4441”,如果我们用这个插件啥都不修改,那如果我是黑客,我知道当前某游戏是Unity开发的并且数据做了防外挂处理,那么我如何破解防外挂,我肯定首先就想到的就是这个插件,并且知道这些混淆因子,那么我就相对容易能破解出来,所以如何再进一步防外挂,就必须要对插件的混合因子再做一个混淆或者修改就显得很重要。

更多精品文章

http://dingxiaowei.cn (手动复制到浏览器)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 86
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值