ODEX
- 在 Android 5.0 前,主要使用的虚拟机是 Dalvik。当 APK 首次安装,或系统升级、重新启动时,为提高 DEX 的执行效率,Dalvik 会对 APK 中的 DEX 进行一定程度的优化。具体做法:解析 DEX 并生成一个 ODEX 文件,将其存放在 Android 设备的 /data/dalvikcache 目录下。以后在运行这个程序时,就不会读取 APK 中的 DEX,而是直接加载这个优化过的 ODEX,从而大大节省每次运行程序时在优化上花费的时间
生成 ODEX 文件
- 系统生成 ODEX 的方法是内部调用系统命令 dexopt。此命令不允许直接调用生成 ODEX,但 Android 在 Dalvik 时代的早期版本中,会在系统源码的 build/tools/dexpreopt/dexopt-wrapper 目录下提供 dexopt-wrapper 工具,可用于手动生成 ODEX
- 以 Crackme0201 为例,除了在 /data/dalvik-cache 目录下直接拿到 ODEX,也可执行如下命令生成 ODEX(执行此命令要有设备的 Root 权限)
- 登录设备的 shell:
adb shell
- 提升权限:
su
- 进入指定目录:
cd /data/local/tmp
- 生成 ODEX:
dexopt-wrapper /data/app/com.droider.crackme0201-1.apk crackme0201.odex
- 获取设备中的 ODE