关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »如何反编译Android 5.0 framework

    如何反编译Android 5.0 framework

    2015-12-22 00:00:00 出处:兔子吃过窝边草
    分享

    在Android平台,对于和硬件交互相关的模块来说,比如:和双卡对应的Telephony模块、和拍照对应的Camera模块,以及Bluetooth模块等等,不同厂商会不同程度的修改Android framework层对应的原生模块代码来达到他们自己的目的,这就给应用层的开发人员带来了让他们很头疼的适配问题,严重会导致Crash等问题。为了更好的适配,我们不得不对framework层进行反编译,在Android更新到5.0后,开发人员对framework的反编译也出现了新的变化。

    一、相关背景介绍

    在5.0以前,我们可以直接从手机system目录导出的framework文件夹根目录里找到相关的odex文件或者相关dex文件(解压jar文件或apk文件得到),然后通过smali和dex2jar等工具就可以成功反编译得到我们所需要的东西。但到了5.0,出现了两个问题。

    1. 以前分散在framework文件夹根目录里的那些odex文件全部集中在了framework文件夹中的arm(或arm64)子文件夹中,而且通过正常的反编译发现这些odex并不是像5.0以前一样是我们所需要的东西。

    图:arm文件夹里的各种odex文件

    2. 在arm(arm64)子文件中出现了两个我们在5.0以前没有见过的东西:boot.oat文件和boot.art文件,这两个文件引起了我们的兴趣,也是我们接下来分析的重点。

    图:arm文件夹里重要的boot.oat文件和boot.art文件

    二、对oat文件的分析

    说到这个oat文件和art文件,我们不能不提Google在4.4版本以后新引入的ART运行时,这里简要的说一下:我们都知道在4.4以前,Android应用程序运行的核心基础是Dalvik虚拟机,这个Dalvik虚拟机原先是Apache开源的一个JVM的优化版本,而Google又对Dalvik虚拟机进行了特别的优化来适应Android系统,所以Dalvik虚拟机本质就是JVM。

    尽管Google花了大力气优化Dalvik虚拟机,但是效果目前来看还不能让Google满意。为了Android系统的流畅度能更上一层楼,在Android进化到4.4版本时,Google决定抛弃Dalvik虚拟机引入全新的ART运行时。其实,ART运行时依然还是Java虚拟机的实现,只是ART运行时更高效更好用。

    图:左边对应Dalvik虚拟机,右边对应ART运行时(原图出处:罗升阳——Android ART运行时无缝替换Dalvik虚拟机的过程分析)

    和Dalvik虚拟机相比,ART运行时执行的是本地机器码,虽然Dalvik虚拟机也使用JIT(Just-In-Time)将dex字节码翻译成本地机器码,但是是在应用程序的运行过程中进行的。所以在效率方面还无法和ART运行时相比,ART运行时会在应用程序安装的时候就通过dex2oat将dex字节码翻译成本地机器码,而这个由ART翻译出来的本地机器码会对应着一个oat文件。

    图:函数run_dex2oat通过调用dex2oat来将dex字节码翻译成本地机器码

    其实,oat文件是一种特殊的ELF文件(关于ELF文件的具体内容可以Google相关内容),通过前面的介绍可以知道它包含本地机器码(从dex翻译而来),此外还包含有原来的dex文件内容,本质上它依然是一种预编译文件。这就告诉我们,oat文件就是把过去的很多dex文件一起合并输入然后由ART运行时在安装时翻译成本地的机器码然后再打包转换输出就OK了。

    同样的道理,我们知道system分区的文件都是在厂商在压制ROM时打包进去的, framework文件夹里面的内容尤其是各种dex文件等会在系统启动后通过arm(或arm64)子文件夹里的boot.art文件来指定启动一个ART运行时实例,然后把这些classes.dex等dex文件合并输入到ART再翻译成本地机器码打包成oat文件,这就是我们需要的核心文件boot.oat的大致生成过程(具体的过程比较复杂,详细情况可以自行Google相关内容)。到此,我们简单的介绍了oat文件的来历,oat文件里有什么,以及oat文件的生成过程。

    三、反编译的核心:“拆开”oat文件

    有了以上的了解,我们可以知道,反编译boot.oat文件的核心步骤就是把之前很多dex合并起来生成的oat文件拆开。之前我们在oat是怎么来的时候提到过,ART运行时会通过dex2oat把很多dex文件合并打包然后翻译转换成oat。所以相同的道理,假如要有一个oat2dex工具就好了。可喜的是,真的有oat2dex工具的存在,有了这个工具,我们就可以把我们需要的boot.oat文件给拆卸开了。

    在拆开boot.oat文件后,会在原来的arm(或arm64)文件夹里再自动生成两个子文件夹:dex文件夹和odex文件夹,而这两个文件夹中的文件几乎一样,都是一些dex文件,在这些dex文件中,一定有你需要的dex文件。接下来的工作就和以前的步骤一样了。

    图:反编译oat的核心:oat2dex.jar文件


    图:反编译成功后自动生成的dex和odex子文件夹


    图:反编译成功后在dex文件夹里生成的dex文件

    四、总结

    Android 5.0的反编译问题,其实质和以前并没有发生变化,只是在过程上绕了一个弯,而这个弯就是如何拆解ART运行时带来的oat文件,在我看来,oat文件依然是一个和apk文件类似的东西,它包含了apk或jar中的所有类信息,比如:方法,描述信息,偏移列表等等,是一个非常核心的文件。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    SQL汉字转换为拼音的函数

    windows 7系统无法运行Photoshop CS3的解决方法

    巧用MySQL加密函数对Web网站敏感数据进行保护

    MySQL基础知识简介

    Windows7和WinXP下如何实现不输密码自动登录系统的设置方法介绍

    windows 7系统ip地址冲突怎么办?windows 7系统IP地址冲突问题的

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。