前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )

【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )

作者头像
韩曙亮
发布2023-03-30 09:21:44
3730
发布2023-03-30 09:21:44
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、DexClassLoader 类加载器构造函数分析


DexClassLoader 是加载 dex 文件的核心类 , 但是该类除了定义了一个构造函数之外 , 并没有实现其它业务逻辑操作 ;

DexClassLoaderBaseDexClassLoader 的子类 , 因此类加载的核心操作流程 , 都定义在 BaseDexClassLoader.java 代码中 ;

DexClassLoader 的构造函数 , 调用了 BaseDexClassLoader 的构造函数 ;

代码语言:javascript
复制
public class DexClassLoader extends BaseDexClassLoader {
    public DexClassLoader(String dexPath, String optimizedDirectory,
            String libraryPath, ClassLoader parent) {
        super(dexPath, new File(optimizedDirectory), libraryPath, parent);
    }
}

源码路径 : /libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.java

BaseDexClassLoader 的构造函数 , 调用了 ClassLoader 的构造函数 ;

代码语言:javascript
复制
public class BaseDexClassLoader extends ClassLoader {
    public BaseDexClassLoader(String dexPath, File optimizedDirectory,
            String libraryPath, ClassLoader parent) {
        super(parent);
        this.pathList = new DexPathList(this, dexPath, libraryPath, optimizedDirectory);
    }
}

源码路径 : /libcore/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java

查询 ClassLoader 源码时 , 在源码路径中检索出两个 ClassLoader , 分别是

本篇博客分析的是 Dalvik 下的 ClassLoader 类加载器 , 因此分析的是 /libcore/libdvm/src/main/java/java/lang/ClassLoader.java 源码 ;

在 BaseDexClassLoader 中调用的 ClassLoader 构造函数如下 , 该构造函数中实现的内容很简单 , 只设置了该类加载器的父节点 ;

代码语言:javascript
复制
public abstract class ClassLoader {
    /**
     * 使用指定的类装入器作为其父类构造此类的新实例。
     *
     * @param parentLoader
     *            要用作新类装入器父级的{@code ClassLoader}。
     */
    protected ClassLoader(ClassLoader parentLoader) {
        this(parentLoader, false);
    }
}

源码路径 : /libcore/libdvm/src/main/java/java/lang/ClassLoader.java

二、DexPathList 引入


BaseDexClassLoader 的构造函数 , 调用了 ClassLoader 的构造函数 之后 , 有调用了 DexPathList 的构造函数 , 创建 DexPathList 实例对象 , 赋值给了 BaseDexClassLoader 的唯一成员 private final DexPathList pathList ;

代码语言:javascript
复制
public class BaseDexClassLoader extends ClassLoader {
	private final DexPathList pathList;
    public BaseDexClassLoader(String dexPath, File optimizedDirectory,
            String libraryPath, ClassLoader parent) {
        super(parent);
        this.pathList = new DexPathList(this, dexPath, libraryPath, optimizedDirectory);
    }
}

源码路径 : /libcore/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、DexClassLoader 类加载器构造函数分析
  • 二、DexPathList 引入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档