ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Android 6.0 系统apk导出后,没有 java 代码 ,dex 文件(odex 转 dex)

2020-12-02 22:30:16  阅读:327  来源: 互联网

标签:dex 文件 java odex jar 文件夹 smali


使用场景:         

           在系统开发中,我们经常会需要对系统中的 apk 的代码进行反编译学习的情况,而在6.0的系统中发现,对系统 apk 解压后,只有资源文件,没有java源代码,后来仔细对照之后,发现 java 源代码是在 oat 文件夹中的 odex 文件中(如下图所示,以SystemUI为例): 

操作步骤:   

         遇到这种情况 , 我们就需要将 odex 转换为 dex 文件了,方法如下(如果不想麻烦可留言直接找我要完整包,或关注公众号回复 odex):

         1.下载 baksmali 和 smali 的 jar 包 和 文件,路径 :http://code.google.com/p/smali/downloads/list (需要翻墙),https://bitbucket.org/JesusFreke/smali/downloads/ (无需翻墙)

         2.将下载下来的 jar 包 和 文件 放在同一个文件夹下,然后将系统的 framework 文件夹导出,也放到这个文件夹下 , 将 framework 中的 boot.oat 文件单独拷出来,也放到这个文件夹目录下,跟 framework 文件夹同级(原因见下面的扩展内容);

         2.odex 转 smali ,将 odex 文件 放在 步骤 2 中创建的文件夹下 , 然后打开命令窗口 , 定位到这个文件夹 , 输入命令如下:

            java -jar baksmali-2.4.0.jar x SystemUI.odex -d framework (如果不行,可尝试增加 disassemble 和 disassemble 命令)

           命令执行完成后,会发现在这个文件夹下多了一个 out 文件夹,这个里面存放的就是转换之后的 smali 文件了 ;

         3.smali 转 dex ,接下来继续在命令窗口中输入如下命令 :

            java -jar smali-2.4.0.jar a out -o classes.dex

           命令执行完成之后,会生成一个 classes.dex 文件,这个就是我们平常开发的 apk 中的 dex 文件了 , 可以用平常的方法来查看其中的源码了;

扩展:

         在我自己的操作过程中遇到了两个问题,如下:

         1.一开始在网上搜到了如下命令,结果出错,从出现的提示中可以看出,是因为命令 -x 不对, 于是打开 baksmali 文件查看 ,发现其中是用的是 x , 于是换成 x ,问题解决。

            

        2.接下来再执行命令,发现如下错误 , 提示没有找到 boot.oat 文件 ,于是在 framework 中找到这个文件 ,然后放到 framework 同一级目录下(也就是上面 步骤2 中创建的文件夹下面 ),再次执行命令,无报错,问题解决。

           

 

标签:dex,文件,java,odex,jar,文件夹,smali
来源: https://blog.csdn.net/u013474571/article/details/109801032

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有