获取android framwork层jar包的艰苦历程

(1)首先找到一个待提取的系统版本的移动设备,并连接pc

(2)在5.0以前,我们可以直接从手机system目录导出的framework文件夹根目录里找到相关的odex文件或者相关dex文件(解压jar文件或apk文件得到)。

    但到了5.0,出现了两个问题:

  • 以前分散在framework文件夹根目录里的那些odex文件全部集中在了framework文件夹中的arm(或arm64)子文件夹中,而且通过正常的反编译发现这些odex并不是像5.0以前一样是我们所需要的东西。
  • 在arm(arm64)子文件中出现了两个我们在5.0以前没有见过的东西:boot.oat文件和boot.art文件,这是我们接下来分析的重点。

                                                 

获取android framwork层jar包的艰苦历程_第1张图片

(3)https://zhuanlan.zhihu.com/p/38083319

    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相关内容)。

(4)关键文件为boot.oat,所以接下来首先将该文件pull到pc端。

(5)利用oat2dex.jar工具将boot.oat反编译,反编译成功后会在boot.oat目录下生成dex和odex子文件夹

java -jar oat2dex.jar boot boot.oat 

获取android framwork层jar包的艰苦历程_第2张图片

(6)利用dex2jar工具,针对dex文件夹或odex文件夹中的文件进行反编译

获取android framwork层jar包的艰苦历程_第3张图片

 

获取android framwork层jar包的艰苦历程_第4张图片

(7)利用jdk反编译jar到class文件:

获取android framwork层jar包的艰苦历程_第5张图片

 

你可能感兴趣的:(Android系统研究)