在 APK 信息的对话框中,点击功能后弹出菜单,除了前面介绍过的 APK 签名和 XML 翻译模式外,还可以看到 APK 优化、APK 共存、RES 资源混淆、RES 反资源混淆、去除签名校验,后面两个功能需要开通 VIP 才能使用。
APK 优化
该功能对安装包内不规范的文件以 APK 模式进行重新打包并 Zipalign 对齐优化,优化后安装包可能会增大。
在 apk 文件中,像图片、音频以及 resources.arsc 等资源文件,都应该以存储的方式进行打包,同时进行 4K 对齐,这样有助于提高应用的加载和运行效率。
APK 共存
在安卓系统中,包名是每个应用的身份 ID,应用更新后名字、图片、界面都可以变化,唯独包名不能变。对于不同的应用,它们的包名不能一样,否则会被认为是同个应用。
通过这个原理,我们只需要改变应用的包名,就可以在手机多次安装同一个应用,而不会出现覆盖安装了。APK 共存功能正是帮你自动完成包名的修改。
由于程序的复杂多变,很难有一种方法可以保证应用在修改完包名后还能正常运行,MT 提供了两种方案进行修改,我称它们为新版方案和旧版方案。
新版方案
新版共存方案由 MT 独创,它通过修改 AndroidManifest.xml 中的包名以及其它一些关键信息,还有修改 resources.arsc 中的包名来实现共存,不会修改 dex 和 so 文件,对 apk 的改动最小,成功率也比较高。
如果使用该方案生成的 apk 安装后无法运行,并且你有一定的技术经验的话,可以用 getPackageName 为关键字搜索代码,找出导致出错的地方手动修复。
旧版方案
旧版共存方案使用传统方式制作共存,它会把 apk 所有的包含包名的数据全部替换成新的包名,包括 arsc、dex、xml、so 文件中的数据。如果使用该方案在处理 dex 文件时报错,可以先进行 dex 修复并打包回去,最后再进行共存。
补充说明
在进行共存前,建议先对 apk 重新签名然后安装,测试下是否有防修改的保护。
虽然一个叫新方案一个叫旧方案,但两者没有优劣之分,只是修改方法不同,在一种方案失败了之后应该尝试下另一种方案。
不论是新版方案还是旧版方案,都不能保证共存后的应用一定可以运行,如果你了解这方面的技术,可以在失败后手动修复。
RES 资源混淆
RES 资源混淆可以把 apk 中的资源名称都修改成没有意义的符号。其中 res/xxxx 文件夹内的资源文件全部转移到 r 文件夹中,resources.arsc 文件中的条目(Entry)名称会修改成 MT_Bin。资源混淆还会在一定程度上减小 apk 文件体积,增加反编译难度。
RES 反资源混淆
RES 反资源混淆是资源混淆的一个逆过程,这是一个 VIP 功能。它可以把所有资源文件放回到它们原先所在的 res/xxx 文件夹、还原资源文件名后缀。
该功能无法还原资源文件名,因为原来的文件名被消除了,这是一个不可逆的过程,还原的文件名统一用“类型名+ID”的形式,例如“drawable001F”,resources.arsc 文件中的条目(Entry)名称也是如此。
具体的效果请自行尝试。
去除签名校验
有些应用会对 apk 的签名身份信息进行校验,以防止被修改。
使用该功能需要开通 VIP,它的实现原理是对 PackageManager 的 getPackageInfo() 方法进行 hook,修改其返回的 signatures 数据,所以仅适用于通过该方式来进行签名校验的应用,如果是通过其它方式进行签名校验则无效。
MT 会从 META-INF/XXX.RSA (DSA) 文件中获取原始签名数据,所以在使用该功能前请确保被处理的 apk 中的 RSA/DSA 签名信息文件是未经过修改的。
如果当前处理的文件不是原版 apk,请先将原版安装包中的 META-INF/XXX.RSA (DSA) 文件添加当前 apk 中。