Agent Skills
返回列表
💻

Flutter APK 安全审查

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/flutter-apk-security-1fif 这个 Flutter APK 安全审查技能。

技能介绍

要解决的具体问题

当 Flutter 应用发布为 Android APK/AAB 后,安全审查常面临几个痛点:难以确认产物是否真正来自 Flutter 项目;手动检查 AndroidManifest.xml 容易遗漏权限声明;libapp.so 中的原生字符串和密钥难以追溯;签名配置错误可能导致发布风险。这些散落在构建产物中的信息需要系统性收集,而非零散脚本扫描。

技能如何工作

这个技能是一套只读审查工作流,而非独立扫描器。它首先通过 assets/flutter_assets/ 或 lib/*/libapp.so 等强信号确认产物是否来自 Flutter 项目。若检测到 Flutter 特征,则按以下步骤收集证据:

  1. 元数据检查:通过 aapt2 dump badging 获取包名、版本号、SDK 版本等基础信息
  2. 清单解码:优先用 JADX 反编译 AndroidManifest.xml,补充 aapt2 dump xmltree 获取权限、组件、Intent 过滤器等细节
  3. 资源与资产扫描:检查 res/xml/network_security_config.xml、assets/ 目录、flutter_assets/ 中的配置文件,寻找 URL、密钥、测试端点
  4. 原生字符串提取:定位 lib/*/libapp.so,用 strings 提取 URL、密钥、令牌、环境标识
  5. 反编译代码检查:检查 MainActivity、插件、MethodChannel 等原生桥接代码
  6. 签名验证:通过 apksigner 或 keytool 验证证书、签名方案
  7. 第三方服务识别:识别 Firebase、Google Maps、AWS 等 SDK 的标记

所有操作在临时目录进行,不修改原产物。报告只展示证据路径和风险,不输出完整密钥。

适用边界与注意点

该技能遵循严格的只读原则,不会自动修改应用的权限、签名、依赖、认证逻辑或生产环境配置。它不会从 AndroidManifest.xml 推断签名配置,而是依赖证书工具获取真实签名证据。对于 libapp.so 中的字符串,只报告可观察到的风险,不会声称恢复完整 Dart 源码。

若用户未提供 APK/AAB,但提供了已发布的包名,可通过 apkeep 下载(需用户授权),但不会存储 Google 账号凭证,需用户自行提供必要的邮箱和 AAS token。所有操作记录在临时目录,确保原产物不被修改。

使用场景

  • 收到 Flutter APK 后需要确认 release 是否开启调试、证书与签名方案是否正确
  • 审查 Android 清单中的权限、导出组件和 deep link 是否存在高风险暴露
  • 扫描 assets 与 libapp.so 字符串找出硬编码密钥、测试端点或第三方服务标识
  • 评估发布产物是否为 Flutter 构建并汇总大小、ABI 与原生库等证据

适合人员

  • 负责发布前安全检查的移动安全工程师,需要基于清单、证书和原生字符串输出证据
  • 维护 Flutter Android 应用的开发者,想确认权限、deep link 与签名配置是否符合发布要求
  • 处理外部送检 APK 的合规审计人员,需要只读审查并生成可追溯的风险报告
  • 管理多个 Flutter 项目的移动端负责人,希望在发布前统一核对关键安全信号