DexGuard — 由Guardsquare提供的Android应用反逆向工程解决方案。该工具在构建阶段执行DEX字节码的混淆、加密和主动监控。根据Guardsquare(2025年)的数据,该产品被超过10,000个商业项目使用,包括银行和支付系统。DexGuard扩展了ProGuard的功能,在不修改应用源代码的情况下增加了反编译和运行时攻击保护。
要点
DexGuard是一个用于Android应用混淆和保护的商业工具,由创建ProGuard的同一团队(Eric Lafortune)开发。该产品于2012年推出,作为标准ProGuard混淆不足的项目的扩展。DexGuard在后编译阶段工作,在打包到APK之前将DEX字节码转换为受保护的形式。
DexGuard的架构基于多层保护模型。第一层是使用重载诱导(overload induction)对类、方法和字段名称进行混淆。第二层是字符串常量的加密,并通过存根方法在运行时加载。第三层是通过校验签名校验和进行APK完整性控制。根据Guardsquare(2025年)的技术报告,这些层次的组合应用将应用的分析时间从几分钟增加到数周。
DexGuard支持所有类型的Android项目:应用程序、库、SDK和Unity游戏项目。该工具通过com.guardsquare.dexguard插件集成到标准的Gradle流水线中,配置后无需手动干预。
DexGuard与开源替代品的主要区别在于主动的运行时保护。该工具不仅混淆代码,还添加了一个在应用程序运行期间执行检查的代理。这可以检测到诸如Frida注入、Xposed或通过JDWP调试等攻击,并做出响应:紧急终止、生成虚假数据或服务器通知。
DexGuard的混淆过程由连续的字节码转换阶段组成,每个阶段针对特定的攻击向量。
标准混淆器将名称替换为单字符a、b、c。DexGuard使用重载诱导 — 为具有不同签名的不同方法分配相同的短名称。反编译器无法解决重载问题,从而生成错误的代码。根据Guardsquare的测试,名称重载使反编译错误数量增加78%。
字符串字面量、URL、API密钥和令牌在构建阶段使用AES-256算法加密。在运行时,存根方法在使用前解密字符串,然后清除内存区域。这可以防止在DEX文件中静态查看字符串。没有加密的示例:攻击者运行strings dexguard.apk并看到所有API端点以明文形式显示。
DexGuard为每个DEX文件计算SHA-256哈希值,并将该值存储在本机层。应用程序启动时,代理将当前哈希值与参考值进行比较。如果存在差异(APK被修改),应用程序将终止。可选地,可以检查资源和清单的完整性。
// build.gradle(应用级)
buildscript {
repositories {
maven { url "https://guard repositories.com/dexguard" }
}
dependencies {
classpath "com.guardsquare:dexguard-gradle-plugin:9.1.05"
}
}
apply plugin: "com.guardsquare.dexguard"
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
dexguard {
config "dexguard-project.txt"
}
}
}
}
这两种工具由同一家公司开发,但针对不同的场景。ProGuard是一个开源优化器和最小混淆器,默认包含在Android SDK中。DexGuard是一个商业产品,添加了免费版本中不可用的保护层。
| 特性 | ProGuard | DexGuard |
|---|---|---|
| 许可 | 开源(GPL) | 商业 |
| 名称混淆 | 简单替换 | 重载诱导 |
| 字符串加密 | 无 | AES-256 |
| RASP保护 | 无 | 有 |
| Frida检测 | 无 | 有 |
| 调试保护 | 无 | 有 |
| 完整性控制 | 无 | SHA-256哈希 |
| Unity支持 | 无 | 有 |
工具之间的选择取决于受保护信息的类别。对于普通的移动应用程序,ProGuard已经足够。对于银行、支付和医疗应用程序,代码泄露会带来财务或监管风险,DexGuard是推荐的解决方案。根据OWASP Mobile Top 10(2024),处理机密数据的应用程序中缺乏混淆被视为关键风险。
DexGuard的集成始于在根build.gradle中连接Guardsquare仓库。9.x版本的插件兼容AGP 7.4–8.5和Gradle 7.6–8.7。保护配置在单独的dexguard-project.txt文件中定义,其中启用特定的技术。
// 根build.gradle
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — 最小配置
# 字符串加密
@stringEncryption
# 带名称重载的混淆
@overloadInduction
# APK完整性控制
@integrityCheck
# 防调试和模拟器保护
@antiDebug
@antiEmulator
@stringEncryption和@overloadInduction指令是保护商业代码的关键。当所有注解激活时,构建时间增加30–60秒,考虑到保护水平这是合理的。配置存储在VCS中,仅应用于发布构建。
为通过反射使用的类设置例外非常重要。DexGuard和ProGuard一样,不会自动分析反射。在dexguard-project.txt中,需要为通过Class.forName或@JavascriptInterface加载的库类添加-keep规则。
// dexguard-project.txt — keep规则
# 保留Gson模型类
-keep class com.example.model.** { *; }
# 保留WebView接口
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# 排除Firebase崩溃报告
-keep class com.google.firebase.** { *; }
DexGuard包含超过20种保护技术,分为静态保护(在构建阶段)和动态保护(在运行时)。具体技术的选择取决于应用程序的威胁模型。
资源加密 — 图像、资源和配置文件在首次访问时加密和解密。控制流混淆(control flow obfuscation)插入死代码并更改指令顺序,使字节码对jadx等反编译器不可读。常量隐藏(constant hiding)将数字字面量替换为在运行时计算的算术表达式。
Runtime Application Self-Protection — 应用程序内部的代理,监控运行时环境的行为。DexGuard RASP检测:通过/proc/self/maps的Frida连接、Xposed Framework的存在、在调试器下运行(JDWP)、Android模拟器(QEMU)。检测到威胁时,策略被触发 — 崩溃或生成错误数据。根据OWASP Mobile Security(2025年)的研究,RASP保护阻止了94%的典型自动化攻击。
DexGuard在关键代码段添加随机延迟,增加动态分析时的遍历时间。参数以毫秒为单位设置,并在每次构建时随机化。这使模糊测试工具和自动扫描器的使用更加困难。
将DexGuard引入现有项目时,需要考虑与库和流行SDK的向后兼容性。由于反射调用,某些库与极端混淆不兼容。
DexGuard在正确的keep规则下与Firebase Crashlytics、Google Analytics、Google Play Services、Retrofit、OkHttp、Glide和Gson兼容。使用注解和代码生成的库(Dagger、Hilt、Room、DataBinding)需要显式保留生成的类。Guardsquare团队为流行SDK发布官方配置示例。
最低要求:Android Gradle Plugin 7.4、Gradle 7.6、JDK 11。DexGuard 9.1支持targetSdk 34和compileSdk 34。对于Java 17和AGP 8.2+,需要DexGuard 9.2或更高版本。该工具与完全优化模式下的R8不兼容 — 使用DexGuard时,R8会自动禁用。
配置DexGuard后,需要对所有受反射和动态类加载影响的路径进行回归测试。建议在发布前在启用保护的情况下运行UI自动化测试。Guardsquare提供DexGuard Tracer工具,该工具在运行时记录ClassNotFoundException错误而不会使应用程序崩溃,从而简化keep规则的调试。
常见问题
ProGuard是一个免费的混淆器,具有简单的名称替换和字节码优化。DexGuard增加了AES-256字符串加密、名称重载诱导、运行时RASP代理、APK完整性控制以及Frida、Xposed、模拟器和调试器检测。ProGuard对于普通应用程序足够,DexGuard适用于银行和企业应用程序。
DexGuard在商业许可证下分发,按年付费。费用取决于项目数量和订阅类型。截至2025年,单个项目的基本许可证起价为每年5,000美元。对于初创公司,可提供高达40%折扣的合作计划。
可以,DexGuard与Kotlin和Jetpack Compose完全兼容,包括协程和Compose编译器。需要为Kotlin编译器生成的类添加额外的keep规则。Guardsquare建议使用官方文档中的kotlin-project.txt配置模板。
字符串加密和RASP代理的添加会使APK增加5–15%,具体取决于受保护代码的数量。名称混淆和控制流混淆不会增加大小 — 它们替换现有名称。平均而言,具有完整DexGuard保护的APK比原始大小大8–12%。
可以,保护配置仅应用于发布构建类型。对于调试构建,DexGuard会自动禁用加密和RASP检查。开发人员可以通过gradle.properties中的guard.force.enable=true参数强制在调试模式下启用DexGuard,以测试受保护的构建。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。