APK Decompiler
Android APK 逆向工程工具集,支持完整的反编译、修改和重新打包流程。
快速开始
1. 设置工具
首次使用需要下载必要工具:
CODEBLOCK0
这会下载:
- - baksmali/smali - DEX ↔ Smali 转换
- apktool - 资源解码/打包
- dex2jar - DEX → JAR 转换
- uber-apk-signer - APK 签名
2. 反编译 APK
CODEBLOCK1
输出目录结构:
CODEBLOCK2
3. 修改代码/资源
编辑相关文件:
- -
smali-out/ - 修改 Smali 代码 - INLINECODE1 - 修改配置
- INLINECODE2 - 修改文本
4. 重新打包
CODEBLOCK3
输出:app-rebuilt.apk(已签名)
脚本说明
| 脚本 | 功能 |
|---|
| INLINECODE4 | 下载并设置反编译工具 |
| INLINECODE5 |
反编译 APK |
|
rebuild.py | 重新打包并签名 |
|
analyze.py | 分析 APK 结构 |
常用命令
反编译选项
CODEBLOCK4
分析选项
CODEBLOCK5
重新打包选项
CODEBLOCK6
修改示例
修改字符串
- 1. 找到字符串定义:
CODEBLOCK7
- 2. 编辑
strings.xml:
CODEBLOCK8
修改逻辑(Smali)
- 1. 找到目标类:
CODEBLOCK9
- 2. 编辑 Smali 代码:
CODEBLOCK10
- 3. 参考 references/smali-syntax.md 了解 Smali 语法
修改 AndroidManifest
编辑 apktool-out/AndroidManifest.xml:
- - 添加/移除权限
- 修改应用名称
- 添加 Activity
- 启用调试模式
参考 references/android-manifest.md
工具目录
设置完成后,工具存储在 ~/.apk-tools/:
CODEBLOCK11
可设置环境变量:
CODEBLOCK12
工作流程
CODEBLOCK13
注意事项
- 1. 签名限制:重新打包后使用调试密钥签名,与原应用签名不同
- 无法覆盖安装原应用
- 需要先卸载原应用
- 2. 完整性校验:某些应用会校验签名或文件完整性
- 需要额外处理绕过校验
- 3. 混淆代码:ProGuard/R8 混淆后的代码:
- 类名/方法名会被重命名
- 需要手动分析理解逻辑
- 4. 法律风险:仅供学习研究,请勿用于非法用途
环境要求
- - Java 运行时 (JRE 8+)
- Python 3.6+
- unzip (通常已预装)
APK Decompiler
Android APK 逆向工程工具集,支持完整的反编译、修改和重新打包流程。
快速开始
1. 设置工具
首次使用需要下载必要工具:
bash
cd /path/to/apk-decompiler/scripts
chmod +x setup_tools.sh
./setup_tools.sh
这会下载:
- - baksmali/smali - DEX ↔ Smali 转换
- apktool - 资源解码/打包
- dex2jar - DEX → JAR 转换
- uber-apk-signer - APK 签名
2. 反编译 APK
bash
python3 scripts/decompile.py app.apk
输出目录结构:
app-decompiled/
├── smali-out/ # Smali 源码(可编辑)
├── apktool-out/ # 解码的资源文件
│ ├── AndroidManifest.xml
│ ├── res/
│ └── assets/
└── extracted/ # 原始 APK 内容
3. 修改代码/资源
编辑相关文件:
- - smali-out/ - 修改 Smali 代码
- apktool-out/AndroidManifest.xml - 修改配置
- apktool-out/res/values/strings.xml - 修改文本
4. 重新打包
bash
python3 scripts/rebuild.py ./app-decompiled
输出:app-rebuilt.apk(已签名)
脚本说明
| 脚本 | 功能 |
|---|
| setup_tools.sh | 下载并设置反编译工具 |
| decompile.py |
反编译 APK |
| rebuild.py | 重新打包并签名 |
| analyze.py | 分析 APK 结构 |
常用命令
反编译选项
bash
基本反编译
python3 decompile.py app.apk
同时生成 JAR(可用 jadx 查看 Java 源码)
python3 decompile.py app.apk --java
只解码资源
python3 decompile.py app.apk --resources-only
只反编译 Smali
python3 decompile.py app.apk --smali-only
分析选项
bash
完整分析
python3 analyze.py app.apk
只看权限
python3 analyze.py app.apk --permissions
查看 Activities
python3 analyze.py app.apk --activities
查看应用类(需要先反编译)
python3 analyze.py app.apk --smali ./smali-out --classes
重新打包选项
bash
打包并签名
python3 rebuild.py ./project-dir
只签名 APK
python3 rebuild.py ./project-dir --sign-only app.apk
跳过签名
python3 rebuild.py ./project-dir --no-sign
修改示例
修改字符串
- 1. 找到字符串定义:
bash
grep -r 原始文本 ./apktool-out/res/values/
- 2. 编辑 strings.xml:
xml
新名称
修改逻辑(Smali)
- 1. 找到目标类:
bash
find ./smali-out -name MainActivity.smali
- 2. 编辑 Smali 代码:
smali
修改返回值
.method public isEnabled()Z
const/4 v0, 0x1
return v0
.end method
- 3. 参考 references/smali-syntax.md 了解 Smali 语法
修改 AndroidManifest
编辑 apktool-out/AndroidManifest.xml:
- - 添加/移除权限
- 修改应用名称
- 添加 Activity
- 启用调试模式
参考 references/android-manifest.md
工具目录
设置完成后,工具存储在 ~/.apk-tools/:
~/.apk-tools/
├── baksmali.jar # DEX → Smali
├── smali.jar # Smali → DEX
├── apktool.jar # 资源解码/打包
├── dex2jar/ # DEX → JAR
└── uber-apk-signer.jar # APK 签名
可设置环境变量:
bash
export TOOLS_DIR=/custom/path
工作流程
┌─────────────┐
│ app.apk │
└──────┬──────┘
│ decompile.py
▼
┌─────────────────────────┐
│ app-decompiled/ │
│ ├── smali-out/ │ ← 编辑 Smali 代码
│ └── apktool-out/ │ ← 编辑资源/Manifest
└──────┬──────────────────┘
│ rebuild.py
▼
┌─────────────────────┐
│ app-rebuilt.apk │
│ (已签名,可安装) │
└─────────────────────┘
注意事项
- 1. 签名限制:重新打包后使用调试密钥签名,与原应用签名不同
- 无法覆盖安装原应用
- 需要先卸载原应用
- 2. 完整性校验:某些应用会校验签名或文件完整性
- 需要额外处理绕过校验
- 3. 混淆代码:ProGuard/R8 混淆后的代码:
- 类名/方法名会被重命名
- 需要手动分析理解逻辑
- 4. 法律风险:仅供学习研究,请勿用于非法用途
环境要求
- - Java 运行时 (JRE 8+)
- Python 3.6+
- unzip (通常已预装)