让逆向工程变得昂贵。
攻击者从阅读你的应用开始。Shield 重写已编译的应用,使逻辑、接口地址和密钥更难被阅读、修改和重打包,而无需改动你的源码。
- 代码与字符串混淆
- 防篡改与完整性检查
- 保留映射文件,崩溃报告依然可读
Shield 做什么
01
名称与代码混淆
重命名类、方法和字段并重构控制流,使反编译结果几乎无法让攻击者了解应用的工作方式。
02
字符串加密
在 Android 上,接口地址、密钥等敏感字符串在构建时加密,仅在需要时才解密。
03
完整性与防篡改
应用在运行时校验自身代码和签名,并在被修改或重新签名的副本运行时作出反应。
04
按构建差异化
防护在每次构建之间都有变化,因此针对某个版本编写的绕过方法无法沿用到下一个版本。
05
资源与素材保护
内置的素材和资源受到保护,无法被直接解包并在别处复用。
06
可读的崩溃报告
每次构建都会生成映射文件,可配合 Crashlytics、Sentry 和 Play Console 还原堆栈跟踪。
Shield 如何融入你的发布流程
- 1
在你的流水线中保护
一个 pull request 把 Moatgator 加入你的 Android 或 iOS(测试版) 构建。防护作用于已编译的应用,绝不触碰你的源码。
- 2
签名仍由你完成
Moatgator 返回未签名的构建产物。你的流水线负责对齐和签名,因此签名密钥和证书始终在你手中。
- 3
清楚成本
每次构建都会报告对应用体积和启动时间的影响,方便你调整启用的防护项。
shield: android: obfuscation: names + control-flow string_encryption: true asset_protection: true integrity: signature + code diversify_per_build: true report: [size, startup] # impact per buildShield 覆盖范围
Android
- 类、方法和字段重命名
- 控制流混淆
- 字符串加密
- 资源与素材保护
- 完整性与签名检查
iOS(测试版)
- 名称、字符串和符号加固
- 在你自己的流水线中重新签名
- 证书和描述文件始终在你手中
框架
- React Native,支持 Hermes bundle 保护
- Expo,通过 EAS Build 自定义函数
- Flutter:运行时检测;Dart 代码沿用 Flutter 自带的混淆
常见问题
Shield 会修改我的源码吗?
不会。它作用于你构建流水线内已编译的应用,并通过一个由你审查的 pull request 提交。
防护会让我的应用变慢或变大吗?
防护会带来一定开销。每次构建都会报告对应用体积和启动时间的影响,让你看清成本并调整启用哪些防护。
你们会保存我的签名密钥吗?
不会。Moatgator 返回未签名的构建产物,由你自己的流水线签名。密钥、证书和 provisioning profile 都留在你手中。
支持 React Native、Expo 和 Flutter 吗?
支持。使用 Hermes 构建的 React Native bundle 受到保护,Expo 通过 EAS Build 自定义函数使用。Flutter 应用通过我们的插件获得运行时检测;Moatgator 不混淆 Dart 代码,请保持开启 Flutter 自带的 --obfuscate 选项。
崩溃报告还能读懂吗?
可以。每次构建都会生成映射文件,可配合 Crashlytics、Sentry 和 Play Console 还原堆栈跟踪。
只靠混淆就够了吗?
不够。混淆提高了分析成本,但无法阻止决心坚定的攻击者。请将 Shield 与 Runtime 搭配使用,Runtime 会在应用运行时检测篡改和插桩。