解包 APK

出于研究的目的,我们可能需要反编译 APK 并得到源码。这件事相当简单,因为先行者们已经做好了所有的工作,我们要做的就是下载,使用他们开发出的工具而已。

如果只是需要反编译之后的 JAVA 源码,最简单的方案是这样:

  1. 安装 JADX
  2. 使用它打开 APK 文件,Done 。

简单吧?就两步而已。

如果想尝试更复杂一点的呢,可以使用下面的方案:

  1. 安装 dex2jar
  2. 执行 sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk ,这会生成 apk_to_decompile-dex2jar.jar
  3. 安装 JD-GUI ,或者 Luyten;
  4. 用 JD-GUI 或者 Luyten 打开刚才生成的 jar 文件,Done 。

上面的方法可以得到 JAVA 源码,如果还需要 apk 中的资源文件,或者需要查看 AndroidManifest.xml 的内容,可以使用 Apktool 这个大杀器。

  1. 安装 Apktool
  2. 执行 apktool d apk_to_decompile.apk ,该命令会将 APK 中的资源和源码反编译,直接输出到当前文件夹下。

注意:

  1. JADX 已经可以查看资源文件了,所以使用 JADX 并只希望得到资源文件的话,就可以免去了解 Apktool;
  2. Apktool 会将代码反编译为 smali 文件,smali 是 dalvik 虚拟机的字节码实现,通过学习 smali 语法,可以比较方便的将自己的逻辑注入到原来的代码中,然后重新打包得到新的 APK。smail 也可以转换成 JAVA 源码。

需要注意的是,一些使用加固技术处理过的 apk,是无法通过上面的方法得到 JAVA 源码的。

若要寻找更多的 JAVA 反编译器,可以看看这篇: What is a good Java decompiler and deobfuscator?

(全文完)