解包 APK
出于研究的目的,我们可能需要反编译 APK 并得到源码。这件事相当简单,因为先行者们已经做好了所有的工作,我们要做的就是下载,使用他们开发出的工具而已。
如果只是需要反编译之后的 JAVA 源码,最简单的方案是这样:
- 安装 JADX ;
- 使用它打开 APK 文件,Done 。
简单吧?就两步而已。
如果想尝试更复杂一点的呢,可以使用下面的方案:
- 安装 dex2jar ;
- 执行
sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
,这会生成apk_to_decompile-dex2jar.jar
; - 安装 JD-GUI ,或者 Luyten;
- 用 JD-GUI 或者 Luyten 打开刚才生成的 jar 文件,Done 。
上面的方法可以得到 JAVA 源码,如果还需要 apk 中的资源文件,或者需要查看 AndroidManifest.xml 的内容,可以使用 Apktool 这个大杀器。
- 安装 Apktool ;
- 执行
apktool d apk_to_decompile.apk
,该命令会将 APK 中的资源和源码反编译,直接输出到当前文件夹下。
注意:
- JADX 已经可以查看资源文件了,所以使用 JADX 并只希望得到资源文件的话,就可以免去了解 Apktool;
- Apktool 会将代码反编译为 smali 文件,smali 是 dalvik 虚拟机的字节码实现,通过学习 smali 语法,可以比较方便的将自己的逻辑注入到原来的代码中,然后重新打包得到新的 APK。smail 也可以转换成 JAVA 源码。
需要注意的是,一些使用加固技术处理过的 apk,是无法通过上面的方法得到 JAVA 源码的。
若要寻找更多的 JAVA 反编译器,可以看看这篇: What is a good Java decompiler and deobfuscator? 。
(全文完)
- 文章ID:2645
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/unpack-apk/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。