Flutter APK 安全审查
将以下提示词粘贴到你的 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 特征,则按以下步骤收集证据:
- 元数据检查:通过
aapt2 dump badging获取包名、版本号、SDK 版本等基础信息 - 清单解码:优先用 JADX 反编译
AndroidManifest.xml,补充aapt2 dump xmltree获取权限、组件、Intent 过滤器等细节 - 资源与资产扫描:检查
res/xml/network_security_config.xml、assets/目录、flutter_assets/中的配置文件,寻找 URL、密钥、测试端点 - 原生字符串提取:定位
lib/*/libapp.so,用strings提取 URL、密钥、令牌、环境标识 - 反编译代码检查:检查
MainActivity、插件、MethodChannel等原生桥接代码 - 签名验证:通过
apksigner或keytool验证证书、签名方案 - 第三方服务识别:识别 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 项目的移动端负责人,希望在发布前统一核对关键安全信号