Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )(代码

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )(代码相关的知识,希望对你有一定的参考价值。





一、加固厂商在 ART 下使用的两种类加载器 ( InMemoryDexClassLoader | DexClassLoader )



脱壳就是要在加固厂商使用类加载器加载 DEX 文件时 , 从加载过程中 , 从内存中获取 DEX 文件 ;

  • Dalvik 虚拟机的 android 系统 中 , 即 Android 4.4 4.4 4.4 及以下的系统 , 加固厂商 使用 DexClassLoader 加载 DEX 字节码文件 ;

  • ART 虚拟机的 Android 系统 中 , 即 Android 5.0 5.0 5.0 及以上的系统 , 加固厂商使用 InMemoryDexClassLoader 或者 DexClassLoader 加载 DEX 字节码文件 ;

  • 其中 InMemoryDexClassLoaderAndroid 8.0 8.0 8.0 引入的类加载器 ;


由于要分析 ART 虚拟机下的 InMemoryDexClassLoaderDexClassLoader 类加载器 , 这里分析 Android 8.0 8.0 8.0 源码 ;





二、InMemoryDexClassLoader 源码分析



InMemoryDexClassLoader 类加载器源码中 , 只定义了构造函数 , 没有定义实际业务逻辑 , 与 DexClassLoader 类似 ;

2 2 2 个构造函数调用了第 1 1 1 个构造函数 , 第一个构造函数中 , 调用了 BaseDexClassLoader 的构造函数 ,

super(dexBuffers, parent);

InMemoryDexClassLoader 源码 :

package dalvik.system;

import java.nio.ByteBuffer;

/**
 * 一个@link ClassLoader实现,从
 * 包含DEX文件的缓冲区。这可用于执行以下代码:
 * 尚未写入本地文件系统。
 */
public final class InMemoryDexClassLoader extends BaseDexClassLoader 
	/**
	* 使用给定的DEX缓冲区创建内存中的DEX类装入器。
	* 
	* @param dexBuffers 包含之间的DEX文件的缓冲区数组
	* <tt>缓冲区。位置()</tt>和<tt>缓冲区。限制()</tt>。
	* @param parent 委托的父类加载器。
	* @隐藏
	*/
    public InMemoryDexClassLoader(ByteBuffer[] dexBuffers, ClassLoader parent) 
        super(dexBuffers, parent);
    

	/**
	 * 创建一个新的内存中DEX类装入器。
	 * 
	 * @param dexBuffer缓冲区,包含之间的DEX文件内容
	 * <tt>缓冲区。位置()</tt>和<tt>缓冲区。限制()</tt>。
	 * @param parent委托的父类加载器。
	 */
    public InMemoryDexClassLoader(ByteBuffer dexBuffer, ClassLoader parent) 
        this(new ByteBuffer[]  dexBuffer , parent);
    

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

以上是关于Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )(代码的主要内容,如果未能解决你的问题,请参考以下文章

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 类加载流程 )(代码片段