0
点赞
收藏
分享

微信扫一扫

【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 )



文章目录


  • ​​一、不同版本的 DEX 加载​​

  • ​​1、Android 8.0 版本 DEX 加载分析​​
  • ​​2、Android 6.0 版本 DEX 加载分析​​
  • ​​3、Android 5.0 版本 DEX 加载分析​​







一、不同版本的 DEX 加载


不同 Android 版本 DexPathList 中的 Element[] dexElements 成员如何创建 ;




1、Android 8.0 版本 DEX 加载分析



Android 8.0 8.0 8.0 版本 DEX 加载分析 :

在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements 方法 生成上述 DEX 数组 ; makeDexElements 方法有 4 4 4 个参数 ;

8.0 8.0 8.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )

/*package*/ final class DexPathList {
/**
* dex/resource (class path) 元素集合.
* 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
*/
private final Element[] dexElements;
public DexPathList(ClassLoader definingContext, String dexPath,
String libraryPath, File optimizedDirectory) {
// save dexPath for BaseDexClassLoader
this.dexElements = makeDexElements(splitDexPath(dexPath), optimizedDirectory,
suppressedExceptions, definingContext);
}
}

参考源码地址 :​ ​​8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java​​




2、Android 6.0 版本 DEX 加载分析



Android 6.0 6.0 6.0 版本 DEX 加载分析 :

在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements 方法 生成上述 DEX 数组 ;

6.0 6.0 6.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )

/*package*/ final class DexPathList {
/**
* dex/resource (class path) 元素集合.
* 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
*/
private final Element[] dexElements;
public DexPathList(ClassLoader definingContext, String dexPath,
String libraryPath, File optimizedDirectory) {
// save dexPath for BaseDexClassLoader
this.dexElements = makePathElements(splitDexPath(dexPath), optimizedDirectory,
suppressedExceptions);
}
}

参考源码地址 :​ ​​6.0.1_r16/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java​​




3、Android 5.0 版本 DEX 加载分析



Android 5.0 5.0 5.0 版本 DEX 加载分析 :

在 DexPathList 中 , Element[] dexElements 成员创建是调用 makeDexElements 方法 生成上述 DEX 数组 ; makeDexElements 方法有 3 3 3 个参数 ;

5.0 5.0 5.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )

/*package*/ final class DexPathList {
/**
* dex/resource (class path) 元素集合.
* 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
*/
private final Element[] dexElements;
public DexPathList(ClassLoader definingContext, String dexPath,
String libraryPath, File optimizedDirectory) {
this.dexElements = makeDexElements(splitDexPath(dexPath), optimizedDirectory,
suppressedExceptions);
}
}

参考源代码 :​ ​​5.1.0_r3/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java​​




分析上面 3 3 3 个版本的 DEX 加载源码 , 发现每个版本加载方法不同 , 这样在开发多 DEX 加载时 , 就需要做相应的兼容 ;



举报

相关推荐

Android Dex分包

浅谈 Android Dex 文件

0 条评论