内容来源:2018 年 09 月 08 日,网易资深安全工程师张本梁在“RTC2018 实时互联网大会”进行《网易 Android 游戏保护实践》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。
阅读字数:2520 | 7分钟阅读
获取嘉宾演讲视频及PPT,请复制:http://t.cn/EzGu5fU,粘贴至浏览器即可。
摘要本次分享主要介绍安卓手游面临的各种外挂问题,并针对unity3d和通用引擎游戏提出了一些解决方案。
Unity 手游面临的安全风险我们都知道目前手游已经超过端游,成为市场份额最大的一款游戏类型,与此同时围绕着手游的外挂越来越多,外挂作者的水平也有很大提升。
就目前看来,如果一款游戏在事先没有任何防护的情况下放到渠道上,被破解的概率要高很多。
外挂工具
分析数据后我们发现在外挂群体中使用外挂工具的比例最高,门槛也是最低的,一个普通玩家不需要任何编程经验就可以轻松使用。
在外挂工具中游戏修改器又是使用频率最高的,修改器可以轻易将武器伤害从18%改成999.9%,使得攻击伤害提升几十倍。类似的原理也可以实现无敌、秒*、无限蓝、技能无 CD 等效果。因此修改器对游戏平衡性的危害相当大。
为应对游戏安全防护等级的不断提高,各种外挂技术也在持续发展中。早期的游戏修改器还需要搜索和修改内存,后面则直接通过执行脚本就能完成修改,在一些论坛、网站、聊天工具中都可以购买到相应的 Lua 脚本。
通常要想使用修改器,手机都需要 Root,不过安卓版本越高 Root 越难,所以有些修改器提供了免 Root 的功能,它的实现原理其实就是和虚拟空间的工具联合使用,让修改器运行在有 Root 权限的环境中。
除开修改器之外,还有一种外挂形式——游戏加速器。在一些酷跑类游戏中,游戏加速器可以通过设置加速倍数来控制游戏背景速度,以实现加速或减速效果。现有的加速主要分为两种,一种是手机加速器,通常游戏修改器都会附带加速功能,还有一种是模拟器加速。
模拟按键挂可能是使用频率不太高的外挂,不过虽然只是模拟点击,但是却实现自动游戏,可以刷各种金币、积分,对游戏平衡性还是有比较大的影响。
游戏破解版是一种更暴力的破解方式,需要对游戏本体改包,但也因此能获得可观的收益。破解版提供了很多变态功能来吸引玩家,大多采用月付的购买方案,价格上可能已经超过很多游戏的ARPU值了,所以这种形式不光影响普通玩家体验,也给游戏收入和口碑造成了很大损失。
破解风险
Unity提供了两种模式:mono虚拟机,il2cpp。从市面上抓取的游戏包来看,mono脚本的形式相对更多一些。现在有很多工具都可以将mono脚本二进制形式转换为源码,从而查看游戏的所有逻辑,并进行修改。
对于il2cpp脚本,以libil2cpp.so和global-metadata.dat作为输入,使用II2cppDumper即可进行解析。最终的解析结果包含类名、函数名、以及对应的偏移。
资源修改也算在一种外挂,比如在射击游戏中将Assetbundle资源里面的材质属性改为同透明即可达到透视的效果。除了资源被篡改的风险外还存在资源被竞品盗取、分析的风险。
另外某系游戏存档数据会以明文形式存在,如果这些数据不做服务端校验,或者是单机游戏的话,则存在巨大的安全风险,游戏的各种属性可以被直接修改。
协议破解是相对bug的方式,主要通过抓包软件分析协议,获取协议中包含的血量或攻击等数据传输。破解者先让玩家连接到其专门架设的服务器上,之后对玩家传输过来的数据进行解包并做出修改,再将修改后的数据返回到厂商服务器。
网易云盾安全解决方案Unity mono DLL脚本加密
Mono_image_open_from_data_with_name是mono虚拟机的 C# 脚本加载函数,如果 C# DLL 脚本做了加密,就需要在该函数执行之前解密,Mono 会把解密之后的DLL在内存中留存一份拷贝。因此只要在这个函数里下断点或者Hook,就可以解密出原始DLL,不需要逆向加密算法。
第一代加密是直接对DLL文件进行加密,在Mono_image_open_from_data_with_name开始处解密,其解密门槛很低,只需使用修改器就可以解密。
第二代基于第一代加密的明显弱点,针对解密加强了防护。解密后PE头会被抹掉,使得修改器无法定位到脚本文字。这种解密门槛比较高,需要非常强的逆向开发能力才能破解。
第三代针对C#函数做加密,也就是方法级加密、动态解密,只有在函数执行的时候才解密,因此无论如何dump都无法从内存中获取到解密之后的完整第二文件。易盾目前采用第二代加第三代加密组合使用的方式来确保DLL脚本加密的安全强度。
手游通用保护功能
以上反破解方案主要是针对unity3d游戏,接下来会介绍一些通用功能,任何游戏引擎都支持,可以根据游戏需求选择一个或多个。比如反修改器、反加速器、文件校验、存档加密、防二次打包、防多开、反同步等等。
修改器除了常规版本外,还有很多定制修改版本,它们专门做了反检测措施(随机化包名、子进程使用系统进程名等),因此常规的进程检测无法发挥作用。易盾手游保护采用修改行为检测,可通*所有修改器,包括已知和未知的。
前面提到过加速器分为两种,安卓系统内的加速器和对模拟器进程加速的加速器。第二种的原理和端游加速相同,实质是对整个模拟器做了加速,安卓系统内并没有加速器运行。我们对这2种加速都有检测方案,同样是针对行为而非特定加速器,通用性更好。另外模拟点击方面易盾手游保护使用了进程加行为检测结合的方式,对其进行检测。
以上为今天的分享内容,谢谢大家!
编者:IT大咖说,转载请标明版权和出处