Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段相关的知识,希望对你有一定的参考价值。
一、DexClassLoader 源码分析
ART 虚拟机下的 DexClassLoader 的构造函数 , 与 Dalvik 虚拟机下的 DexClassLoader
构造函数基本相同 , 都是只实现了一个构造函数 , 调用了 BaseDexClassLoader 父类 ;
package dalvik.system;
import java.io.File;
/**
* 从@code.jar和@code.apk文件加载类的类加载器
* 包含@code classes.dex项。这可用于执行代码,而不是
* 作为应用程序的一部分安装。
*
* <p>此类加载器需要一个应用程序专用的可写目录来
* 缓存优化类。使用@code Context.getCodeCacheDir()创建
* 这样一个目录:<pre>@code
* 文件dexOutputDir=上下文。getCodeCacheDir();
* </pre>
*
* <p><strong>不要在外部存储上缓存优化的类</强>
* 外部存储不提供保护您的计算机所需的访问控制
* 防止代码注入攻击的应用程序。
*/
public class DexClassLoader extends BaseDexClassLoader
/**
* 创建一个@code-DexClassLoader来查找解释的和本机的
* 代码。解释类可以在包含的一组DEX文件中找到
* 在Jar或APK文件中。
*
* <p>使用指定的字符分隔路径列表
* @code path.separator系统属性,默认为@code:。
*
* @param dexPath包含类和
* 资源,由@code File.pathSeparator分隔,其中
* android上的默认值为@code”:“
* @param optimizedDirectory目录,其中包含优化的dex文件
* 应该是书面的;不能为@code null
* @param librarySearchPath包含本机
* 库,由@code File.pathSeparator分隔;可能是
* @code null
* @param parent父类加载器
*/
public DexClassLoader(String dexPath, String optimizedDirectory,
String librarySearchPath, ClassLoader parent)
super(dexPath, new File(optimizedDirectory), librarySearchPath, parent);
二、参考 Dalvik 下的 DexClassLoader 类加载流程
ART 虚拟机下的 DexClassLoader 类加载流程 , 在 Java 层 与 Dalvik 下的类加载流程类似 , 参考如下博客 , 然后直接从 native 函数 /art/runtime/native/dalvik_system_DexFile.cc#DexFile_openDexFileNative 开始分析 ;
- 【Android 逆向】整体加固脱壳 ( 脱壳起点 : 整体加固脱壳 | Dalvik 脱壳机制 : 利用 DexClassLoader 加载过程进行脱壳 | 相关源码分析 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 构造函数分析 | makeDexElements 函数分析 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )
以上是关于Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )
Android 逆向ART 脱壳 ( 修改 /art/runtime/dex_file.cc#OpenCommon 系统源码进行脱壳 )
Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | InMemoryDexClassLoader 类加载器脱壳点总结 )
Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )(代码
Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | dex_file.cc 中创建 DexFile 实例对象的相关函数分析 )
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段