dex文件加密
apk处理流程
- 通过脚本程序对源程序apk进行拆分,通过加密算法把原dex文件加密
- 通过加密后dex文件和壳程序dex文件合并成新的dex
- 将加密的dex文件追加在壳dex文件后面,并在文件末尾追加加密dex文件的大小数值方便后面启动读取
- 修改原程序的AndroidManifest的Application替换为壳程序的ProxyApplication
- 替换远程apk的class.dex为合并后的壳程序(包含源程序dex文件)的dex文件
- 重新打包新的apk并重新签名
启动流程 - 启动apk后,系统会优先执行壳程序的Application
- attachBaseContext会优先于onCreate方法
- 在attachBaseContext中读取classes.dex文件末尾记录加密dex文件大小的数值
- 计算出加密的dex文件病读取出来解密后保存在资源目录下(这里dex文件加载完后需要删除)
- 使用自定义的DexClassLoader加载解密后的原dex文件
- 在onCreate中反射修改ActivityThread类,并将Application指向原dex文件中的Application
- 创建原Application对象,并调用原Application的onCreate方法启动原程序
加密算法 -
加密算法可以是简单的异或操作、反转、rc4、des、rsa等加密算法