概述
本文主要介绍如何将Android apk反编译成源码,一般有两种方式:
(1)jadx;
(2)dex2jar结合JD-GUI使用;
对比二者,jadx使用起来更方便一点。
一、jadx
jadx(详见github)支持将dex文件或者apk文件反编译成java源码;提供了命令行和图形界面两种使用方式。
1.1 命令行
首先,安装jadx:
>brew install jadx
然后,就可以使用jadx工具了,使用方式如下:
>jadx[-gui] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab)
# 例如:
> jadx -d out classes.dex
1.2 GUI(图形用户界面Graphical User Interface)
jadx提供了图形界面,首先下载jadx(https://github.com/skylot/jadx/releases/download/v1.2.0/jadx-1.2.0.zip )并解压,GUI程序位于/jadx-1.2.0/jadx-gui/build/install/jadx-gui/bin/jadx-gui。
打开JadxGUI后,选择apk后可直接打开,如下图所示:
二、dex2jar & JD-GUI
2.1 解压apk
apk是一种特殊格式的压缩文件,可将apk文件后缀名改为zip后,使用unzip命令行解压:
# -d 表示解压后的文件存储目录
>unzip -d /Users/bc/temp/out /Users/bc/temp/app-debug.zip
解压后,可以看到以dex格式保存的java代码。
2.2 dex2jar
dex2jar可以将dex转换为jar文件(详见github),从github上下载dex2jar命令到本地,使用方式如下:
>/Users/bc/dex2jar-2.0/d2j-dex2jar.sh /Users/bc/temp/out/classes.dex
2.3 JD-GUI
JD-GUI提供了将jar文件反编译为源码的能力,下载后打开JD-GUI,选择jar包后反编译结果如下: