【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


目录
相关文章
|
22天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
22天前
|
Java Android开发
Android反编译查看源码
Android反编译查看源码
23 0
|
1天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
3 0
|
2天前
|
JSON 编译器 开发工具
VS Code阅读Android源码
VS Code阅读Android源码
9 1
|
1月前
|
定位技术 API 数据库
基于Android的在线移动电子导航系统的研究与实现(论文+源码)_kaic
基于Android的在线移动电子导航系统的研究与实现(论文+源码)_kaic
|
1月前
|
搜索推荐 测试技术 定位技术
基于Android的自助导游系统的设计与实现(论文+源码)_kaic
基于Android的自助导游系统的设计与实现(论文+源码)_kaic
|
1月前
|
Java 关系型数据库 应用服务中间件
基于Android的人事管理系统设计与实现(论文+源码)_kaic
基于Android的人事管理系统设计与实现(论文+源码)_kaic
|
1月前
|
设计模式 测试技术 数据库
基于Android的食堂点餐APP的设计与实现(论文+源码)_kaic
基于Android的食堂点餐APP的设计与实现(论文+源码)_kaic
|
2月前
|
小程序 JavaScript Java
android电子班牌人脸识别系统源码
智慧校园云平台全套源码包含:电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台。
34 1
|
2月前
|
小程序 Java 数据挖掘
Java校园智慧管理云平台源码 小程序+android电子班牌系统
智慧校园技术架构 ❀后端:Java ❀框架:springboot ❀前端页面:vue +element-ui ❀小程序:小程序原生开发 ❀电子班牌:Java Android
36 0