ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Apktool 入门指南:反编译安卓 APK、修改资源并重新打包

Apktool 入门指南:反编译安卓 APK、修改资源并重新打包 Apktool 入门指南反编译安卓 APK、修改资源并重新打包【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/ApktoolApktool 是一个用于逆向工程闭源 Android 应用的命令行工具它能把 apk 里的二进制资源还原成接近原始形态的可编辑 XML把 dex 字节码还原成 smali 汇编让你在改完后再重新构建出一个新的 apk。整个解包 → 修改 → 回包的循环在一个项目目录里就能完成不需要先拿到应用的源码工程。把 apktool 装到你的机器上Apktool 是一个 Java 程序安装本质上就是有一个 jar 包 一个能跑它的 JDK。最省事的方式是直接用预编译版本macOS 上brew install apktool一行搞定其他系统可以从源码构建或从发行说明里找到对应平台的 jar 包。从源码构建只需要 JDK 17 以上git clone https://gitcode.com/GitHub_Trending/ap/Apktool cd Apktool ./gradlew build shadowJar构建完成后会得到一个 fat jar脚本约定命名为apktool_x.x.x.jar。仓库里 scripts/linux/apktool 这类包装脚本做的事就是帮你执行java -jar apktool.jar你把它和 jar 放一起之后就能像系统命令一样直接敲apktool。装好后用apktool v看版本、apktool help看全部命令确认工具链就绪。apktool 解包一个安卓应用解包用ddecode子命令apktool d -o my_app_src my_app.apk它会做四件事把classes.dex系列反汇编成smali/目录下的 smali 文件把res/和resources.arsc解码成可读的 XML 和资源文件把二进制的AndroidManifest.xml转成文本 XML 放在根目录把assets/、lib/等原样拷出来同时把META-INF存进original/、无法识别的文件存进unknown/。最后生成的apktool.yml记录了解包元信息回包时靠它还原原始配置。这几个步骤在 ApkDecoder.java 里是按源码 → 资源 → 清单 → 原始文件的顺序串起来的。几个常用的参数可以按需加-f在输出目录已存在时强制清空重建-s跳过 smali 只解资源只想看清单和资源时很快-r反过来不解资源-j 4开 4 个线程并行处理大 apk只关心清单时可以加--only-manifest。把修改后的项目重新打包成 apk改完文件后bbuild子命令负责回包apktool b my_app_src -o rebuilt.apk它的内部流程是先用 smali 把smali/重新汇编回 dex再调用 aapt2 把解码出来的 XML 和资源重新编译成resources.arsc和二进制清单最后把所有内容按apktool.yml记录的压缩策略哪些文件不能压缩装回 zip。注意 3.x 版本只支持 aapt2旧的 legacy aapt 会被直接拒绝仓库还专门从 AOSP 编译了一个放宽了校验规则的定制版 aapt2 随发行包分发构建细节见 INTERNAL.md。常用参数-f跳过变更检测、强制重建所有文件大改动时更稳--debuggable会在构建时把AndroidManifest.xml里的android:debuggable直接置为 true方便调试版安装--no-crunch关闭资源 crunching构建更快但产物更大。另外要心里有数b命令只负责打包产出的 apk 是没有签名的安装前还需要走一遍签名和 zipalign 对齐的流程apksigner 工具即可这一步 apktool 本身不代劳。解包失败时安装 framework 依赖有些应用常见于银行、安全类 App引用了私有共享库或自定义 framework apk直接apktool d会报 framework 缺失。这时先把那个 framework apk 安装进本地库apktool if vendor_framework.apk apktool d -p ./framework my_app.apkifinstall-framework把 framework 解码后存到~/.local/share/apktool/framework可用-p指定其他位置之后解包时带上-p指向该目录资源里的引用就能正确解析。配套还有lflist-frameworks列出已安装的 framework、cfclean-frameworks清理它们以及-l 包名:文件参数用于把某个 shared library 挂进解析上下文。如果某些资源解码时报错被丢弃、但你仍然想要它们可以加--keep-broken-res硬解代价是回包前得手工修复。常见玩法改文案、调清单、读 smali给应用做本地化是最高频的用途解包后直接编辑res/values-zh-rTW/strings.xml把文案换成繁体中文缺文件就从values/复制一份加限定词目录然后apktool b回包改动只涉及资源、不碰代码风险很低。安全审计或学原理时打开smali/逐层看字节码即可定位逻辑想进一步转成 jar 或 Java 伪代码再配合 dex2jar、JADX 这类工具做二次阅读。调整权限、改package名、去掉某个 Activity 导出声明则是在根目录的AndroidManifest.xml上直接动手——因为清单已被解码成文本改起来和改普通 XML 没区别。⚠️ 动手前备份原始 apk遇到做了壳或资源加密的应用时解包大概率失败这不是 apktool 的 bug它的定位是保持与原始结构尽量一致而不是修复任意损坏的包。源码结构与周边生态想看实现的话代码组织得很清晰模块划分见 settings.gradle.kts核心逻辑在 brut.apktool/apktool-lib/ApkDecoder/ApkBuilder/资源表解析器都在brut/androlib/下brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java 只是命令行入口brut.j.util、brut.j.dir、brut.j.xml、brut.j.yaml是它自建的目录、XML、YAML 小库。字节码能力全部来自 gradle/libs.versions.toml 里声明的 smali/baksmali 依赖测试套件BuildAndDecodeApkTest等位于 apktool-lib/src/test/覆盖了多 dex、压缩策略、清单变更等边界情况是理解各子命令行为的最好教材。周边的自然搭配用 ProGuard 产物配合 dex2jar/JD-GUI 做代码层分析用 apksigner 处理签名用 jadx 当图形版只读 apktool。未来方向资源 ID 自动重映射、split apk 支持等记录在 ROADMAP.md 里。更多参数细节以apktool help输出和仓库 README.md 指向的官方文档为准动手改包之前先备份原文件基本就不会翻车。【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表