相关工具准备
- apktool:用来反编译 apk 得到 classes.dex、资源、布局等文件;
- dex2jar:用来将 classes.dex 文件转成 .jar 文件;
- jd-gui:用来预览 jar 文件包含的 java 文件代码;
具体操作步骤
反编译 APK
-
到 apktool 官网(ibotpeaches.github.io/Apktool/ins…
apktool 官方文档截图如下:
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 -
apktool 命令反编译 apk 并提取 classes.dex 文件;
# 加上 -s 表示禁止将 dex 文件解码成 smali 文件; $ apktool d -s xxx.apk
dex2jar
使用 dex2jar 工具把 classes.dex 文件转化成 .jar 文件.
-
下载 dex2jar (github.com/pxb1988/dex…) 工具包并解压到本地;
当前使用的最新版本是:dex-tools-2.1 -
通过 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 代码
-
下载并安装 JD-GUI 软件工具 (下载地址:java-decompiler.github.io/);
-
打开 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;