针对 Android 上 Flutter APK 的离线安全审计。检查权限、SDK、端点和潜在密钥。无需 root、账号、广告或分析。
面向 Flutter 应用的设备端安全审计——无需 root、无需 PC、无需网络。
检查已安装的 Flutter 应用或选择一个 APK 文件。获取产物清单、 清单风险、内嵌端点、潜在密钥,以及有证据支撑的 A–F 评级报告。 静态发现是待调查的线索,而非漏洞的证明。
下载 APK · Google Play(上线后) · 隐私政策
Flutter 应用把逻辑藏在 libapp.so 中,在调试构建中附带 100 MB 的 Dart 内核,并将 API 密钥
埋藏在资源文件、resources.arsc 和原生桥接库中。常见的建议——
“用这套工具链在桌面端反编译”——速度慢,在混淆的 AOT
快照上会失败,而且需要匹配的 Dart SDK。
FlutterGuard 完成的是能在手机上生效的部分:它读取操作系统已经暴露的 APK,
解析关键格式(二进制 XML、resources.arsc、DEX 字符串、libapp.so 字符串
池、kernel_blob.bin、NOTICES.Z、env 文件、X.509 数据块),并生成带有
证据的报告——全程离线,无需 root,无需拦截。
它被设计为可反复运行:每次扫描都会打上时间戳并保留,因此第二次扫描会告诉你 同一应用两个版本之间发生了什么变化。真正的发现就在这份差异之中。
| 应用清单 | 报告评级 | 发现项 |
|---|---|---|
![]() | ![]() | ![]() |
| 服务与 SDK | 设置 | 隐私 |
|---|---|---|
![]() | ![]() | ![]() |
选择图片可查看全尺寸商店预览。
产物 — 包名、版本、SDK 范围、ABI、大小、拆分数量、基础 APK 哈希、每个原生 库及其大小和 SHA-256 前缀、安装来源、签名方案(v1/v2/v3/v4)、签名者 DN 和 证书指纹、调试证书检测。
Flutter 特性 — 是否真的是 Flutter、AOT 还是调试(JIT 内核)、kernel_blob.bin 大小、
JIT 快照是否存在、Dart 引擎版本、混淆状态、从
NOTICES.Z 和 package: URI 恢复的 Dart 包清单,以及一个可交给桌面端后续分析
的指纹(Blutter/reFlutter 需要确切的引擎构建版本)。
清单风险 — 权限、导出的 activity/service/receiver/provider、可调试、 备份、明文策略、网络安全配置(base-config 与 domain-config、仅回环 明文、用户 CA 信任、pin 集合、debug-overrides)、按 scheme 聚合的深度链接。
密钥与端点 — API 密钥(Google、AWS、Stripe、Supabase、Sentry、Firebase、OpenAI、
GitHub、Slack、Sendgrid、Telegram)、OAuth 客户端 ID、类 JWT 数据块、带内联
凭据的数据库/消息代理 URI、含真实主体的私钥块、内嵌 X.509 证书(当转储将其拆分时,
从 PEM 主体行组装)、Dart --dart-define 名称,以及带凭据计数的 .env/.env.prod 文件。
端点 — 跨来源的主机,分类为 first-party / staging / internal / saas:X /
ip-literal,来自 YAML/TOML 服务配置的端点列表(uri: btc-electrum.example:50002
风格),来自 Dart 快照的 API 路由,恢复的源路径,WebView 风险标记,
MethodChannel 清单分为 app / plugin / standard。
原生接口面 — flutter_rust_bridge 及其他 FFI 桥接、JNI Java_* 入口点计数。
第三方与 AI 接口面 — SDK 指纹表覆盖约 135 项服务,每项通过
zip 路径、DEX 描述符、pub 包或主机进行匹配:从 Firebase、Play Services、计费、
广告和归因,到认证(Auth0、Clerk、Appwrite、Stytch、WorkOS)、实时通信(Agora、LiveKit、
Stream、Sendbird)、支付(Stripe、RevenueCat、PayPal、Paddle)、后端(PocketBase、Nhost、
Supabase)以及向量存储。大型语言模型提供商被逐一清点 —
OpenAI、Anthropic、Gemini、Groq、Mistral、Cohere、DeepSeek、OpenRouter、Together、Fireworks、
Perplexity、xAI、HuggingFace、Replicate、Bedrock、DashScope、Moonshot、GLM、MiniMax、ElevenLabs、
Stability — 以及由 localhost:11434(Ollama)和 localhost:1234
(LM Studio)及 ComfyUI 的 :8188 所指示的端侧运行时。同一轮扫描还会列出应用所搭载的
广告、分析和崩溃 SDK,这通常是报告中最令人意外的部分。
SDK 标记文件与捆绑配置 — 根级 billing.properties、
play-services-*.properties、transport-*.properties 和 firebase-encoders*.properties 无需解析 DEX
即可指明它们所证明的 SDK;捆绑的 .env/.json/.yaml/.properties/.sqlite 和
密钥材料被列为配置接口面;捆绑的 HTML/JS 页面被报告为 WebView 载荷,
以便通过 JS 桥接渲染的本地页面可见而非仅被暗示。
当 APK 仍保留其 pubspec.yaml 时的精确版本 — 某些发布构建会保留
项目自身的依赖清单,从而得到真实名称和约束,而非恢复的候选。当它缺失时,
则使用来自 NOTICES.Z 和 package: URI 的候选列表。
FlutterGuard-<version>.apk,并在 Android 提示时允许从
浏览器或文件管理器安装。Android 8.0+(API 26)。无需 Play Services。Play 提供的是使用 Google 密钥签名的构建,与 GitHub APK 签名者不同。在两者之间切换需要 卸载现有应用。请先导出您想保留的报告: 卸载会删除 应用的私有报告、历史记录和设置。导出不会恢复应用内历史记录。
FlutterGuard 没有 INTERNET 权限。包可见性支持已安装应用审计;
前台服务权限支持本地扫描,通知显示扫描进度。
没有账户、广告或分析。分享报告或打开外部链接是通过另一个应用
执行的显式操作。
pub.dev 链接的依赖、恢复的路径、通道,以及
具有有界、来源感知预览的 APK artifact 浏览器。Advanced → Scan all Flutter apps 会将每个检测到的 Flutter 应用排队,一次一个,在 说明成本的确认对话框之后。队列屏幕显示确定性进度条、每个应用的实时 阶段和百分比,以及每个应用的完成情况;完成的行会打开该应用的报告,Cancel 在停止运行前要求确认。每个应用超时可防止一个卡住的扫描 阻塞队列。
在使用脚本化入口点之前,打开应用并同意已安装应用扫描。 未经同意,它会拒绝扫描,而不是绕过披露。
adb shell am start -n com.flutterguard.app/.MainActivity -e scan com.example.app
adb logcat -d | grep FG_REPORT
# Reports live in internal storage; pull one from a debug build (release builds are not debuggable).
adb exec-out run-as com.flutterguard.app cat files/reports/com_example_app.json > com_example_app.json
每个报告旁边都会写入一个 <package>.hist 快照;正是它支撑了差异对比功能。
A 表示干净,C 表示构建良好但存在少量加固缺口,F 表示在某个根本性问题上失败
(发布了调试构建、调试证书、处处明文传输,或随包发布了凭据)。这是一个分诊
标签,而非评分——请阅读发现项,而不是只看字母。