知物由学|游戏开发者如何从容应对Unity手游风险?(中篇)

阿凡达2018-06-21 11:36

上篇介绍完Unity手游面临的风险,中篇将会详细介绍网易易盾是如何应对的。

二、易盾是怎么做的?


网易易盾能够提供Unity mono DLL脚本加密、IL2CPP 加密、Assetbundle加密等加密解决方案,以及反修改器、反加速、反模拟器、反调试等手游通用保护功能和手游风险感知。


Unity mono DLL脚本加密

通过修改或者HOOK mono_image_open_from_data_with_name能够对DLL脚本加解密。mono_image_open_from_data_with_nameCSharp 脚本的加载函数,如果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这个数值就可以了,由于烧饼修改器是使用10进制数值,将其转换成10进制值:9460301。因此解密门槛很低,只要使用修改器就可以解密。




第二代加密基于第一代加密的明显弱点,针对解密加强了防护。解密后,把下图所示的PE头抹掉,使得修改器无法定位到脚本位置。因此解密门槛比较高,需要非常强的逆向开发能力才能破解。


第三代加密针对Csharp 函数做了加密,也就是方法级加密,需动态解密。


原始未加密dnspy函数解析结果


函数加密后dnspy函数解析报错


IL2CPP 加密

Il2cpp脚本信息以lib2cpp.so形式存在,结合global-metadata.dat文件内的符号信息,即可进行解析,因此需要对libil2cpp.soso加壳,如下图所示,原始libil2cpp.soIDA可以看到475个导出函数:



加固后的libil2cpp.so导出函数则为空:



Assetbundle加密

Assetbundle未加密时,Unity Studio可解析出各种资源:



Assetbundle加密后,Unity Studio就无法解析了:



手游通用保护功能

除去Unity mono DLL脚本加密、IL2CPP 加密、Assetbundle加密等加密解决方案外,网易易盾也能够提供通用的手游保护功能,包括反修改器、反加速、反模拟器、反调试、反模拟点击、文件校验、防二次打包、存档加密、引擎SO定制化加壳等。一般而言,这些通用功能任何游戏引擎都支持,可以根据游戏需求选择一个或多个。目前,网易易盾支持的游戏主要包含Unity3dCOCOSNEOXUE4

  • 反修改器

修改器可以实现很多功能,如无限蓝、技能无CD、无敌、秒杀、倍攻等,是工具党的最爱,也是专业破解者常用的工具之一。常见的修改器除了常见的烧饼、八门神器、葫芦侠、GGGameGuardian)以外,还有很多定制修改版。

其中,GG修改器是做的最专业的修改器,专门做了反检测措施(随机化包名、子进程使用系统进程名等),因此常规的进程检测对GG无效。但是易盾手游保护采用修改行为检测,可以通杀所有修改器,包括所有已知和未知的修改器。下图是检测效果示例:


  • 反加速

加速器可加速可减速,主要分为两类:一是Android系统内的加速器,如烧饼加速器、叉叉加速器,一般修改器都附带加速功能;二是对模拟器进程加速的加速器,此加速原理跟端游加速相同,实质是对整个模拟器做了加速,Android系统内并没有加速器在运行,比较典型的是天天模拟器附带的天天加速器。

加速器的使用会让个别玩家获得游戏优势,影响游戏平衡。但是易盾手游保护对以上这2种加速都有检测方案,而且是针对行为的检测方案,不针对特定的某些加速器,通用性更好——对于天天加速器这样的进程加速器,即使只加速0.1倍也可以检测到。


上图是一个加固过的跑酷游戏,用天天加速器加速生效后,过了一秒钟左右,即会闪退。

  • 反模拟点击

模拟点击严格上来说不属于非法外挂,处于灰色地带,因此模拟点击器都是公司化动作,应用很广泛,但是模拟点击脚本提供的功能对游戏平衡也会带来很大的不良影响。目前比较知名的模拟点击器,有叉叉助手、触动精灵、触摸精灵、按键精灵、游戏蜂窝等。

如下图所示,触动精灵启动后,再启动游戏,保护检测到模拟点击器的存在即会闪退:

但是易盾手游保护使用了进程+行为检测相结合的方式,能够对模拟点击器进行检测。

以上介绍的这些手游通用保护功能各有其特点,开发者可以按实际需求进行选择:

功能

特点

反调试

检测方式隐蔽,大大提高动态逆向分析难度

反模拟器

可以通杀所有已知和未知模拟器

文件校验

兼顾了效率和安全性

防二次打包

使用了更为底层的方式,可以绕过各种过校验插件

存档加密

透明方式接入,不需要开发做额外接入工作


手游风险感知

网易易盾还能够提供手游风险感知功能,主要包括包含破解包的检测、跟破解者无感知对抗、恶意用户风险评估以及支持私有化部署。



网易云安全(易盾)为您提供iOS应用加固SDK加固等服务,欢迎点击免费试用。 

相关阅读:

知物由学|游戏开发者如何从容应对Unity手游风险?(上篇)

知物由学|游戏开发者如何从容应对Unity手游风险?(下篇)