谈谈游戏中如何防外挂和防破解
前言
这篇文章写于2018年一直在草稿箱,当时在某厂做手游,现在回过头来看,这些方法依然有用。
对于一些外挂软件,现在我们借力AI,针对性上报玩家的行为序列log,通过AI分析是否外挂,然后把数据交由运营处理。
在我开发一款大型mmoarpg过程中和服务器主程讨论游戏中防外挂、防破解的实现和改动,讨论内容主要有如下:
防加速
服务器验证,客户端配合
内存数据加密
客户端内存加密,Unity的AssetStore上插件可实现。
尤其是对于奖励,领取条件判断及二次领取服务器一定要做检验,不要依赖于客户端。客户端所有数据都可以被修改。
协议CD
防止频繁的请求某个协议(300毫秒~1000毫秒内只响应一次)
【修改内容】
1.所有的协议都增加了CD限制,例如CS_MAP_MOVE走路协议,CD间隔是200毫秒,服务器每次收到协议后先检查和上次的间隔,如果间隔小于CD*0.8,则可以认为是网络阻塞或外挂,服务器拒绝处理协议。具体限制向服务器同学拿最新的协议CD配置。
【影响点】
1.客户端所有的协议发送。
【测试点】
修改影响到了协议收发函数对于CD限制的逻辑,以及功能模块协议限制逻辑。
测试需要验证指令是否能正常发送,同时功能模块协议限制是否正常
协议加密
在协议头增加字节数
防WPE重复发包
防重复领取,及重复进入。
监控非充值途径获得货币
所有的货币都有来源
移动防加速
有几点注意:
1、程序这边做了1.5倍的容错(速度时间1.5 > Client 移动)
2、当跳跃的时候,忽略该判断,走跳跃自己的判断
3、当判断前端发送的位置存在异常的时候,会被拉回上一个点
测试哥需要测试,走,疾走,一边跳跃一边行走时候是否有异常
防加速有以下几个修改点:
1、人物移动协议防加速,该检测逻辑放在玩家进程
2、人物强制矫正位置协议防加速,该检测逻辑放在玩家进程
3、增加人物传送点传送到下一个点位置协议,该协议功已经制定但是需要前端先行,故这部分还没做开发。
4、宠物和召唤物移动协议防加速,该检测放在场景进程
5、增加宠物和召唤物召回协议,该协议的检测暂时屏蔽,需要前端支持了该协议后,后端开启限制
测试需要过一下
玩家 移动,跳跃,传送点跳跃
宠物和召唤物 移动,召回等操作
后面补充了一下几个机制:
1,跳跃的时候行走,使用新的行走协议
2,普通行走处理了避免粘包,或者前端卡顿出现同时发送协议到后端但又属于正常情况的发送的情况
3,玩家冲锋或者被别人推移的时候,增加了容错时间段,该时间段内不处理异常的行走数据包
4,增加了传送点传送监控
5,玩家传送点跳跃落地后,增加了容错时间段,该时间段内不处理异常的行走数据包
6,前端在卡顿的时候,会导致发送行走包路程不符合要求的情况,后端做了容错次数
反外挂加速
当前冲锋技能可以穿越地图边缘的阻挡墙
后端做了优化,在释放冲锋,或者被boss击退的时候,有0.4秒的时间内,使用强制矫正协议能把角色正常拉回来,而不是把角色还原到不可走点
【系统漏洞】未限制加速
描述:未限制加速,导致攻速加快、移速加快
修复一下问题:
1,单独技能CD无效问题
2,人物死亡后,宠物释放技能攻击无效问题
3,增加了技能释放硬直时间
网络波动状态下容易被拉回