本文介绍 Android 反编译工具,只介绍工具名字及工具简单使用,详细开来再具体讲吧。本文主要包含工具的作用,工作的简单用法,以及反编译的基本步骤。
概述
反编译 Android APK 主要需要依靠如下几个工具:
apktool
:A tool for reverse engineering Android apk files 查看 APK 包中的AndroidManifest.xml
等 XML 资源文件- apk 本质上是一种压缩包,可以通过解压的方式获得资源文件,但是如果直接解压 manifest 和 XML 都是乱码,所以需要 apktool 工具来获得资源文件
dex2jar
:Tools to work with android .dex and java .class files 将 APK 包中的 Dalvik 字节码文件(.dex)转换为 .jar 文件JD-GUI
:Java Decompiler is a tools to decompile and analyze Java 5 “byte code” and the later versions 查看 .jar 文件的 Java 源码- jd-gui 可以用来查看上一步中从 dex 文件得到的 jar
相关项目及工具地址后文贴出。
使用方法
apktool
Apktook 是一个反编译(reverse engineering) 工具,可以用来反编译Android APK。几乎可以将APK中的 resources.arsc
, classes.dex
和 9.png
以及 XMLs 等等源文件反编译得到。
安装需要:
- JRE 1.7 及以上
- 关于 Android SDK, AAPT 以及 smali 的基本知识
地址: https://ibotpeaches.github.io/Apktool/
apktool 安装
各平台的安装指南,如果使用 Linux 可以使用如下简易步骤:
- 右击链接 将 Linux 的脚本保存为
apktool
,并移动到/usr/local/bin/
目录下 - 下载最新版本 apktool.jar (https://bitbucket.org/iBotPeaches/apktool/downloads/)
- 确保 Linux 64 位系统中安装了
ia32-libs
,使用apt search ia32
,然后apt install ia32-libs
安装,可跳过 - 将下载的 apktool-x.x.x.jar 重命名为
apktool.jar
- 将
apktool.jar
和apktool
移动到/usr/local/bin/
目录中,需要 root 权限 - 给予以上两者执行权限
chmod +x /usr/local/bin/apktool
- 在终端执行
apktool
apktool 使用
- 拿到 APK 安装包,比如 xxx.apk
- 在APK同目录下,执行
apktool d xxx.apk
- 目录下会多一个与 APK 同名的文件夹,是解压后的 APK,其中的 XML 资源文件和各种 drawable 图片资源等可以直接看, 不想看 XML 文件的话,可以不用 apktool,直接将 APK 后缀改为 .zip 后解压即可,此时得到的解压目录中的结构和 apktool 解的是一样的,但是 XML 都处在压缩状态不能看。
Apktool 其实还可以用来做另外一件事情,就是汉化,或者将语言包替换之后,重新打包,此时需要使用 apktool b xxx.apk
来重新打包 APK。
dex2jar
dex2jar 能够将 dex 转换为 jar
地址:https://github.com/pxb1988/dex2jar
- 不使用 apktool,直接修改后缀解压 APK,将解压后 APK 中的 .dex 文件复制到 dex2jar 目录下
- 进入该目录执行 ./d2j-dex2jar.sh xxx.dex(注意赋予该 shell 可执行权限 chmod +x d2j-dex2jar.sh)
JD GUI
JD GUI 用来反编译源文件jar包,查看源代码
- dex2jar 目录下会多一个 .jar 文件,用 GUI 工具 JD-GUI 打开看就可以了(当然,混淆过的代码中变量名都是 a, b, c, d)
总结
总的来说 apktool 可以让你轻松的拿到应用的资源文件,包括图片,xml等,而 dex2jar 和 JD GUI 可以反编译源代码,看到一些基础的代码结构。
Update
后来 Google 搞了一个 ClassyShark,看起来不错,不过还没来得及尝试
还有一个 不错的 smali 查看插件看起来也不错,还未尝试
https://github.com/JesusFreke/smali
另外有一个 MAC 专属的一键反编译工具,可以一试:
https://github.com/Jermic/Android-Crack-Tool
又一个查看 dex 到 jar 的反编译工具: