Android 逆向类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )相关的知识,希望对你有一定的参考价值。
一、DexClassLoader 构造函数简介
DexClassLoader 构造函数如下 :
/**
* 创建一个@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);
源码路径 : /libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.java
DexClassLoader 构造函数 参数 :
- String dexPath : 要加载的 DEX 或 JAR 格式字节码的路径 ;
- String optimizedDirectory : 优化目录 , 加载 zip 或 apk 文件 , 需要对 dex 优化生成 odex , 优化后的文件需要存放在该优化目录中 ;
- String librarySearchPath : 相关函数库搜索路径 , 如果没有引用外部函数库 , 可以设置为 null ;
- ClassLoader parent : 父节点类加载器 ,
二、准备 DEX 文件
在 Android Studio 工程中 , 创建 Module ,
并在其中 , 设置一个测试类 , 之后要使用 DexClassLoader 加载该 DEX 字节码文件 ,
package com.example.dex_demo;
import android.util.Log;
/**
* 测试 DEX 字节码加载并执行
*/
public class DexTest
public void test()
Log.i("DexTest", "DexTest : Hello World!!!");
选择 " 菜单栏 / Build / " 编译程序 , 生成 APK 文件 ;
编译后的 dex_demo-debug.apk 文件 , 在当前位置解压 , 获取其中的 classes.dex 字节码文件 ;
将该 DEX 文件拷贝到 主应用的 assets 目录下 ;
以上是关于Android 逆向类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段
Android 逆向加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程
Android 逆向加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程
Android 逆向整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )
Android 逆向类加载器 ClassLoader ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )