Android APK 反编译

博客围绕Android Dex加载原理展开,指出Android项目编译成.dex文件后打包成apk,且Apk会被加固,解压的dex文件加密。要理解反编译原理,需熟悉Dex加载原理和DexFile结构,还介绍了获取mCookie的线路。

终极目标就是如何获取APK的DEX 文件 .
因为Android 项目编译成可执行.dex文件, 然后再打包成apk.
而这过程种,会对Apk 进行加固,使得我们解压apk 的dex文件是加密过的,无法直接看到源码。

因此,需要对Dex 加载原理 和 DexFile 结构熟悉,
才能理解反编译的原理

1.Android Dex加载原理

先看下两个类, 路径是:/libcore/dalvik/src/main/java/dalvik/system/

package dalvik.system;
public class BaseDexClassLoader extends ClassLoader {

package dalvik.system;
public class PathClassLoader extends BaseDexClassLoader {

需要先了解 Dex 文件如何加载进内存
PathClassloader -> BaseDexClassLoader-> DexPathList
DexPathList里面通过 makeDexElements 获得Element[]
Element[]是通过 loadDexFile返回的dalvik.system.DexFile对象创建的
dalvik.system.DexFile最终通过openDexFileNative返回mCookie

获取mCookie的线路
先获取PathClassloader中的DexPathList对象
再获取DexPathList中的dexElements,也就是Element[]
再获取每个Element中的dexFile对象
再获取dexFile中的mCookie值

链接:https://www.jianshu.com/p/33b140331884

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值