3步搞定APK解包与重打包:Apktool实战
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
你有没有过这种时候:想看看某个 App 的界面文案到底写的是什么、它申请了哪些权限、某个按钮背后的逻辑怎么实现的,结果打开 APK 只看到一堆二进制和一个混淆过的 classes.dex?Apktool 做的就是 APK 解包与逆向工程,它把应用拆成"可读、可改、可重新打包"的形态,让你改完资源或 smali 代码后,再打包回一个新的 APK。
前提只有一条:只在自有应用或已获授权的场景下使用。
安装与环境配置
预编译包在 Java 8+ 上即可运行;如果你要从源码构建,则要求 JDK 17 及以上。按你的系统挑一条最快的路:
- Homebrew(macOS):走包管理器直接装好,省去手动配置
brew install apktool - 官网预编译包:从官方发布页下载最新的
apktool_*.jar,免编译直接跑java -jar apktool_3.1.0.jar - 源码编译:想尝鲜或魔改时,克隆仓库用 Gradle 打出可执行 fat jar
git clone https://gitcode.com/GitHub_Trending/ap/Apktool ./Apktool/gradlew -p Apktool shadowJar proguard
编译产物落在 apktool-cli 模块的 build/libs 目录下,java -jar起来即可用。
从解包到重打包的完整工作流
解包就像把 APK 这个黑盒拆开,看看里面的零件长什么样——Apktool 会把二进制资源解码成接近原始形态,把 dex 反编译成一行行可读的 smali。
1. 解包:把 APK 拆成资源与 smali 都可编辑的项目目录。
apktool d app.apk -o app_decoded结束后你会得到一个app_decoded目录,里面是解码后的资源与 smali 代码。
2. 查看目录结构:先认清里面有什么,再决定改哪个文件。
ls app_decoded能看到AndroidManifest.xml、res/、smali_*/(多 dex 时)以及assets/。
3. 修改:改文案、调权限或改 smali 逻辑,直接编辑文本。
vim app_decoded/res/values/strings.xml文本资源改完即生效,保存后这些改动会被下一步重新编码回去。
4. 重打包:把资源和 smali 反向编码回二进制,生成新 APK。
apktool b app_decoded -o app_rebuilt.apk看到Build completed即表示 apk 重打包成功,产物就在-o指定的路径。
5. 签名与对齐:重打包出的 APK 尚未签名,装到设备上前必须完成 apktool 签名对齐这一步。
zipalign -p 4 app_rebuilt.apk app_aligned.apk apksigner sign --ks debug.keystore app_aligned.apk先用 zipalign 对齐文件偏移,再用 apksigner 就地签名,之后才能正常安装。
高频实战场景与踩坑指南
最常见的起步场景是 🌏多语言本地化:给一个原生没带某语言的 App 补上翻译,只需解包后找到res/values/strings.xml,复制到values-<lang>/下逐条翻译,再重打包。操作要点:只改文本内容、别动name属性,否则资源引用会断。
顺手的第二件事是 🔍安全漏洞审计:解包后重点翻smali*/与AndroidManifest.xml,看有没有硬编码的敏感数据、导出的组件是否暴露过度、申请了哪些权限。操作要点:用检索工具 grep 密钥、token 之类的字符串,别靠肉眼一行行刷 smali。
第三类是权限调整:想给某个 App 减负或做隐私向改动,就在AndroidManifest.xml里删掉多余的<uses-permission>再重打包。操作要点:有些权限是 App 的硬依赖,删了可能直接闪退,务必上真机验证。
几条避坑提醒,等你真用到时不慌:
- 改前先备份:保留原始 APK,改坏了就重新解包,别在唯一副本上硬改。
- 加密或加固的 APK 可能解包失败:遇到壳或强加密,Apktool 会报错或解不出资源,别在这上面死磕。
- 用独立工作目录:解包目录、重打包产物、keystore 都放进专门文件夹,避免和原文件混在一起。
搭配工具与深入资源
- dex2jar:把 dex 转成可读的 class 文件,和 Apktool 的 smali 互补,想在"Java 源码视角"下看 App 时它最顺手。
- ProGuard:Apktool 负责把应用拆开看,ProGuard 负责发布前混淆加固,一个拆、一个装,刚好配成一对。
- apksigner:就是工作流里负责签名的那一步,处理 v2/v3 签名方案,给重打包后的 APK 一个能过系统校验的身份。
想再往下挖时,直接看仓库根目录的README.md与构建脚本,重点跟 apktool-cli 入口模块读d和b两个子命令的实现,比任何二手资料都直接。
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考