Android APK 反编译工具介绍

作者: 白夜叉小分队 | 来源:发表于2019-06-15 16:16 被阅读7次

    本篇博客主要针对 MacOs,介绍几种常用的反编译工具。

    1. ApkTool

    APKTool 是 Google 提供的 APK 编译工具,能够反编译及回编译 apk,我们一般用来反编译资源文件,代码反编译之后都是 smali 文件。需要 java 支持。

    功能
    • 还原 Apk 中所包含的 resources.arsc、classes.dex、9.png 和 xml 等资源文件
    • 对 Apk 进行重新(二次)打包
    • 反编译依赖于 Framework 的 apk 文件
    • 运行调试 Smali 文件
    安装
    1. 将下载好的 apktool 文件与 apktool.jar 文件准备好
    2. 将 apktool.jar 与 apktool 移动到 /usr/local/bin 目录下(可以通过在终端中输出命令 open /usr/local/bin 来打开这个目录)
    3. 为上述两个文件增加可执行权限,即在终端中输入并执行:
    1. chmod +x apktool.jar
    2. chmod +x apktool
    
    1. 在终端输入 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 工具功能一致,但是对中文更友好
    安装

    直接解压即可。

    使用
    1. 先将 apk 文件进行解压,可使用解压软件,也可将文件后缀改为 .rar 然后再通过终端 unzip xxx.rar 命令行解压。(注意:直接解压 apk 和使用 ApkTool 反编译 apk 都能获得AndroidManifest.xml,但直接解压获得的 AndroidManifest.xml 是乱码的,无法直接查看;同时,直接解压 apk 获得 res 资源文件是不包含 resources.arsc 部分的,而使用 ApkTool 反编译出来的 res 是包含的。)
    2. 从上图中可以看到,直接解压后有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
    
    1. 通过上面的步骤,我们已经将 .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 。
    • 如果想查看项目源代码,则有以下两种方式:
    1. 可以先将 apk 直接解压,再利用 dex2jar 将文件由 .dex 转换为 .jar,然后使用 JD-GUI 或 jadx 打开 .jar 文件即可看到源码,可选择保存再用其他 IDE 打开。
    2. 直接用 jadx 反编译 apk 。

    相关文章

      网友评论

        本文标题:Android APK 反编译工具介绍

        本文链接:https://www.haomeiwen.com/subject/onpbfctx.html