Android APK 反编译工具介绍
2019-06-15 本文已影响7人
白夜叉小分队
本篇博客主要针对 MacOs,介绍几种常用的反编译工具。
1. ApkTool
APKTool 是 Google 提供的 APK 编译工具,能够反编译及回编译 apk,我们一般用来反编译资源文件,代码反编译之后都是 smali 文件。需要 java 支持。
功能
- 还原 Apk 中所包含的 resources.arsc、classes.dex、9.png 和 xml 等资源文件
- 对 Apk 进行重新(二次)打包
- 反编译依赖于 Framework 的 apk 文件
- 运行调试 Smali 文件
安装
- 将下载好的 apktool 文件与 apktool.jar 文件准备好
- 将 apktool.jar 与 apktool 移动到 /usr/local/bin 目录下(可以通过在终端中输出命令 open /usr/local/bin 来打开这个目录)
- 为上述两个文件增加可执行权限,即在终端中输入并执行:
1. chmod +x apktool.jar
2. chmod +x apktool
- 在终端输入 apktool 看是否可以运行,如果可以运行,输出结果如下图。(如果不可以,则需要在系统偏好设置中打开安全与隐私中点击仍要运行apktool.jar)
使用
我们可以利用 ApkTool 反编译 apk 获得 AndroidManifest.xml、xml文件和图片资源。
在终端执行以下操作:
1. cd /你存放apk的目录或在下面命令中使用xxx.apk文件的绝对路径
2. apktool d xxx.apk //该命令执行后会在同级目录下生成一个与你编译的apk同名的目录
以某版本的 docs.apk 为例:
解析出来的文件目录结构如下:
APkTool 只能提取资源文件,对于 .dex 类型的文件是无法查看的,这时候需要用到 dex2jar 了。
2. dex2jar
dex2jar 是一个能操作 Android 的 dalvik(.dex) 文件格式和 Java 的 (.class) 的工具集合。
功能
- dex-reader/writer : 用于读写 Dalvik Executable (.dex) 文件格式. 包含一个简单的API (与ASM相似)
- d2j-dex2jar : 执行 .dex 到 .class 的文件格式转换
- smali/baksmali : 与 smali 工具功能一致,但是对中文更友好
安装
直接解压即可。
使用
- 先将 apk 文件进行解压,可使用解压软件,也可将文件后缀改为 .rar 然后再通过终端 unzip xxx.rar 命令行解压。(注意:直接解压 apk 和使用 ApkTool 反编译 apk 都能获得AndroidManifest.xml,但直接解压获得的 AndroidManifest.xml 是乱码的,无法直接查看;同时,直接解压 apk 获得 res 资源文件是不包含 resources.arsc 部分的,而使用 ApkTool 反编译出来的 res 是包含的。)
- 从上图中可以看到,直接解压后有3个 classes.dex 文件(应用了 MultiDex 所致),这就是项目的源码。将这几个 classes.dex 文件拷贝到解压的 dex2jar 目录下,然后执行在终端如下命令进行反编译:
1. cd /你的dex2jar解压目录
2. sh d2j-dex2jar.sh classes.dex
3. sh d2j-dex2jar.sh classes2.dex
4. sh d2j-dex2jar.sh classes3.dex
PS:如果出现 permission denied d2j_invoke.sh 的提示,则需要在终端里执行:
sudo chmod +x d2j_invoke.sh // chmod +x 命令为取消权限
然后再重新执行:
sh d2j-dex2jar.sh classes.dex
- 通过上面的步骤,我们已经将 .dex 转换成 .jar,接下来就可以使用 JD-GUI 或 jadx 来查看反编译后的程序源码了。
3. JD-GUI
一款免费的 Java 反编译工具,使用 C++ 开发
功能
- 该工具可以反编译单个、多个 jar 包
- 拥有独立图形界面,只要把文件拖到软件的那个框框里面,就可以看到源码了
使用
不需要安装,直接双击运行 jd-gui-1.4.0.jar 打开软件,然后将 classes-dex2jar.jar 文件拖拽到 JD-GUI 界面上即可,然后就可以愉快地查看源码了。 还可以将反编译后的文件保存,然后再用 Android Studio 打开。4. jadx
一款跨平台的有 GUI 界面的反编译工具
功能
- 可以直接将 apk 文件进行反编译
- 反编译输出 Java 代码
- 图形化的界面,拖拽式的操作,强大的搜索功能
- 导出 Gradle 工程
安装
方式一:下载并解压后点击 bin 目录下的 jadx-gui 即可打开。
方式二:由于 jadx 本身是 github 上的一个开源项目,所以可以直接 clone 源代码,打开终端执行以下命令,进行编译安装。
1. git clone https://github.com/skylot/jadx.git
2. cd jadx
3. ./gradlew dist
然后将 build/jadx/bin 加入到环境变量即可。
使用
双击 bin 目录下的 jadx-gui 即可打开,使用方式同 JD_GUI 一致,也同样可以通过 File->Save All 来保存反编译后的文件再用 Android Studio 打开。
除此之外,jadx 也支持直接用命令行来反编译文件:
1. jadx -d out classes.dex #直接输出.java文件到out目录
2. #or
3. jadx-gui classes.dex #使用gui打开
另外,可以直接用 jadx-gui 打开apk 文件进行反编译。
总结
- 如果只是想得到 .xml 文件和图片资源等,则直接使用 ApkTool 来反编译 apk 。
- 如果想查看项目源代码,则有以下两种方式:
- 可以先将 apk 直接解压,再利用 dex2jar 将文件由 .dex 转换为 .jar,然后使用 JD-GUI 或 jadx 打开 .jar 文件即可看到源码,可选择保存再用其他 IDE 打开。
- 直接用 jadx 反编译 apk 。