Android中dex odex oat vdex art文件格式区别

1. dex

dex是Android平台的可执行文件。java文件先编译成class文件(java字节码),再通过dx或d8工具转换成dex文件。

class文件时java虚拟机的可执行文件,与之相对的,dex文件是Dalvik虚拟机的可执行文件,dex文件中存放的自然就是Dalvik字节码。

Android应用安装包,即apk文件中就含有一个或多个dex文件,命名如下:

  • classes.dex
  • classes1.dex
  • classes2.dex
  • ……

2. odex

odex也是Android平台的可执行文件。

在Android 5之前(也许),为了加快应用的运行速度,对apk中的dex文件进行优化(优化工具:dexopt-wrapper),生成odex文件,保存在data/dalvik-cache目录下或与apk同目录下,并删除apk中的dex文件。之后运行程序时,直接加载odex文件,避免重复验证和优化。

不过在Android 5之后,.odex就不再是odex文件了,而是oat文件,用十六进制编辑器打开,可以发现文件头是”ELF”,即ELF文件格式。

3. oat

oat也是Android平台的可执行文件,是一种elf文件格式。

在Android 5之后,在安装apk的过程中,Android系统会对应用程序进行优化,使用dex2oat工具生成oat文件。它不仅包含dex文件的内容,也将一些Dalvik指令编译成了本地机器指令。

oat文件结构会随Android版本变化,且没有向后兼容性。oat文件结构可见http://romainthomas.fr/oat/。

4. vdex

vdex文件不是Android平台的可执行文件。

在Android 8之后加入的,vdex文件包含apk的未压缩dex代码,以及一些旨在加快验证速度的元数据,其目的主要是为了跳过verified流程,减少dex2oat执行时间。

同oat文件一样,vdex文件结构也会随Android版本变化,且没有向后兼容性。vdex文件结构可见https://romainthomas.fr/vdex/。

5. art

oat也是Android平台的可执行文件,是一种elf文件格式。

借助odex文件进行优化生成的,记录应用启动的热点函数相关地址,方便寻址。

同oat文件一样,art文件结构也会随Android版本变化,且没有向后兼容性。


参考:

https://lief-project.github.io/doc/latest/tutorials/10_android_formats.html

https://www.wuyifei.cc/dex-vdex-odex-art/

https://www.eefocus.com/article/525061.html

https://source.android.com/docs/core/runtime/configure?hl=zh-cn

https://medium.com/@_sushil/oat2dex-android-pentesting-6f99e9c57198

https://newandroidbook.com/files/ArtOfDalvik.pdf

https://newandroidbook.com/files/(里面有很多可以参考的pdf)

http://romainthomas.fr/oat/

https://romainthomas.fr/vdex/

https://www.blackhat.com/docs/asia-15/materials/asia-15-Sabanal-Hiding-Behind-ART-wp.pdf


Android中dex odex oat vdex art文件格式区别
http://example.com/2023/11/17/Android安全/Android中dex odex oat vdex art文件格式区别/
作者
gla2xy
发布于
2023年11月17日
许可协议