简介
Apktool 是一款用于对第三方、封闭式、二进制 Android 应用程序进行逆向工程的工具。它可以将资源解码为接近原始的形式,并在进行一些修改后重建它们;它使得逐步调试 smali 代码成为可能。由于类似项目的文件结构和一些重复任务(例如构建 apk 等)的自动化,它还使应用程序的使用变得更加容易。
Apktool 不适 用于盗版和其他非合法用途。它可用于本地化和添加功能、添加对自定义平台的支持以及其他良好目的。只要尝试公平地对待您使用并可能喜欢的应用程序的作者即可。
安装
至少需要Java 8,才能运行 Apktool
Windows
由于 Windows 不区分大小写,请调整区分大小写 以确保正确操作。
- 下载 Windows bat脚本 。 (右键单击,将链接另存为 apktool.bat)https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat
- 下载 最新版本 的 Apktool。iBotPeaches / Apktool / Downloads — Bitbucket
- 将下载的 jar 重命名为 apktool.jar。
- 移动 apktool.jar 和 apktool.bat 到您的 Windows 目录。 (通常 C://Windows)
- 如果您无权访问 C://Windows,您可以将这两个文件放置在任何位置并将该目录添加到环境变量系统 PATH 变量中。
- 尝试通过命令提示符运行 apktool。
苹果
- 下载 Mac 包装脚本 。 (右键单击,将链接另存为 apktool)https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool
- 下载 最新版本 的 Apktool。iBotPeaches / Apktool / Downloads — Bitbucket
- 将下载的jar重命名为 apktool.jar。
- 移动 apktool.jar 和 apktool 到 /usr/local/bin。 (需要root)
- 确保这两个文件都是可执行的。 ( chmod +x)
- 尝试通过 CLI运行 apktool。
Brew
- 安装 Homebrew。Homebrew — The Missing Package Manager for macOS (or Linux)
- 在终端中执行命令 brew install apktool 。
- 通过 CLI尝试运行 apktool 。
Kali Linux
kali linux 已经默认安装好apktool工具了。如果没有安装的话,直接输入以下命令就可以安装apktool
sudo apt install apktool
使用
输入以下命令查看apktool帮助信息,如果出现下面的页面,就说明安装成功了。
apktool -h
显示高级使用信息
此命令列出 Apktool 的高级使用选项和详细说明。
apktool --advanced
显示 APKTool 版本
可以看到我当前的版本是2.5.0
apktool --version
介绍
首先让我们学习一下 apk 文件。 Apks 只不过是一个包含资源和汇编的 java 代码的 zip 文件。 如果你只是像这样解压一个 apk,你会留下诸如以下的文件: classes.dex 和 resources.arsc。
unzip base.apk
通过ls命令可以看到我们解压apk出来这么多的文件。
如果您尝试查看 AndroidManifest.xml。你会看到这个。 一大堆的乱码。
cat AndroidManifest.xml
显然,编辑或查看已编译的文件几乎是不可能的。这就是 Apktool 发挥作用的地方。
apktool d payload.apk
通过命令输出。进入payload文件夹,在这里可以看到AndroidManifest.xml文件。查看 AndroidManifest.xml ,会发现产生更具可读性的结果。
cat AndroidManifest.xml
全局参数
apktool d -q base.apk
参数说明:
-q 或 --quiet:以安静模式运行,不输出日志或提示信息。
apktool b -v base
参数说明:
-v 或 --verbose:启用详细日志输出。
解码
使用调试模式(d) 解码给定的 apk 文件
apktool d base.apk
1.将 APK 文件解码为可编辑的资源和代码
此命令将 base.apk 解码为文件夹 MyAppFolder,其中包含资源文件和 Smali 代码。
apktool d -f -o MyAppFolder base.apk
参数说明:
d 或 decode:解码 APK 文件。
-f 或 --force:如果目标目录已经存在,则强制覆盖。
-o 或 --output:指定输出文件夹名称(默认为 apk.out)。
2. 仅解码资源(不解码源代码)
此命令将 base.apk 的资源文件解码到 ResourcesOnlyFolder,而不生成源代码。
apktool d -r -o ResourcesOnlyFolder base.apk
作用:只解码资源文件(如图片、XML 等),不解码 Java 源代码。
参数说明:
-r 或 --no-res:不解码资源文件。
3. 仅解码代码(不解码资源文件)
此命令将 base.apk 的代码部分解码到 CodeOnlyFolder,而不生成资源文件。
apktool d -s -o CodeOnlyFolder base.apk
作用:只解码 Java 源代码,不解码资源文件。
参数说明:
-s 或 --no-src:不解码源代码。
4. 使用特定的框架解码
此命令将使用 custom_framework 文件夹中的框架文件解码 base.apk。
apktool d -p custom_framework base.apk
作用:使用指定框架文件来解码 APK。
参数说明:
-p 或 --frame-path:指定框架文件路径。
5.不解码 APK 的资产文件
apktool d --no-assets base.apk
参数说明:
--no-assets:不解码资产。
6.使用标记为 custom_tag 的框架文件解码 APK
apktool d -t custom_tag base.apk
参数说明:
-t 或 --frame-tag: 使用由 <tag> 标记的框架文件。
7.在解码资源文件时,保留有问题或损坏的资源文件
apktool d -k base.apk
参数说明:
--keep-broken-res:如果出现错误并且某些资源被丢弃,例如“检测到无效的配置标志。丢弃资源”,但您仍然想解码它们,即使出现错误,则使用。您必须在构建之前手动修复它们。
8.不输出调试信息(如 .line 和 .param)
apktool d -b base.apk
参数说明:
-b 或 --no-debug-info:不写出调试信息(.local、.param、.line 等)
9.强制解码已编译的 AndroidManifest.xml 文件
apktool d --force-manifest base.apk
参数说明:
--force-manifest:解码 APK 的编译清单,即使资源解码设置为“false”。
构建
1. 构建 APK 文件
此命令将文件夹 base 打包为 rebuilt_app.apk。
apktool b -o rebuilt_app.apk base
作用:将解码后的文件夹重新打包为 APK 文件。
参数说明:
b 或 build:构建 APK。
-o 或 --output:指定输出 APK 文件名。
2. 强制重新构建 APK 文件
此命令将文件夹 MyAppFolder 强制重新打包为 rebuilt_app_force.apk,即使某些文件未发生更改。
apktool b -f -o rebuilt_app_force.apk MyAppFolder
作用:跳过变更检测,强制重新构建所有文件。
参数说明:
-f 或 --force-all:强制重建所有文件。
3.指定 AAPT 工具路径用于构建 APK
apktool b -a /path/to/aapt DecodedFolder
参数说明:
-a 或 --aapt:从指定位置加载 aapt。
4.在编译的 APK 中设置 android:debuggable=true,便于调试
apktool b -d DecodedFolder
参数说明:
-d 或 --debug:在 APK 的编译清单中将 android:debuggable 设置为“true”
5.禁用资源文件压缩
apktool b -nc DecodedFolder
参数说明:
-nc 或 --no-crunch:在构建步骤中禁用资源文件的压缩。
6.使用实验性的 aapt2 构建工具
apktool b --use-aapt2 DecodedFolder
参数说明:
--use-aapt2:升级 apktool 以使用实验性的 aapt2 二进制文件。
框架
1. 安装自定义框架
此命令将 framework-res.apk 安装到 custom_framework 文件夹中,供后续解码时使用。
apktool if -p custom_framework base.apk
作用:将自定义的框架文件安装到指定目录,以便解码依赖该框架的 APK。
参数说明:
if 或 install-framework:安装框架。
-p 或 --frame-path:指定存储框架文件的目录。
2.为安装的框架文件添加标签(如 custom_tag)
apktool if -t custom_tag base.apk
参数说明:
-t 或 --tag:使用 <tag> 标记框架。
3.列出存储在 frameworks 文件夹中的所有框架文件
apktool list-frameworks -p frameworks
参数说明:-p,--frame-path <dir> 将框架文件存储到 <dir>。
4.清空框架文件存储目录
apktool empty-framework-dir -p frameworks
参数说明:
-f,--force 强制删除目标目录。
-p,--frame-path <dir> 将框架文件存储到 <dir>。
公共资源管理
apktool publicize-resources base.apk
作用:使 APK 的资源 ID 公开(公共化)。
总结
Apktool 是一款不可或缺的 APK 分析与操作工具,适用于 Android 开发、逆向工程以及安全研究的各个领域。它功能全面,灵活易用,为开发者和研究人员提供了深入操作 APK 的能力。用于对第三方、封闭式、二进制 Android 应用程序进行逆向工程的工具。它可以 将资源解码为接近原始的形式,并在制作一些内容后重建它们 修改;它使得逐步调试 smali 代码成为可能。还有它 由于类似项目的文件结构,使得使用应用程序变得更容易 一些重复性任务的自动化,例如构建 apk。
在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。
欢迎各位大佬,小白来找我交流。