0,工具汇总
我们反编译apk主要使用以下三个工具
- apktool:用于获取资源文件
- dex2jar:获取源文件jar包
- JD-GUI:反编译源文件jar包查看源代码
找这些工具时折腾了我点时间,现在把我找到的最终可用的版本都放百度云了。到下面链接下载:
http://pan.baidu.com/s/1qWDmf2O
1,apktool获取资源文件
apktool其实不止一个文件,其中包含aapt,apktool,apktool.jar三个文件,
最终我们调用的命令行都是apktool的,另外两个文件时其依赖的工具。将这三个文件拷贝到目录/usr/local/bin下,接下来就可以直接用命令行使用了apktool了,你可以这样检测检测效果
接下来就可以开始反编译你的apk获取资源文件了,先使用命令行切换到你的apk的目录下,然后执行命令
apktool d xxxx.apk
最开始执行上面的命令,我遇到如下图的一个问题,网上也有人遇到过
最终发现问题在于,apktool中三个文件的apktool.jar版本太低,最后我下载了最新版替换过来,于是问题迎刃而解,最终运行效果如下
上面命令正常执行之后,你会发现在当前目录会生成一个喝apk同名的文件夹,其中就包含了反编译产生的资源文件。apktool使用到此为止。
2,dex2jar获取源文件jar包
首先将你的apk文件改为zip文件格式,然后解压出来,其中会有一个classes.dex文件,接下来我们就是从这个文件中获取源文件。将classes.dex文件拷贝到你的dex2jar文件夹下,调用d2j-dex2jar.sh进行反编译,你可以能会遇到以下的问题
在mac下遇到这个问题很常见,用下面这个指令可以解决
sudo chmod 777 d2j-jar2dex.sh
d2j-jar2dex.sh可能还依赖于同目录中其他.sh文件,你可能需要为其他.sh文件执行上面的命令(我遇到其中的d2j_ivoke.sh也需要执行以下命令)。
搞定上面的问题之后,就能真正开始反编译获取原文件了,使用以下命令
./d2j-dex2jar.sh classes.dex
如下
执行完命令后,当前目录会生成一个classes-dex2jar.jar文件,该jar包就是最终获得的源文件的jar包,我们就差最后一步,将jar包反编译获取java文件
3,JD-GUI获取java源文件
很容易,你只需要将上一步中生成的classes-dex2jar.jar在JD-GUI中打开即可。一般我们能获取全部资源文件,如图片,布局文件,但是源文件时被混淆过的。
以上!