构建与打包能力系列
1、反编译
- dex2jar把dex文件反编译成jar包
sudo chmod +x d2j_invoke.sh //取消d2j_invoke.sh文件的权限
sh dex2jar/d2j-dex.sh apk/classes.dex -o classes.jar //执行命令
- jd-gui jar包class查看工具
2、Apk加固
- dex加密并与壳dex生成加固后的dex
- 把原apk文件中提取出来的classes.dex文件通过加密程序进行加密
- 将加密后的dex文件追加在壳dex文件后面,生成新的dex文件
- 修改原始apk并重新打包签名
- 将上一步生成的加固后dex 替换掉原始的dex
- 由于程序运行的时候,需要先加载StubApplication类。所以,我们需要修改Android的Manifest.xml文件,指定application为StubApplication
3、脱壳
- 在attachBaseContext方法里,主要做两个工作:
- 释放原始dex文件并解密
- 然后使用自定义的DexClassLoader加载解密后的原dex文件
- 反射ActivityThread中的loadedApk中的类加载器为自定义的类加载器
- 在onCreate方法中,主要做两个工作:
- 创建原Application对象,并调用原Application的onCreate方法启动原程序
- 通过反射修改ActivityThread类,并将Application指向原dex文件中的Application