一、主流开源免费 APK 加固工具(按推荐度排序)
1. dpt-shell(DEX 抽取壳,最推荐)
- 项目地址:github.com/luoyesiqiu/…
- 核心能力:DEX 方法代码抽取、内存动态回填、防静态反编译
- 支持:Android 5.0+(API 21+)、多 dex
- 协议:MIT(完全免费商用)
2. Jiagu(轻量加壳,无需登录)
- 项目地址:github.com/Frezrik/Jia…
- 核心能力:不落地加载 DEX、基础加壳、防二次打包
- 支持:Android 5.0+
- 协议:开源免费
3. Obfuscapk(APK 级混淆,补充加固)
- 项目地址:github.com/ClaudiuGeor…
- 核心能力:类名 / 方法名 / 字符串混淆、指令替换、防静态分析
- 支持:全 Android 版本
- 协议:GPLv3
4. AndResGuard(资源混淆,微信开源)
- 项目地址:github.com/shwenzhang/…
- 核心能力:资源路径 / 文件名混淆、压缩、签名一体化
- 定位:资源保护,非代码加壳
- 协议:Apache 2.0
二、工具安装与使用教程(按工具)
🔧 工具 1:dpt-shell(DEX 抽取壳)
1. 安装(2 种方式)
方式 A:下载预编译包(推荐)
- 前往 Releases:github.com/luoyesiqiu/…
- 下载最新版
executable.zip - 解压到任意目录(如
D:\tools\dpt-shell)
方式 B:手动编译(需 JDK+Gradle)
bash
运行
# 克隆(含子模块)
git clone --recursive https://github.com/luoyesiqiu/dpt-shell.git
cd dpt-shell
# 编译
./gradlew assemble
# 进入输出目录
cd executable
2. 使用(命令行)
bash
运行
# 基础加固(自动签名)
java -jar dpt.jar -f 你的APK路径/app.apk
# 输出加固后APK:app_protected.apk(同目录)
#(仅加固,不签名)
java -jar dpt.jar -f app-release.apk -o 输出路径 -x
# 若加固后 APP 打不开,添加`--disable-acf`参数重试
java -jar dpt.jar -f 原始APK路径 -o 输出目录 -x --disable-acf
3. 验证
- 安装
app_protected.apk,功能正常即成功 - 用 Apktool 反编译,DEX 中方法体为空,说明加固生效
🔧 工具 2:Jiagu(轻量加壳)
1. 安装
bash
运行
# 克隆
git clone https://github.com/Frezrik/Jiagu.git
cd Jiagu
# Windows:编译生成工具
Jiagu_build.bat
# Linux/Mac:编译生成工具
chmod +x Jiagu_build.sh
./Jiagu_build.sh
编译后生成 JiaguTool 目录(含加固工具)
2. 使用
- 将待加固 APK 放入
input文件夹 - 执行加固脚本:
bash
运行
# Windows
Jiagu_input.bat
# Linux/Mac
chmod +x Jiagu_input.sh
./Jiagu_input.sh
- 加固后 APK 在
output目录
🔧 工具 3:Obfuscapk(APK 混淆)
1. 安装(需 Python 3.7+)
bash
运行
# 安装依赖
pip install obfuscapk
# 或从源码安装
git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
cd Obfuscapk
pip install .
2. 使用
bash
运行
# 基础混淆(自动签名)
obfuscapk -o 混淆后.apk -d 原始.apk
# 常用混淆策略
obfuscapk -o secure.apk -d app.apk --obfuscation-strings --obfuscation-classes --obfuscation-methods
🔧 工具 4:AndResGuard(资源混淆)
1. 安装(Android Studio 集成)
在 app/build.gradle 添加:
gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.21'
}
}
apply plugin: 'AndResGuard'
andResGuard {
use7zip = true
useSign = true
keepRoot = false
fixedResName = "arg"
mergeDuplicatedRes = true
whiteList = [
"R.drawable.icon",
"R.string.app_name"
]
}
2. 使用
bash
运行
# 执行资源混淆
./gradlew resguardRelease
输出:app/build/outputs/apk/release/app-release_aligned_signed.apk
三、加固完整流程(通用)
- 原始 APK → 编译生成(已签名)
- 加固 → 用 dpt-shell/Jiagu/Obfuscapk 处理
- 二次签名 → 加固后必须重新签名(V1+V2)
- 测试 → 安装运行,功能正常 + 反编译难度提升
四、常见问题
-
加固后安装失败
- 必须重新签名(V2 签名)
- 检查 APK 路径无中文 / 空格
-
加固后闪退
- 部分 SDK / 反射代码不兼容,需加白名单
- 降低加固强度(如 dpt-shell 关闭部分抽取)
-
反编译仍可见代码
- 开源工具仅防基础逆向,需配合 ProGuard/R8 混淆
- 核心逻辑建议用 JNI/NDK 实现
五、工具对比(快速选择)
表格
| 工具 | 类型 | 难度 | 适合场景 |
|---|---|---|---|
| dpt-shell | DEX 抽取壳 | 中 | 防静态反编译、核心代码保护 |
| Jiagu | 轻量加壳 | 低 | 快速基础加固、个人项目 |
| Obfuscapk | APK 混淆 | 中 | 补充混淆、增加逆向成本 |
| AndResGuard | 资源混淆 | 低 | 资源保护、减小体积 |