Notifications
Article
网易云技术分享|Unity移动游戏风险及安全问题
Published 8 months ago
367
0
网易云的安全专家陈士留技术演讲
3月Unity在2018年首次技术路演在广州成功举行。在本次路演中我们邀请到了网易云的安全专家陈士留带来技术演讲-《Unity移动游戏风险及安全问题》。
陈士留介绍了时下Unity移动游戏面临的众多风险及热门外挂,并重点讲解了网易云团队提供安全解决方案的技术原理和实践案例。今天我们将为大家分享本次演讲的主要内容。
Unity移动游戏面临的风险
据统计,2017年国内活跃移动游戏APP应用约有9000款,其多数存在被破解、恶意代码插入、广告插入、外挂、二次打包等安全问题。而这些安全问题为企业带来隐患是:研发难度增加、研发成本的提高、玩家付费意愿减低、游戏失去公平性、玩家流失、直接损失收入。因此,破除Unity移动游戏风险对于开发者而言需要尤为重视。
Unity移动游戏风险主要包括破解风险、外挂工具这两类。
1、破解风险
破解风险主要有Unity mono脚本解密、Unity il2cpp脚本解析、Assetbundle资源篡改这三项。
Unity mono脚本解密
下图为mono脚本文件的二进制形式及源码转换。
Unity il2cpp脚本解析
以libil2cpp.so和global-metadata.dat作为输入,使用Il2CppDumper即可进行解析。类名、函数名以及对应的偏移都能够被解析出来。
虽然iOS中还没有能够解析为源码的工具,但是如果可以解密或解析Android脚本,将会大大方便iOS的破解。因此Android的有效脚本加密非常有必要。
Assetbundle资源篡改
透视功能可让使用修改版的玩家获取不对称优势。如下所示的某射击类游戏,将其中Assetbundle资源里面的材质属性修改为透明,即可达到透视的效果。
除了资源被篡改的风险外,游戏中还存在资源被竞品盗取、分析的风险。
存档数据被修改
某些游戏存档数据以明文形式存在,如果这些数据不去服务端校验,或者是单机游戏的话,则存在巨大的安全风险,游戏的各种属性可以直接修改。
2、外挂工具
游戏修改器
使用修改器能够将伤害倍率从18%改成999.9%,使得攻击伤害提升了几十倍。类似的原理也可以实现无敌、秒杀、无限蓝、技能无CD等效果,因此修改器对游戏平衡的危害相当大。
免ROOT修改器
免ROOT修改器是指通过第三方软件获得Root权限,可以访问和修改手机游戏中几乎所有的文件,但这样操作有可能影响游戏的稳定性,出现死机、卡顿、重启等人为性故障。
游戏加速器
加速器分二种类型:手机加速器和模拟器加速器。加速器除了可以加速,还可以减速。如下图所示,使用加速器,背景速度会随加速倍数加大而提高。
游戏破解版
破解版的游戏提供了很多变态的功能来吸引玩家。破解版游戏的存在会严重影响普通玩家体验,给游戏收入和口碑都造成很大的损失。
模拟按键挂
模拟按键挂,虽然只是模拟点击,但是可以做到自动游戏,可以刷各种金币、积分,对游戏平衡也会有比较大的影响。
网易云易盾的解决方案
网易云易盾能够提供Unity mono DLL脚本加密、IL2CPP 加密、Assetbundle加密等加密解决方案,以及反修改器、反加速、反模拟器、反调试等移动游戏通用保护功能和移动游戏风险感知。
1、Unity mono DLL脚本加密
通过修改或者HOOK mono_image_open_from_data_with_name能够对DLL脚本加解密。mono_image_open_from_data_with_name是CSharp 脚本的加载函数,如果CSharpDLL脚本做了加密,需要在这个函数执行之前解密。因此只要在这个函数这里下断点或者HOOK,就可以解密出原始DLL,而不需要逆向加密算法。需要注意的是,这里有个memcpy拷贝操作,mono会把解密后的DLL在内存中留存一份拷贝。
Unity mono DLL脚本加密经历了三代的技术演进。
第一代加密直接对DLL文件进行加密,在mono_image_open_from_data_with_name函数开始处解密。对于这个的破解方法很简单,PE结构的文件,以4d 5a90 00这四个字节为magic head,这可以做为CSharp DLL脚本的特征,只要搜索0x905a4d这个数值就可以了。因此解密门槛很低,只要使用修改器就可以解密。
第二代加密基于第一代加密的明显弱点,针对解密加强了防护。解密后,把PE头抹掉,使得修改器无法定位到脚本位置。因此解密门槛比较高,需要非常强的逆向开发能力才能破解。
第三代加密针对Csharp 函数做了加密,也就是方法级加密,需动态解密。
2、IL2CPP 加密
IL2cpp脚本信息以lib2cpp.so形式存在,结合global-metadata.dat文件内的符号信息,即可进行解析,因此需要对libil2cpp.so做so加壳。
如下图所示,原始libil2cpp.so用IDA可以看到475个导出函数.
加固后的libil2cpp.so导出函数则为空。
3、Assetbundle加密
Assetbundle未加密时,Unity Studio可解析出各种资源。
对Assetbundle加密后,Unity Studio就无法解析了。
4、移动游戏通用保护功能
除去Unity mono DLL脚本加密、IL2CPP 加密、Assetbundle加密等加密解决方案外,网易云易盾也提供通用的移动游戏保护功能,包括反修改器、反加速、反模拟器、反调试、反模拟点击、文件校验、防二次打包、存档加密、引擎SO定制化加壳等。
反修改器:易盾移动游戏保护采用修改行为检测,可以通杀所有修改器,包括所有已知和未知的修改器。
反加速:加速器的使用会让个别玩家获得游戏优势,影响游戏平衡。但是易盾移动游戏保护对武林时手机加速器还是模拟器加速器进行加速都有检测方案,而且是针对行为的检测方案,不针对特定的某些加速器,通用性更好。
反模拟点击:模拟点击严格上来说不属于非法外挂,处于灰色地带,但是模拟点击脚本提供的功能对游戏平衡也会带来很大的不良影响。但是易盾移动游戏保护使用了进程+行为检测相结合的方式,能够对模拟点击器进行检测。
上面介绍的移动游戏通用保护功能各有其特点,开发者可以按实际需求进行选择。
5、移动游戏风险感知
网易云易盾还能够提供移动游戏风险感知功能,主要包括包含破解包的检测、跟破解者无感知对抗、恶意用户风险评估以及支持私有化部署。
易盾保护方案特点
网易云易盾保护方案具有纯Native保护、对引擎SO做加壳、兼容性和稳定性高、性能影响小、支持Windows、Linux、Mac三平台加固等性能特点。
1、纯Native保护
游戏dex内部都是第三方SDK以及游戏内部不涉及到游戏逻辑的SDK。如果对DEX加壳的话,一方面容易造成Android碎片化,导致dex加壳会降低app的兼容性;另外Android存在Dalvik和Art两种虚拟机,所以dex加壳会为了兼容2种虚拟机而增加处理成本,从而导致启动耗时增加比较厉害。
网易云易盾可以提供纯Native保护,使游戏保护不依赖DEX加壳。DEX加壳和纯Native保护优缺点比较如下图所示。
2、对引擎SO做加壳
基本上所有的破解都依赖于对引擎SO的逆向分析,如果对SO进行了加壳保护,会大大增加游戏被破解的门槛。除了对引擎SO加壳,网易云易盾还会对敏感函数代码做校验。
3、兼容性和稳定性高
兼容强的原理在于所有保护都在SO层,不会对DEX进行修改,有效避免了Android碎片化导致的兼容问题。网易云易盾的兼容性极高,可以兼容从Android 2.3到Android 9.0所有版本系统、所有模拟器以及所有游戏引擎使用的指令集。
移动游戏保护的稳定性,需要遵循如下发布流程:
  • QA测试:在200台手机上以及各种模拟器上测试;
  • 预线上测试:将安全模块集成到日活1000的APP上线测试2周;
  • 版本发布:前面2轮都测试稳定后,正式发布;
  • 线上回归:先在内部比较小的游戏上线测试,确保稳定性。
4、性能影响小
易盾保护方案还具有性能影响小的特点,无论是CPU占用、内存占用、启动时间、电量消耗等方面的影响几乎都可忽略不计。
5、支持Windows、Linux、Mac三平台加固
易盾保护方案还支持Windows、Linux、Mac三平台加固,加固工具以jar包形式提供,不仅自带极速签名功能,而且对加固做了全面优化,速度更快。
加固接入的对接过程包括:
  • 确定游戏加固项;
  • 易盾技术支持云端配置好加固项;
  • 获取appkey;
  • 下载加固jar包工具,根据使用说明配置好appkey。
网易云易盾保护方案广泛应用于实际案例中,包括:网易公司内部的《倩女幽魂》、《终结者2:审判日》等。在外部游戏公司多个游戏皆有采用。
总结
我们感谢网易云团队在Unity技术路演广州站带来的精彩分享,我们也希望有更多的知名企业、团队参与到Unity的活动中,为开发者带来最精彩的技术分享。了解最新的Unity官方活动,请关注Unity官方微信以及Unity Connect平台。
不要忘记,Unity全年最大型的活动Unite Beijing 2018即将召开,明天即将截至6折票价,千万不要错过最后的优惠机会!

Unity China
373
Comments