您的位置:首页 > 移动开发 > Android开发

Mac操作系统下进行APK反编译的一种常见方法

2016-08-11 10:14 381 查看
在Android开发的过程中,通过反编译apk打包文件查看别人优秀的xml布局或者java源码是一种不错的学习方式。那么在Macbook上如何进行反编译呢?
.apk文件主要是由AndroidManifest.xml清单文件、res目录下的资源文件和src目录下的java代码文件三者打包而成。总体思路分三步走。


1、清单文件和资源文件用apktool反编译。

2、java代码文件在打包成.apk文件前,先要转为classes.dex文件,只要用dex2jar将classes.dex字节码反编译成java源文件classes_dex2jar.jar。

3、最后用JD-GUI打开classes_dex2jar.jar文件,显示java源代码。

具体的操作:

1、下载apktool包括apt、apktool 、apktool.jar共3个文件,

其中的apktool.jar最好从apktool官网下载最新版本,然后重命名去掉版本号即可。官网如图:



旧版本的apktool.jar在反编译比较新的apk文件时容易报错。

下载dex2jar最新版如图:



下载JD-GUI。本文最后会一起附上3个工具的csdn下载地址。

2、apktool工具准备好之后还不能进行反编译,你在终端命令窗口下执行输入apktool 会提示命令不存在,需要配置一下环境变量,怎么配置呢?

直接将从官网下载的apktool.jar和apktool.sh这两个文件拷贝到/usr/local/bin目录下。如下命令:打开命令窗口,cd /usr/local/bin下,可能有的mac电脑不存在bin这个目录,直接在创建一个就好了,命令是:sudo mkdir bin,执行后会让你输入root权限密码,输入完后执行ls命令查看,bin目录就存在了。用cp命令将apktool文件夹下的三个文件aapt、apktool、apktool.jar 复制到/usr/local/bin/目录下。命令:sudo cp Downloads/apktool/aapt Downloads/apktool/apktool Downloads/apktool/apktool.jar /usr/local/bin。

复制多个文件用空格隔开,Downloads/apktool/目录是源目录,存放的是我们要复制的那三个文件,执行命令后,提示输入密码,输完密码后就复制成功了,ls查看一下,这三个文件已经存在了。现在你再输入apktool命令试试。

开始进行反编译了,其实用到的命令也很简单,我们随便拿一个apk来,我们要对demo.apk进行反编译,命令行进入这个目录 cd /Users/你的用户名/Downloads/apktool/,到这个目录后,

执行命令apktool d hjjc.apk。执行成功后,会在当前目录下生成一个hjjc文件夹,点击去就看到相关apk的资源文件了,选中AndroidManifest.xml,打开,就可以看到反编译后的内容了。如图:



反编译后的xml布局文件如图:



反编译java源文件

这就用到dex2jar和jd-gui了,将hjjc.apk重命名改成hjjc.zip,然后利用解压缩软件解压,得到一个hjjc目录,由于之前反编译资源文件时已经生成了一个hjjc目录,解压hjjc.zip的目录hjjc已经存在,所以系统自动在解压后的目录名末尾加杠0区分。我们要拿到里面的classes.dex文件,如图:



将classes.dex文件复制到dex2jar目录下,如图:



在命令里进入 dex2jar目录,

然后执行命令(分两种情况):

dex2jar-0.0.9.15版:执行sh dex2jar.sh classes.dex命令。如图:



dex2jar-2.0版本:

先执行sudo chmod +x d2j_invoke.sh命令,

再执行sh dex2jar.sh classes.dex命令。



执行成功后会在dex2jar目录生成一个classes_dex2jar.jar文件。如图:



最后,用jd-gui工具打开这个jar包就可以看到java源代码了。





上图这张情况是没有经过代码混淆的样子。如果经过代码混淆经过正式签名的apk反编译出来的一般都是a、b、c、d等单个字母作为类名、变量名、方法名,给阅读和理解造成了困难。有少部分源代码会出现内部错误,除了显示为红字,没有任何内容。注意:如果是测试签名的apk即使配置了混淆也不起作用的。

最后把工具上传到csdn,点击下载地址传送门 ,送大家去下载吧!

(各工具的版本:apktool-2.2.0.jar、dex2jar-2.0、dex2jar-0.0.9.15、JD-GUI 0.3.5)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 反编译