我可以不吃啊 发表于 2024-12-27 15:38:41

Apktool:Android APK 逆向与重编译利器 Apktool详细教程 Kali linux&Termu

https://i-blog.csdnimg.cn/direct/26f2e1bef8eb4424a6ea6166b1ae699c.png

简介

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 https://i-blog.csdnimg.cn/direct/695ae1ac31d54f6c8632a29d018ada44.png
使用

输入以下命令查看apktool资助信息,如果出现下面的页面,就说明安装成功了。
apktool -h https://i-blog.csdnimg.cn/direct/2bf8011c1420488ea2b11774c523cfa2.png
显示高级使用信息

此命令列出 Apktool 的高级使用选项和详细说明。
apktool --advanced https://i-blog.csdnimg.cn/direct/a13da2e538de4e978527cc5c35a2bde5.png
显示 APKTool 版本

可以看到我当前的版本是2.5.0
apktool --version https://i-blog.csdnimg.cn/direct/ad074b94299349ed85d05fa9f585d0b1.png
介绍

起首让我们学习一下 apk 文件。 Apks 只不过是一个包罗资源和汇编的 java 代码的 zip 文件。 如果你只是像这样解压一个 apk,你会留下诸如以下的文件: classes.dex 和 resources.arsc。 
unzip base.apk https://i-blog.csdnimg.cn/direct/a98134860faa45d4aaca6ba13a613c4c.png
通过ls命令可以看到我们解压apk出来这么多的文件。
https://i-blog.csdnimg.cn/direct/55c99dca653d43c2956ca3f25bcd5d1e.png
如果您尝试查看 AndroidManifest.xml。你会看到这个。 一大堆的乱码。
cat AndroidManifest.xml https://i-blog.csdnimg.cn/direct/b052e059efc54fe4b639c5fa92bb4aa2.png

显然,编辑或查看已编译的文件几乎是不可能的。这就是 Apktool 发挥作用的地方。
apktool d payload.apk https://i-blog.csdnimg.cn/direct/3a053fbcf242451ca80ef12eda0e0ea0.png

通过命令输出。进入payload文件夹,在这里可以看到AndroidManifest.xml文件。查看 AndroidManifest.xml ,会发现产生更具可读性的效果。
cat AndroidManifest.xml https://i-blog.csdnimg.cn/direct/203bf53034824cd490f1e5859e709e1e.png

全局参数

apktool d -q base.apk 参数说明:
-q 或 --quiet:以安静模式运行,不输出日记或提示信息。
https://i-blog.csdnimg.cn/direct/9ff010b5a06f4367a0d352cca3db448e.png
apktool b -v base 参数说明:
-v 或 --verbose:启用详细日记输出。
https://i-blog.csdnimg.cn/direct/bb6847b2b39045918ac93f4db82bae94.png
解码

使用调试模式(d) 解码给定的 apk 文件
apktool d base.apk https://i-blog.csdnimg.cn/direct/12640243f6194fda8043925f9e74f216.png
1.将 APK 文件解码为可编辑的资源和代码

此命令将 base.apk 解码为文件夹 MyAppFolder,其中包罗资源文件和 Smali 代码。
apktool d -f -o MyAppFolder base.apk 参数说明:
d 或 decode:解码 APK 文件。
-f 或 --force:如果目标目录已经存在,则强制覆盖。
-o 或 --output:指定输出文件夹名称(默以为 apk.out)。
https://i-blog.csdnimg.cn/direct/2c81c9b749a345e78e50c14c4593816e.png
2. 仅解码资源(不解码源代码)

此命令将 base.apk 的资源文件解码到 ResourcesOnlyFolder,而不生成源代码。
apktool d -r -o ResourcesOnlyFolder base.apk 作用:只解码资源文件(如图片、XML 等),不解码 Java 源代码。
参数说明:
-r 或 --no-res:不解码资源文件。
https://i-blog.csdnimg.cn/direct/4907f0c64af34adcb4ceb1f62ab59ed6.png
3. 仅解码代码(不解码资源文件)

此命令将 base.apk 的代码部分解码到 CodeOnlyFolder,而不生成资源文件。
apktool d -s -o CodeOnlyFolder base.apk 作用:只解码 Java 源代码,不解码资源文件。
参数说明:
-s 或 --no-src:不解码源代码。
https://i-blog.csdnimg.cn/direct/38952767660e41c9b48c14638979221d.png
4. 使用特定的框架解码

此命令将使用 custom_framework 文件夹中的框架文件解码 base.apk。
apktool d -p custom_framework base.apk 作用:使用指定框架文件来解码 APK。
参数说明:
-p 或 --frame-path:指定框架文件路径。
https://i-blog.csdnimg.cn/direct/9629388e39aa47a4a404be6c5793212d.png
5.不解码 APK 的资产文件

apktool d --no-assets base.apk 参数说明:
--no-assets:不解码资产。
https://i-blog.csdnimg.cn/direct/eb22e3318d97411aa7504f717f2a59fd.png
6.使用标记为 custom_tag 的框架文件解码 APK

apktool d -t custom_tag base.apk 参数说明:
-t 或 --frame-tag: 使用由 <tag> 标记的框架文件。
https://i-blog.csdnimg.cn/direct/339d0e2cb5d84505b3fa4c294b130d93.png
7.在解码资源文件时,保留有问题或损坏的资源文件

apktool d -k base.apk 参数说明:
--keep-broken-res:如果出现错误而且某些资源被丢弃,比方“检测到无效的设置标记。丢弃资源”,但您仍然想解码它们,纵然出现错误,则使用。您必须在构建之前手动修复它们。
https://i-blog.csdnimg.cn/direct/8cb7f65cbd264c67b0c1e4d6be5fdced.png
8.不输出调试信息(如 .line 和 .param)

apktool d -b base.apk 参数说明:
-b 或 --no-debug-info:不写出调试信息(.local、.param、.line 等)
https://i-blog.csdnimg.cn/direct/63fb28f1fcfd43779f720cdeaecdf549.png
9.强制解码已编译的 AndroidManifest.xml 文件

apktool d --force-manifest base.apk 参数说明:
--force-manifest:解码 APK 的编译清单,纵然资源解码设置为“false”。
https://i-blog.csdnimg.cn/direct/dd350f6891f444529417eb8aa69ded41.png
构建

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:指定存储框架文件的目录。
https://i-blog.csdnimg.cn/direct/bc7d885544d24c299e792c150cc00ee1.png
2.为安装的框架文件添加标签(如 custom_tag)

apktool if -t custom_tag base.apk 参数说明:
-t 或 --tag:使用 <tag> 标记框架。
https://i-blog.csdnimg.cn/direct/3cab00f47d0b4d6e97fe2ec7a944bd92.png
3.列出存储在 frameworks 文件夹中的所有框架文件

apktool list-frameworks -p frameworks 参数说明:-p,--frame-path <dir> 将框架文件存储到 <dir>。
https://i-blog.csdnimg.cn/direct/ded1d12823804f19aaf43146aad88289.png
4.清空框架文件存储目录

apktool empty-framework-dir -p frameworks 参数说明:
-f,--force 强制删除目标目录。
-p,--frame-path <dir> 将框架文件存储到 <dir>。
公共资源管理

apktool publicize-resources base.apk 作用:使 APK 的资源 ID 公开(公共化)。
https://i-blog.csdnimg.cn/direct/0ba5d1b25849443f8b50431532e29ca3.png
总结

Apktool 是一款不可或缺的 APK 分析与操作工具,实用于 Android 开发、逆向工程以及安全研究的各个领域。它功能全面,机动易用,为开发者和研究职员提供了深入操作 APK 的本领。用于对第三方、封闭式、二进制 Android 应用程序进行逆向工程的工具。它可以 将资源解码为靠近原始的情势,并在制作一些内容后重建它们 修改;它使得逐步调试 smali 代码成为可能。另有它 由于类似项目标文件布局,使得使用应用程序变得更容易 一些重复性任务的自动化,比方构建 apk。 
在此特殊夸大,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵占他人隐私,触犯相关法律,任何因此引发的法律或长处纠纷与本人无关。
欢迎各位大佬,小白来找我交流。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Apktool:Android APK 逆向与重编译利器 Apktool详细教程 Kali linux&Termu