0x00 问题呈现

在分析某手机自带应用时,为了在JEB中反编译,将其adb pull到了电脑上。解压后发现如下文件:

APK解压目录列表

惊奇的发现该APK包中没有dex文件,一开始特别疑惑没有dex文件,也就是没有代码,那是如何运行的呢?

其实APK文件中的dex文件被odex化了,该处理方式有以下好处:

  1. odex是从apk文件中提取出classes.dex文件,并通过优化生成一个可运行的文件单独存放。
  2. 应用保护,一般情况下有odex的应用,其对应的apk文件中只存留资源文件,或者破损的dex文件,这样在反编译的情况下得不到正确的应用数据,同时也无法安装使用。

具体原理就不说了,本文旨在如何将APK包重组使得JEB可以反编译。

了解到odex机制后,目标就是找到该APK对应的odex文件,而该odex文件名是和包名一致的,所以很容易找到:

其实odex文件JEB是可以直接反编译的,但是会存在两个问题:

  1. odex文件中很多字符串等资源都在原apk包中,仅仅反编译odex将会识别不出来。
  2. 系统级的应用都会需要系统框架中代码的支持,仅仅反编译odex很多方法将会使得很多函数失败,例如下面这些类都是异常的。

单独反编译odex文件出现的问题

所以我们需要做两个方面的修复:

  1. 结合系统框架还原修复dex文件。
  2. 将dex文件合并到APK中,并进行反编译。

0x01 odex转dex

odex转dex流程大致分为下面几个步骤:

步骤一:通过baksmali工具将odex反汇编成smali文件工程。

如果你不知道需要哪些其他系统框架的支持,直接使用baksmali对odex进行反编译,但是会出现如下错误:

直接使用baksmali反编译

报错:不能找到 Could not find classpath entry /system/framework/core.odex

您只要到手机目录下adb pull出对应的文件到同级目录下,然后继续反编译。使用同样的方式解决这样的问题直到反编译成功。

其实为操作方便你只要将/system/framework文件夹内容全部拷贝出来,然后使用baksmali进行反编译。中途可能刷屏一些警告和错误信息,不用管,其实很多文件已经正确反编译成smali文件(很小几率刚好错误的文件是你分析的代码,否则认倒霉吧)。

生成的smali工程将在统计目录的out文件夹中:

baksmali反编译odex成功

步骤二:再通过smali工具将smali工程文件编译成dex文件。

使用如下工具命令进行编译smali汇编到dex文件:

smali工具生成dex

发现编译过程中因为这两个文件使得编译失败 ,我们将这两个文件删除重新操作就可以生成一个dex文件了。这两个文件也可以备份,防止重要逻辑代码在该处。

dex文件生成成功

工具下载地址:https://bitbucket.org/JesusFreke/smali/downloads/

0x02 反编译APK

为反编译APK可以直接将上述生成的dex文件压缩放入APK包中:

dex放入APK中

然后就可以使用JEB反编译该APK文件,我们发现之前反编译失败的函数都被修正了:

反编译成功的代码

.odex文件的反编译相关推荐

  1. 安卓.odex文件的反编译

    做安卓逆向免不了要遇到odex后缀的文件反编译.目前还没有一键反编译的方法.我下面讲述我本次反编译的步骤,以供参考交流. 本次目标文件是个空调控制的APP,文件名是AirConditioning,打开 ...

  2. Java的class文件批量反编译成Java文件

    Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...

  3. jar包、class文件批量反编译并解压

    jar包.class文件批量反编译并解压 该脚本可以在一个java工程目录下自动搜寻jar包.class文件,并在同级目录下创建一个新的文件夹来保存反编译和解压结果. 使用反编译插件为fernflow ...

  4. 游走Android系列之APK文件的反编译、修改和重新编译打包

    Android apk反编译.重新编译和签名 将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex文件中得到.class,再将.class处理 ...

  5. 【apk破解尝试之旅】-——apk文件的反编译与回编译

    前段时间玩了个手游,中途碰到一个副本迟迟无法攻破,又不没钱氪金,想着弄个破解版的,搜了半天没找到,于是决定自己动手干! 首先要对apk有个初步的了解,..apk文件是一种压缩文件,网上有种说法:apk ...

  6. 如何修改apk文件,反编译(转)

    APK文件的解包打包和修改 相信每位玩机的人对APK文件都不陌生.你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具.插件.好玩的游戏等等...你可曾知道这些每天都伴随着你的APK文件是什 ...

  7. linux apk 拆分 odex,android apk反编译和odex转dex-Go语言中文社区

    http://www.cnblogs.com/wanqieddy/archive/2012/03/01/2375424.html 大家好,这里介绍apk反编译操作. 1:apk反编译 2:odex转d ...

  8. Apk文件破解反编译(转)

    首先我们了解下什么是apk APK是AndroidPackage的缩写,即Android安装包(apk).APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android ...

  9. 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )

    文章目录 一. 购买加固服务 二. 设置资源加固 三. 设置 SO 文件保护配置 四. 设置 SO 防盗用文件配置 五. 反编译验证加固效果 本博客用于记录下 360 加固保 加固应用流程 ; ( 上 ...

最新文章

  1. 行业B2B网站策划6个基本要求
  2. 【Flutter】Dart 数据类型 ( var 数据类型 | Object 数据类型 )
  3. 产品经理的思考利器——UML
  4. 线性回归原理与spark/sklearn实现
  5. Python3 爬虫学习笔记 C04 【自动化测试工具 Selenium】
  6. oracle 取mac地址,java执行命令,得到Mac地址
  7. 1313 质因数分解
  8. 引用dll文件要复制到本地
  9. git_day03_01——git远程仓库的使用
  10. 深入浅出Fetch-API【转】
  11. read, readline, readlines
  12. 查看计算机数字证书,数字证书认不到怎么办?
  13. Android DataBing基础使用 +ViewModel 及setvalue过程及原理
  14. ubuntu18.04安装dash-to-dock出错的问题
  15. 剑指Offer之二维数组中的查找
  16. (学习笔记)【目标检测】YOLO系列简单归纳
  17. 用计算机绘制函数图像ppt,如何利用描点画函数图像课件制作
  18. 在Linux中修改系统的IP地址
  19. C++的atof()
  20. python正则表达式与文本匹配

热门文章

  1. QT 支持多客户端网络视频监控的实现
  2. 人脸识别常用数据集大全(12/20更新)
  3. 对比学习+分割 | 论文阅读
  4. 安装visual studio 2013
  5. Python学习之旅-15
  6. 喇叭、扬声器的正负极问题
  7. mysql dba工具_Github推荐:MySQL DBA不可错过的五大开源管理工具!
  8. win11桌面改成win10桌面的设置方法
  9. python 查询周数 week number
  10. day9-为什么会有GIL锁