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

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

文章目录

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

二、InMemoryDexClassLoader 源码分析





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


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


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


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


其中 InMemoryDexClassLoader 是 Android 8.0 8.08.0 引入的类加载器 ;



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






二、InMemoryDexClassLoader 源码分析


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


第 2 22 个构造函数调用了第 1 11 个构造函数 , 第一个构造函数中 , 调用了 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


目录
相关文章
|
12月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
683 2
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
506 11
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
3264 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
1650 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
1529 0
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
1608 0
|
API 开发工具 Android开发
Android源码下载
Android源码下载
2581 0
|
存储 Ubuntu Linux
linphone android sdk 源码下载编译
linphone android sdk 源码下载编译
2309 0
linphone android sdk 源码下载编译
|
Ubuntu Java Linux
Android13源码下载及全编译流程
Android13源码下载及全编译流程
Android13源码下载及全编译流程