跳到正文

Moatgator Shield

在发布之前加固每一次构建。

通过 pull request 添加到构建流水线的代码与字符串混淆、防篡改和完整性检查。

你的源码反编译结果Shield
你的源码, 反编译结果, Shield

让逆向工程变得昂贵。

攻击者从阅读你的应用开始。Shield 重写已编译的应用,使逻辑、接口地址和密钥更难被阅读、修改和重打包,而无需改动你的源码。

  • 代码与字符串混淆
  • 防篡改与完整性检查
  • 保留映射文件,崩溃报告依然可读

Shield 做什么

  • 01

    名称与代码混淆

    重命名类、方法和字段并重构控制流,使反编译结果几乎无法让攻击者了解应用的工作方式。

  • 02

    字符串加密

    在 Android 上,接口地址、密钥等敏感字符串在构建时加密,仅在需要时才解密。

  • 03

    完整性与防篡改

    应用在运行时校验自身代码和签名,并在被修改或重新签名的副本运行时作出反应。

  • 04

    按构建差异化

    防护在每次构建之间都有变化,因此针对某个版本编写的绕过方法无法沿用到下一个版本。

  • 05

    资源与素材保护

    内置的素材和资源受到保护,无法被直接解包并在别处复用。

  • 06

    可读的崩溃报告

    每次构建都会生成映射文件,可配合 Crashlytics、Sentry 和 Play Console 还原堆栈跟踪。

Shield 如何融入你的发布流程

  1. 1

    在你的流水线中保护

    一个 pull request 把 Moatgator 加入你的 Android 或 iOS(测试版) 构建。防护作用于已编译的应用,绝不触碰你的源码。

  2. 2

    签名仍由你完成

    Moatgator 返回未签名的构建产物。你的流水线负责对齐和签名,因此签名密钥和证书始终在你手中。

  3. 3

    清楚成本

    每次构建都会报告对应用体积和启动时间的影响,方便你调整启用的防护项。

moatgator.yml示意示例
shield:  android:    obfuscation: names + control-flow    string_encryption: true    asset_protection: true  integrity: signature + code  diversify_per_build: true  report: [size, startup]   # impact per build

Shield 覆盖范围

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 会在应用运行时检测篡改和插桩。

准备好保护你的应用了吗?

免费开始,或告诉我们你的需求。