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 ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )