MacOS 下反编译 APK

2,059 阅读1分钟

相关工具准备

  1. apktool:用来反编译 apk 得到 classes.dex、资源、布局等文件;
  2. dex2jar:用来将 classes.dex 文件转成 .jar 文件;
  3. jd-gui:用来预览 jar 文件包含的 java 文件代码;

具体操作步骤

反编译 APK

  1. 到 apktool 官网(ibotpeaches.github.io/Apktool/ins…

    apktool 官方文档截图如下:

    apktool-official.png

    Mac 端配置 apktool 有两种方式,即 homebrew 和 手动安装。此处以手动安装为例,详情如下:

    1. 浏览器中,鼠标右键单击 "wrapper script" 选择保存链接到本地 apktool 文件内(注意:apktool 为无后缀类型文件);
    2. 下载 apktool.jar 文件:
    	 apktool.jar 官方下载地址:"https://bitbucket.org/iBotPeaches/apktool/downloads/"
    	 当前下载的是最新版:apktool_2.6.0.jar
    3. 将下载好的 apktool_2.6.0.jar,重命名为 apktool.jar
    4. 将 apktool 和 apktool.jar 两个文件放到 "/usr/local/bin" 目录下;
    5. 使用命令 "chmod +x" 分别对 apktool 和 apktool.jar 文件进行提权, 即授予可执行权限。具体命令如下:
    	 $ cd /usr/local/bin
    	 $ chmod +x apktool
    	 $ chmod +x apktool.jar
    6. 终端中输入 "apktool" 显示相关命令帮助信息,则表示安装成功;
    

    遇到的问题:

    输入 apktool 命令提示 "zsh: operation not permitted", 即不被允许的操作 !!!
    [解决办法]
    1. "chmod 777 apktool" 命令提高权限;
    2. 给终端加权限:系统偏好设置 -> 安全性与隐私 -> 隐私 -> 完全磁盘访问权限 -> 授权给 Terminal 终端;
    3. 如果 1 和 2 操作后还不行,可再通过 "xattr" 命令设置 apktool 系统安全管控的豁免权;
    	$ xattr -d com.apple.quarantine apktool
    
  2. apktool 命令反编译 apk 并提取 classes.dex 文件;

    # 加上 -s 表示禁止将 dex 文件解码成 smali 文件;
    $ apktool d -s xxx.apk
    

dex2jar

使用 dex2jar 工具把 classes.dex 文件转化成 .jar 文件.

  1. 下载 dex2jar (github.com/pxb1988/dex…) 工具包并解压到本地;

    当前使用的最新版本是:dex-tools-2.1
    
  2. 通过 dex2jar 工具命令将 classes.dex 文件转换成 jar 文件;

    # classes.dex 文件转换成 jar 文件
    $ cd dex-tools-2.1
    $ sh d2j-dex2jar.sh classes.dex
    # 默认会生成 classes-dex2jar.jar 文件
    

    遇到的问题

    # 使用 dex2jar 工具命令如遇到 * Permission denied 即权限被拒,只需要通过如下命令将 * 文件提权即可;
    sudo chmod +x xxx.sh
    

JD-GUI 查看 jar 代码

  1. 下载并安装 JD-GUI 软件工具 (下载地址:java-decompiler.github.io/);

  2. 打开 JD-GUI 软件,将需要查看的 jar 文件拖进去即可查看;

    遇到的问题:本地配置了 java 环境,打开 JD-GUI 时提示需要 java1.8+ !!!

    解决办法:
    1. 到 universalJavaApplicationStub github 仓库 (https://github.com/tofi86/universalJavaApplicationStub) 
    	 下载源码文件压缩包 (Source_code.zip),得到 universalJavaApplicationStub-3.2.0.zip;
    	 解压 zip 得到 "universalJavaApplicationStub-3.2.0/src/universalJavaApplicationStub"
    2. 将 universalJavaApplicationStub 文件命名为 universalJavaApplicationStub.sh
    3. 用新下载的 universalJavaApplicationStub.sh 文件替换 JD-GUI.app/Contents/MacOS/universalJavaApplicationStub.sh 文件;
    4. 重新打开 JD-GUI;