今天要反编译一个systemUI查看一些东西,本文是反编译Android 6.0的某手机的systemUI
准备工具:
baksmali-2.1.3.jar
smali-2.1.3.jar
dex2jar-2.0
在csdn上我上传了该工具:http://download.csdn.net/detail/huml126/9620919,你也可以去https://bitbucket.org/JesusFreke/smali/downloads这里下载前面两个jar包
反编译步骤:
1、把手机的system/framework pull出来 adb pull system/framework
2、把你要反编译的odex pull处理: adb pull system/priv-app/SystemUI/oat/arm64/SystemUI.odex 出来
3、把odex编译成smali文件
java -jar baksmali-2.1.3.jar -a 23 -c ./system/framework/arm/boot.oat -d ./system/framework/ -x SystemUI.odex
-a 表示API版本是23,也就是Android 6.0 -c就是bootclasspath(在Android中你可以通过adb shell printenv查看该变量,boot.oat文件就是这些文件Android5.0后编译成二进制文件后的),可能会出现如下错
出现这个错误
解决这个错的方法是
把boot.oat和boot.art文件拷贝到framework目录下
然后在重新执行:
然后就会生成out目录
4、把out目录打包成dex文件
生成下面的文件
5、把classes.dex拷贝到dex2jar-2.0,用dex2jar-2.0吧dex文件转成jar文件
6、打开classes-dex2jar.jar文件,推荐用JAD打开,JAD打开比用jd-gui打开更好,因为用jd-gui打开反编译的东西不全,参考:http://www.blogjava.net/landon/archive/2010/07/16/326294.html,这篇文章来使用jad
Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的。不过因为是控制台运行,所以用起来不太方便。不过幸好有一个eclipse的插件JadClipse,二者结合可以方便的在eclipse中查看class文件的源代码。下面介绍一下配置:
A.下载JadClipse,http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download,注意选择与eclipse版本一致的版本,我用的是Eclipse3.4,所以选择下载版本net.sf.jadclipse_3.3.0.jar
B.下载Jad,http://www.varaneckas.com/jad,下载相应版本
C.将下载下来的Jadclipse,如net.sf.jadclipse_3.3.0.jar拷贝到Eclipse下的plugins目录即可。当然也可以用links安装,不过比较麻烦。
D.将Jad.exe拷贝到JDK安装目录下的bin文件下(方便,与java,javac等常用命令放在一起,可以直接在控制台使用jad命令),我的机器上的目录是D:\Program Files\Java\jdk1.6.0_02\bin\jad.exe
F.然后,重新启动Eclipse,找到Eclipse->Window->Preferences->Java,此时你会发现会比原来多了一个JadClipse的选项