3月17日,两位来自网易云易盾的移动安全高级工程师给我们带来了移动应用安全的分享,现场异常火爆,很多没来现场的小伙伴都争先恐后得跟我要嘉宾的PPT,所以我们这里就为大家准备了一个详细的技术解读版本,比PPT更详细,更好做笔记哦!
第一位分享嘉宾王桂林分享的主题是《iOS的手游破解与保护》,这次分享主要分为三个部分:
iOS手游安全风险
iOS手游破解分析
iOS手游保护经验
一、iOS手游安全风险
现在手游破解热度比较高,随着搜索很多的相关内容,包括很多破解的内容增多,破解的辅助和插件,各种各样的外挂,都可以供大家使用。有很多的破解工具,比如IAP、GenaBag,还有某IPA精灵等等;修改工具有八门神器,安卓开发破解大家接触的比较多,保护也比较多,iOS方面稍微少一些。
由于大家普遍认为iOS游戏比较安全,所以不管iOS游戏还是App,基本都是裸奔的,网络数据包都是明文的,并没有做加密。另外就是iOS内购破解,玩家可以不花钱购买任意道具,但是这就有损游戏开发者的收入了。
现在流行的手游外挂,主要包括手游加速器,让角色移动和场景速度变快或变慢,达到作弊的效果;自己可以控制手游修改器,直接搜索数据进行相应的修改;使用内购破解工具对游戏进行破解之后,你可以免费购买任意东西。其他还有一些外挂辅助功能,近期大火的佛系青蛙游戏外挂可以实现自动采三叶草、时间加速、自动改手机时间、无线抽奖券等,玩法多多~
二、iOS手游破解分析
由于iOS游戏&APP确实相对比较安全,大家遇到的问题可能比较少,对破解分析更加关注,下面我们就举两个简单的栗子。
加速器原理&分析
案例:佛系青蛙
加速器原理都差不多,但不同的加速器挂有不同的实现方式,原理都是通过修改时间相关函数实现加减速功能,现在有两大类,u3d和cocos,通过是否有UnityAppController这个类来判断是否为Unity游戏:如果为Unity游戏的话,就会用HookOC的方法;如果不是Unity游戏,就会采用常规的Hook Gettimeofday方式修改游戏。”
U3D游戏加速,采用内联HOOK的方式,Fake这个函数,自己做外挂的作者。大致流程使用vmregion获取当前可执行文件的内存空间,在此空间设置两个特征串,这两个串找到以后,后面串特定的位置进行内联HOOK,这两个串在外挂不同的版本位置是不一样的,要具体分析。
首先将叉叉青蛙apk安装包解压,察看Mangaged文件夹下面的d11文件,他使用的是游戏中的C#脚本,使用Reflector或dnspy进行反编译,出来的就是原始脚本,这是所有的函数,直接点击函数进去,显示相应的代码,其实就跟看到他的开发者工程代码是一模一样的,比较容易分析。比如我们要修改三叶草的数目,让三叶草的数目达到无限,买东西的时候就可以无限制。
第一步,我们要找到关键的三叶草数目代码在什么地方,可以在页面上操作,修改三叶草的数目,比如只有8块钱,要买20的东西,三叶草不足,它会提示你三叶草不足,我们直接搜索,找到目标代码,其他的功能就在这附近了,而且也比较简单,通过察看它的代码逻辑和程序逻辑,他购买的时候会通过superGameMaster、CloverPointStock函数,这都是明文的,意义看得比较清楚,里面有一个saveData.CloverPoint的变量,也就是三叶草的数目,如果想让三叶草的数目达到无限,我们就可以直接把代码改掉,改成任意值,每次执行的时候都不会看真实数据,都会看我们设置的数据,达到修改三叶草数目的目的。
修改抽奖券,函数是static int,可以修改成自己想要的,修改抽奖概率,可以把任意颜色的球改成自己想要的数值。
提问观众
那么如果安卓的apk包没有做任何保密,脚本进行了加密,或者使用IL2CPP模式,该怎么办?去年其实很多游戏已经开始加密了,如果他做了加密,就没有刚才那么简单了,如果使用IL2CPP模式就跟iOS一样了,大家基本都会选择这个模式,但脚本也是没有的,要用C++代码,就这个方面我们iOS去破解分析的话,现在也有很多现成的工具,都是开源的,比如IL2CppDumper还原符号,也就是C下面的脚本代码,为什么可以还原?原理是因为IL2CPP会变成一个Dat文件数据文件,C#脚本转成C/C++代码,只不过就没有安卓那么简单了,经过调试分析,找到每个功能对应的函数,进行HOOK。我们不借助安卓,直接用iOS,找到这个函数,但是这个函数也是借助前面的方法,如果他做了加固,我们就要调试,找到相应的方法,花费的时间就会久一点,找到函数以后进行HOOK。
外挂会有很多坏处,也会伤害正常的玩家,包括还有一些人民币玩家,没有做辅助的玩家玩得爽,还影响游戏开发者的收入。
认真阅读产品册的小伙伴
三、iOS手游保护经验
那么iOS游戏怎么做相应的保护呢?王桂林专家认为主要有三种:一种是防静态分析:有符号分析、代码逻辑分析、脚本加密、游戏存档加密、字符串加密等。第二种是防动态调试:有反调试、通信安全。第三种是外挂检测:包括加速挂、内存修改挂等等。
防静态分析,大家可能用的不是很多,如果不加密就是明文,加密以后什么都看不到,针对游戏还是变量加密,比如修改内存,血量、技能值和魔法值,可以对变量进行加密保护,让破解者无法搜索。
符号混淆,将代码中十月的类名、方法名、属性替换成其他意义的名字,不能替换随机的,过不了审。这种主要针对OC,如果是U3d,可以做一些相应的微小修改,用IL2CPPDumper出来不要看起来那么明显。
代码逻辑混淆,在编译其编译源码时,对代码结构进行变形,提高代码的复杂度和逆向分析难度,从而保护程序不被轻易破解,里面可以也加密算法逻辑和特定的验证逻辑,比如一开始的代码结构很简单,改了以后就会变得很复杂。
防动态调试,反调试,使用外挂斗会有反调试分析,可以使用反调试使应用无法被调试、避免被动态分析的风险。
动安全诊断室
这次参与App安全诊断活动的大部分是cocos2d-x游戏,所以张本梁先生跟大家分享的主题是《cocos2d-x手游风险及安全解决方案》主要从以下三个方面给大家介绍:
Cocos2d-x手游面临的风险
流行手游破解和外挂介绍
易盾安全解决方案
一、Cocos2d-x手游面临的风险
Cocos2d-x手游面临的主要风险是脚本和资源的破解风险,目前应用市场上cocos2d-x游戏中很多使用的是开源的quick-cocos2d-x方案,很容易被破解。我们可以对它的cocos2d-x加密脚本和资源进行静态的破解,得到解密后的脚本和资源文件。若不是使用quick-cocos2d-x方案的我们可以通过hook LuaL_loadbuffer、initWithImageData等函数获取解密后的脚本和资源。
Cocos2d-x引擎so也存在被破解的风险,脚本和资源的破解需要依赖对引擎so的分析,若so未保护,则影响到脚本和资源的安全,甚至可以直接通过修改引擎so文件,达到破解游戏的目的。
还有一些游戏的存档数据没有加密保护,或者使用弱加密,只要修改存档数据的配置,就可以修改游戏的属性,对游戏的影响非常大。
二、流行手游破解和外挂介绍
主要的外挂有游戏修改器、游戏加速器、破解版游戏和按键挂等。
游戏修改器
利用修改器可以实现秒杀、无敌、无CD、透视等功能,我们所熟悉的修改器包括烧饼修改器、GameGuardian、GG大玩家、八门神器等,目前还存在免ROOT修改器,极大的降低了使用修改器的门槛。
游戏加速器
加速器分为两类,一类是手机加速器:比如烧饼加速器和GG加速器;还有一类是模拟器加速器:比如天天加速器,它类似PC端加速器,对于整个模拟器进行加速。
另外还有破解版游戏和按键挂,破解版游戏主要是通过修改脚本、资源、so等文件或者注入等方法达到无敌、秒杀、无限大招等功能;按键挂是用于自动的打挂、刷金币、积分等,目前市面上有很多厂商提供这样的服务,比如触摸精灵、叉叉助手等。
三、易盾安全解决方案
网易云易盾加固针对上面提到的问题有一整套的解决方案,针对脚本文件的保护,易盾采用自研加密算法,破解难度大,但运行效率高,对游戏性能影响很小。还有游戏引擎so文件加固保护,增大so文件被分析和破解的难度。
刚才介绍了,修改器是目前工具党使用最多的工具之一,反修改器主要是通过检查修改器的修改行为,目前修改器均有反检测的措施,比如GG修改器就有很多防检测的措施,包名随机,使用系统进程名等,很难通过进程和包名查杀它。
手机端加速器,我们通过检测加速器的行为来判断是否使用加速器,模拟器的加速器,原理跟端游加速相同,实质是对整个模拟器做了加速,Android系统并没有加速器在运行,所以常规的方法很难检测到这种加速器,我们通过某些特征看玩家是否使用了加速器。
按键挂主要是使用模拟点击,针对这种模拟点击的按键挂,我们也有应对之策,主要是工具有叉叉助手、按键精灵等等。
除此之外还有反调试器、反模拟器、文件校验、防二次打包和存档文件加密等功能,反调试前主要是对游戏整体保护,防止被动态调试;有些游戏在模拟器上运行会影响游戏平衡等;文件校验是保护脚本和资源文件,防止被修改,比如通过修改资源文件达到透视的效果,还防二次打包,使用的是更底层的自定义方法,并不是通过系统函数进行校验,存档的存储可以使用易盾安全组件。
目前对游戏的保护是默认不依赖DEX加壳。
主要的缺点就是兼容性比较差,启动时间消耗的比较大,运行速度影响效率,做游戏比较清楚渠道会打渠道包,dex加固后渠道包是没法打了,而且很多游戏的逻辑主要是脚本或者C++,所以dex加固保护不会起到什么太大的作用。
易盾游戏保护使用的是Native保护,因为安卓的碎片化对natvie层没有影响。对游戏运行速度的影响极小,对打渠道包没有任何影响。
易盾游戏保护所有的版本上线前都需要正规的流程测试,确保兼容性和稳定性。若需要接入易盾游戏保护,对接也很快捷和方便,只要确认下游戏加固项,在云端配置好加固项,然后获取appkey就可以直接使用了,只需要加固游戏母包即可,然后使用母包打其他渠道包。
非常感谢网易云易盾二位专家带来的精彩分享,现场观众都听得如痴如醉,提问的小伙伴多得礼物都不够送啦!这样深入浅出、干货满满的分享麻烦下次再来一打!
有爱的合照~