【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )

简介: 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )

文章目录

一、DexFile 构造函数

二、DexFile.openInMemoryDexFile 函数

三、Android 源码中查找 native 函数





一、DexFile 构造函数


上一篇博客 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 ) 分析到 , 在 DexPathList 中的 makeInMemoryDexElements 方法中 , 调用了 DexFile(ByteBuffer buf) 构造函数 , 创建 DexFile ;



在 DexFile 构造函数中 , 调用了 openInMemoryDexFile 函数 ;



DexFile 构造函数源码 :


/**
 * 加载DEX文件。此类仅供内部使用,不应使用
 * 通过申请。
 * 
 * @已弃用的此类不应由应用程序直接使用。会痛的
 * 在大多数情况下,会导致字节码的错误执行
 * 最坏的情况。应用程序应该使用一个标准类加载器,例如
 * 改为{@link dalvik.system.PathClassLoader}<b> 此API将被删除
 * 在未来的Android版本中</b>。
 */
@Deprecated
public final class DexFile {
  DexFile(ByteBuffer buf) throws IOException {
  // ★ 核心跳转
  mCookie = openInMemoryDexFile(buf);
  mInternalCookie = mCookie;
  mFileName = null;
  }
}






二、DexFile.openInMemoryDexFile 函数


在 DexFile.openInMemoryDexFile 函数中 , 调用了 2 22 个 native 方法 ,


/**
 * 加载DEX文件。此类仅供内部使用,不应使用
 * 通过申请。
 * 
 * @已弃用的此类不应由应用程序直接使用。会痛的
 * 在大多数情况下,会导致字节码的错误执行
 * 最坏的情况。应用程序应该使用一个标准类加载器,例如
 * 改为{@link dalvik.system.PathClassLoader}<b> 此API将被删除
 * 在未来的Android版本中</b>。
 */
@Deprecated
public final class DexFile {
  private static Object openInMemoryDexFile(ByteBuffer buf) throws IOException {
  if (buf.isDirect()) {
    // ★ 核心跳转
    return createCookieWithDirectBuffer(buf, buf.position(), buf.limit());
  } else {
    // ★ 核心跳转
    return createCookieWithArray(buf.array(), buf.position(), buf.limit());
  }
  }
  private static native Object createCookieWithDirectBuffer(ByteBuffer buf, int start, int end);
  private static native Object createCookieWithArray(byte[] buf, int start, int end);
}


源码路径 : /libcore/dalvik/src/main/java/dalvik/system/DexFile.java#openInMemoryDexFile






三、Android 源码中查找 native 函数


进入 Android 源码查看网站 http://aospxref.com/android-8.0.0_r36/ ,


在 Project(s) 中 , 选择 " select all " , 选中所有模块 , 在 " Full Search " 中 搜索 createCookieWithDirectBuffer 函数 , 这是 native 函数 ,


搜索出该 native 函数在 /art/runtime/native/dalvik_system_DexFile.cc 中定义 ;



image.png


目录
相关文章
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
302 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
4月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
86 11
|
5月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
189 1
|
5月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
670 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
5月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
245 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
5月前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
259 0
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
267 0
|
安全 Java Android开发
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )
169 0
|
安全 Java Android开发
【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
265 0
|
1月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
54 19