壹:前言
大数据时代,移动应用(APP)数量多、应用领域也广泛。APP遭破解而导致数据被窃取、个人隐私信息泄露、被盗版山寨的事件并不少见,不仅危害着用户信息安全与财产安全,也影响到正版开发者的知识产权经营。
据国家互联网金融风险分析技术平台发布的监测数据,截至2020年2月底,发现互联网金融盗版网站4.81万个,受害用户达12万人次,互联网金融盗版APP2801个,盗版APP下载量3343.7万次。
APP的破解与反破解是Android应用攻防领域的永恒主题,由此衍生了许多攻防对抗的技术手段,如加壳与脱壳,调试与反调试等。本文以Android APP的二次打包与防护为例,梳理下常见的攻防对抗手段,从源头提高APP的安全性。
贰:二次打包
通常对APP进行二次打包的步骤是:解包(反编译)-->插入/篡改代码-->生成新包-->重签名-->运行。简单而言,破解者首先将APK包反编译,对反编译后产生的smali文件中的关键代码进行篡改,再回编译重签名,从而实现破解的需求,如去除广告、修改VIP会员状态、内购破解等。
从APP被二次打包的整个流程可见,对APP进行防护,主要有以下几个重要环节。
一、签名效验:在运行时校验签名,校验签名是否被篡改,在重签名环节进行对抗。
二、文件完整性校验:在运行时对APK文件进行校验,校验关键文件是否被篡改,在生成新包环节进行对抗。
三、方法校验:在运行时校验关键函数,校验方法是否被篡改,在篡改代码环节进行对抗。
一般的加固防护方案采取对APK文件进行加固的方法,并在运行时对APK中的签名和文件进行校验。随着对抗的升级,加固保护技术原理已经被破解者充分研究。在此现状下,传统的保护手段容易被轻松绕过,具体看下面的案例。
叁:破解案例
某影视视频制作APP上线后不久被破解,导致其付费功能被免费使用。技术人员通过分析破解包,发现破解者替换了classes.dex文件,通过类似热更的方式篡改了付费相关逻辑;修改了AndroidManifest.xml配置文件中的Application接管APP运行的入口;并且在APK的assets目录下插入了用于hook的so文件与插件文件,如下所示:
在对抗APP自身的安全防护方面,破解包Hook了java层签名,以获取接口用来绕过APP的签名校验。另外,在运行时,破解者解压出了原APK包,重定向APK的路径到解压出的原APK包路径。传统的完整性校验以及native层的签名校验,因此而失效。这是由于输入的APK路径已经被劫持了,使用“伪造”的原包APK路径进行校验,无法检测到破解行为。
肆:对抗方案
针对这些破解与绕过的技术手段,易盾Android应用加固方案有针对性地增强了“签名校验”与“文件完整性校验”的强度,并且增加了运行时方法级校验功能,可以在各环节有效遏制二次打包,让应用远离破解的威胁。
1签名效验
对Android系统获取签名相关接口进行校验,如果发现被Hook则主动闪退,并且对PMS Hook方式绕过签名校验的行为进行检测,使这种签名绕过方式失效。
2完整性校验
加固时对APK中关键文件信息进行缓存,APP运行时获取APK路径并遍历其中文件,对比加固过程中缓存的文件信息,发现被篡改则主动闪退。在获取APK路径时进行校验,发现被重定向则主动退出,避免通过重定向攻击完整性校验导致校验无效。
3方法级校验
加固时对关键方法信息抽取缓存,APP运行时接管系统关键接口,当调用关键方法时,对其指令特征进行校验,发现特征被篡改,则主动闪退。
4对抗效果
在接入易盾升级对抗的加固方案后,APP反馈线上破解风险得到有效遏制。
伍:结语
本文总结了易盾在Android应用加固防护方案中,通过签名校验、完整性校验、方法级校验等方式,经过线上验证,能够起到较好的对抗效果。
然而,在利益的趋势下,APP破解与盗版乱象形成了盘根错节的灰色产业链,破解与反破解的攻防对抗还在不断的持续演进。对此,易盾的安全团队将持续跟进最新的破解手段,迭代保护方案,集合盗版监测、数据分析与风险预报等环节,不断提升反破解的效果。