更新时间:2023-12-13 16:27
近年来,我国移动互联网发展迅猛,智能移动设备迅速普及。但由此而引发的移动安全问题也日益凸显,尤其在开放的安卓生态圈中,二次打包的“盗版APP”成为手机木马、手机病毒、隐私窃取等“顽疾”肆虐的大门。从事二次打包的“打包党”通过破解他人的APP,来赚取非法的广告收入。像保卫萝卜、植物大战僵尸等曾经火爆的APP,都无一例外地遭遇过“二次打包”。一旦安装了“二次打包”的软件,手机用户就会遭遇频繁的广告骚扰和流量损失。
对移动应用进行破解、再篡改或插入恶意代码、最后生成一个新应用的过程。通常不法分子更为青睐市面上下载量最火爆的APP进行二次打包,这些APP拥有大量的用户集群,通过插入广告、木马、病毒的方式窃取用户隐私、吸资扣费、耗费流量成功的可能性大。从外观来看,二次打包后的盗版APP与正版APP完全相同,用户肉眼无法分别。所以一旦产生任何不可挽回的损失,用户会直接将“罪名”扣在APP及开发者的头上,而通常开发者和运营人员对此也是毫不知情,严重侵害了开发者的利益。
为了避免被二次打包,有些开发者会自己对应用进行代码混淆,但代码混淆只是增加APP代码的阅读难度,并不能真正阻止破解者的反向工程。对于破解者而言,分分钟就可以将一款APP进行篡改并二次打包。下面介绍下步骤:
通常二次打包的步骤是:解包(反编译)-->插入/篡改代码-->生成新包-->重签名-->运行。
首先可以通过使用ApkTool、Jeb、baksmali/smali等反编译工具,反编译apk安装包,图1为调用baksmali文件的截图。
图1 调用baksmali文件
解包后可以看到所有文件列表,找到需要修改的smali文件,这里修改的是MainActivity.smali,如图2。
图2 修改MainActivity.smali
解开MainActivity.smali文件后,在里面插入一段篡改代码,修改登录界面中“Button”按钮上的文本,图3和图4是修改前后smali文件中的代码。
图3 修改前的smali文件
图4 修改后的smali文件
修改后再调用smali.jar文件,将smali重新打包成dex文件,如图5所示。
图5 将smali重新打包
接下来再将新生成的classes.dex文件替换原安装包中的classes.dex,并进行重新签名,就生成了一款盗版应用。运行该款盗版应用时会发现登录界面的登录按钮被修改替换成了“Fake Btn”,如图6、图7所示。
图6 篡改前的界面
图7篡改后的界面
通过简单的几个操作步骤,一款未经加固保护的APP就被盗版了,一个团队一年的劳动成果几分钟内就被轻易窃取。通常,盗版应用会通过插入/替换广告SDK赚取广告收入、修改支付渠道截取开发者收入、插入病毒/木马程序盗取用户信息等形式出现,操作步骤与上面介绍的类似,严重侵害了开发者和用户的利益。
要想保护手机APP,避免被盗版,就要从源头进行加固保护,让破解者无从下手。图8是使用加固保对APP进行加固前后的对比,加固后再调用baksmali.jar进行反编译,可以看到代码文件全部被隐藏,暴露的只是加固程序的一些代码,破解者自然无法再对源程序进行篡改了。
图8 加固后展现的代码
对安卓应用进行加固保护,能有效避免应用被恶意破解、反编译、二次打包、内存抓取等。同时给应用提供数据加密、签名校验、防内存修改、完整性校验、盗版监测等保护功能,给予安卓应用最强保护,从源头消灭恶意盗版应用。