第四章 常见的 Android 文件格式(七)(OAT)

本文详细介绍了Android中的OAT文件,它是Android 4.4引入的优化过的DEX文件,用于ART虚拟机。OAT文件由dex2oat命令在安装APK时生成,包含ELF文件格式。内容涉及OAT文件的生成、格式、结构,以及如何将OAT文件转换回DEX文件。通过对OATHeader和OatDexFile结构的解析,阐述了OAT文件的组织和关键字段的作用。
摘要由CSDN通过智能技术生成

OAT

  • OAT 文件是在 Android 4.4 中引入的。OAT 是优化过的、用于 ART 虚拟机执行的 DEX 文件,类似 Dalvik 的 ODEX
  • 对新版本的 Android 程序进行安全研究,无论是对 OAT 文件的 Hook 还是加密保护,都要了解 OAT 文件格式

ART 虚拟机

  • ART 使用 AOT(Ahead-of-Time)编译技术,在 APK 第一次安装或系统升级、重启时,通过调用 dex2oat 命令将 APK 中的 DEX 文件静态编译成 OAT 并存放到 Android 设备的 /data/dalvik-cache 或 /data/app/package 目录。dex2oat 与 dexopt 不同,dex2oat 更像一个编译器,将 DEX 中的 Dalvik 字节码编译成 Native 机器码。经过这样的操作,以后启动程序时,ART 就会提高 APK 的启动速度,从而执行生成的 OAT 文件而不是 APK 中的 DEX 文件。从 Android 5.0 开始,系统默认将 ART 作为虚拟机,程序运行速度明显变快。但有个缺点,即 OAT 的静态编译操作会影响 APK 的安装效率,导致 Android 4.4 后 APK 安装速度更长。为了使运行和安装速度都更快,Android 7.0 增加了 JIT(just-in-Time)编译。新版本的 Android 使用的是基于 JIT on AOT 的编译技术

生成 OAT 文件

  • 系统在安装 APK 时,会调用 dex2oat 自动生成 OAT 文件。也可手动执行 dex2oat 命令,为指定的 DEX 生成 OAT 文件
  • 具体操作:在执行 dex2oat 命令时使用 --dex-file 参数指定传入的 DEX 路径(若有多个 DEX,可多次指定该参数),然后为 --oat-file 参数指定 OAT 的输出路径(在指定传入的路径时,该路径要对当前的 adb shell 用户有可写权限)
  • 以 crackme0201.apk 为例,执行如下命令可生成 crackme0201.oat:
    在这里插入图片描述

OAT 文件格式

  • 和 ODEX 一样,OAT 也有自己的格式。Android 原生程序以 ELF 格式作为程序格式基础,并在此基础上增加了属于 Android 的应用程序二进制接口(Application Binary Interface, ABI)

  • a

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值