准备工作
工具
一般情况下你需要以下三个
apktool、dex2jar、jd-gui
如果你需要反编译odex文件,那么你还需要
oat2dexes
下载
一、apktool : http://ibotpeaches.github.io/Apktool/install/
- 点击1中 wrapper script ,将浏览器中代码复制到你的文本编辑器中,保存名为 apktool ,且没有后缀名的文件
- 点击2中 find newest here ,下载 apktool_x.x.x.jar ,选择一个你喜欢的版本
- 将2中下载的文件重命名为 apktool.jar
- 将通过1、2、3三步得到的文件拷贝到 /usr/local/bin 文件夹下
确保文件是可执行的,即需要通过 chmod +x 修改文件的权限为可执行文件
5.1 打开终端,进入到目录 /usr/local/bin
5.2 分别输入下面两个命令,并执行chmod a+x apktool.jar chmod a+x apktool
尝试通过终端运行apktool命令,如果安装成功你会看到下图所示
二、dex2jar : https://github.com/pxb1988/dex2jar
点击链接,跳转到github相应项目中,找到如下图所示位置
点击任意一个 Downloads 下载你喜欢的版本即可
三、jd-gui : http://jd.benow.ca
点击链接,跳转到Java Decompiler官网,找到如下图所示位置
下载你喜欢的版本即可
完成上面的操作你就拥有了反编译的apk的能力
反编译一个apk
一、使用apktool,得到资源文件
- 创建一个文件夹,将你要反编译的apk拷贝到文件夹内
终端定位到你创建的文件夹内,执行以下命令
apktool d xxx.apk
- 命令正常执行之后,你会发现在当前目录会生成一个与apk同名的文件夹,其中就包含了你所需要的apk的资源文件
二、使用dex2jar,得到代码
- 将你要反编译的apk后缀改名为 .zip
- 解压该zip包,你会得到一个 classes.dex 文件
将 classes.dex 拷贝到你的 dex2jar 文件夹下,并将终端定位到该文件夹,执行下面的命令
./d2j-dex2jar.sh classes.dex
执行完命令后,会有4.1或4.2两种情况:
4.1 当前目录会生成一个 classes-dex2jar.jar 文件,你要的代码就在里面
4.2 提示无权限,此时你需要给 d2j-dex2jar.sh 添加执行权限,在终端执行下面命令chmod a+x d2j-dex2jar.sh
4.3 然后再执行上面 3 的操作,即可得到4.1中提到的 classes-dex2jar.jar 文件了
三、使用jd-gui,查看代码
上面步骤(二)最后得到的 classes-dex2jar.jar 文件,用下载的 jd-gui-osx-x.x.x 中的 JD-GUI 打开即可查看代码了
反编译odex文件
如果你想反编译的apk是一个系统apk时,你解压 xxx.zip 后是得不到classes.dex文件的,但是你可以找到一个与apk同名的 xxx.odex 文件
或者你不知道从哪里捞到一个.odex文件想看看它究竟是啥
如果你有一个叫做 oat2dexes 的可执行文件的话,那你这么做即可
1.1 首先将终端定位到xxx.odex同级目录
1.2 执行下面命令./oat2dexes xxx.odex
1.3 执行完上面命令,你会得到一个 dex01.dex 文件, .dex 你应该知道怎么做吧
如果你没有 oat2dexes 文件,或者你的 oat2dexes 文件并不能用,那是因为它可能是其它系统编译出来的,因此mac上不能执行,那么你需要在mac编译一个 oat2dexes 文件
2.1 首先你需要一个 oat2dexes.c 文件 点击下载
2.2 得到文件后,将终端定位到 oat2dexes.c 同级目录,执行下面命令gcc oat2dexes.c -o oat2dexes_mac
2.3 执行完上面命令,你就会得到 oat2dexes_mac ,它就是就是可将 .odex 转换为 .dex 的文件,当然你可以起任何名字