关于 Android Security Analyzer
Android Security Analyzer 是运行于 Cloudflare Workers 的远程 MCP 服务,用于无需构建项目即可对 Android 源码进行静态安全分析。它面向 Android 开发与安全审查,采用基于正则和模式的规则检测并生成结构化报告。
主要功能
- 01分析 Manifest、Gradle、Java/Kotlin 与 XML
- 02扫描密钥、令牌和密码
- 03输出带严重性与建议的发现项
- 04提供安全规则列表与规则说明
- 05无需构建项目或安装 Android SDK
适用场景
- 01在构建前检查 Android 源码配置
- 02排查 WebView、TLS 和存储风险
- 03扫描源码中的凭据与密钥
MCP 相关
该服务通过 Streamable HTTP 提供 MCP 工具,包括项目分析、安全检查列表、发现项说明和健康状态查询。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://android-security-analyzer.ako-labs.workers.dev/mcpclaude mcp add --transport http ako2345-android-security-analyzer https://android-security-analyzer.ako-labs.workers.dev/mcp{"mcpServers":{"ako2345-android-security-analyzer":{"type":"http","url":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}在 Cursor 中打开{"servers":{"ako2345-android-security-analyzer":{"type":"http","url":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"ako2345-android-security-analyzer":{"type":"http","url":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}{"mcpServers":{"ako2345-android-security-analyzer":{"serverUrl":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
4| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| files | array | 是 | 要分析的项目文件数组 |
| options | object | 否 | 分析选项 |
| options.maxFileSizeKb | number | 否 | 要处理的最大文件大小,单位为 KB(默认:512) |
| options.enableSecretScan | boolean | 否 | 启用密钥/凭据扫描(默认:true) |
| options.includeInfoLevel | boolean | 否 | 包含信息级别的发现项(默认:true) |
| projectName | string | 是 | 正在分析的 Android 项目名称 |
详细介绍
Android 安全分析器
用于对 Android 应用源代码进行静态安全分析的 MCP 服务。作为远程 MCP 服务运行在 Cloudflare Workers 上,通过 Streamable HTTP 提供服务。
功能
分析 Android 项目源文件——无需构建项目——并返回结构化安全报告。分析范围包括:
- 清单分析 — 导出的组件、危险权限、明文流量、调试标志、备份设置、SDK 版本
- Gradle/构建配置 — 发布构建配置错误、过时的 SDK、可疑依赖、硬编码密钥
- 源代码(Java/Kotlin) — 不安全的 WebView、SSL/TLS 绕过、弱加密、SQL 注入模式、进程执行、不安全的文件存储、PendingIntent 问题
- XML 配置 — 网络安全配置弱点、范围过宽的文件提供程序路径
- 密钥扫描 — API 密钥、令牌、密码、私钥、云凭据、高熵字符串
所有分析均基于正则表达式/模式,并在 Workers 运行时原生执行,无需外部工具、Java 或 Android SDK。
架构
POST /mcp ──► McpServer (JSON-RPC 2.0) ──► Tool Router
│
┌───────────────────────────────┘
▼
Orchestrator
│
┌─────────┼─────────┬─────────────┬──────────────┐
▼ ▼ ▼ ▼ ▼
Manifest Gradle Source Code XML Config Secret
Analyzer Analyzer Analyzer Analyzer Scanner
│ │ │ │ │
└─────────┴─────────┴─────────────┴──────────────┘
│
▼
Scoring + Deduplication ──► AnalysisReport
关键设计决策:
- 无状态 — 无会话、无 Durable Objects
- 最精简的 MCP JSON-RPC 2.0 实现(无繁重的 SDK 依赖)
- 数据驱动的规则引擎,支持可扩展的规则注册表
- 独立分析器,使用统一的 Finding 类型
- 使用
fast-xml-parser进行轻量级 XML 解析 - 使用
zod验证输入 - 打包体积:gzip 压缩后约 66KB
MCP 工具
| 工具 | 描述 |
|---|---|
analyze_android_project | 对项目文件进行完整的安全分析 |
list_android_security_checks | 列出所有已实现的安全规则 |
explain_finding | 详细说明特定规则 |
health | 服务状态和规则引擎统计信息 |
安装
托管服务(推荐用于 Cline / MCP 客户端): 无需本地安装。服务运行于:
https://android-security-analyzer.ako-labs.workers.dev/mcp
将此 URL 添加到 MCP 客户端配置中(参见下文从 MCP 客户端连接)。
本地开发:
npm install
开发
npm run dev
这会启动本地 Wrangler 开发服务器。MCP 端点位于 http://localhost:8787/mcp。
部署
npm run deploy
部署到 Cloudflare Workers。需要通过 wrangler 进行身份验证(npx wrangler login)。
测试
npm test # Run all tests
npm run test:watch # Watch mode
npm run typecheck # TypeScript type checking
本地 MCP 测试
初始化连接
Unix:
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
Windows(PowerShell):
(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' -UseBasicParsing).Content
列出可用工具
Unix:
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
Windows(PowerShell):响应位于 result.tools 中;若要以 JSON 形式查看列表,请使用原始响应:
(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' -UseBasicParsing).Content
或者通过对象访问:(Invoke-RestMethod ...).result.tools | ConvertTo-Json -Depth 5
检查运行状况
Unix:
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health","arguments":{}}}'
Windows(PowerShell):
(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health","arguments":{}}}' -UseBasicParsing).Content
运行分析(最简示例)
Unix:
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "analyze_android_project",
"arguments": {
"projectName": "TestApp",
"files": [
{
"path": "app/src/main/AndroidManifest.xml",
"content": "<manifest><application android:debuggable=\"true\" android:allowBackup=\"true\"></application></manifest>"
}
]
}
}
}'
Windows(PowerShell):
$body = @{
jsonrpc = "2.0"
id = 4
method = "tools/call"
params = @{
name = "analyze_android_project"
arguments = @{
projectName = "TestApp"
files = @(
@{
path = "app/src/main/AndroidManifest.xml"
content = "<manifest><application android:debuggable=`"true`" android:allowBackup=`"true`"></application></manifest>"
}
)
}
}
} | ConvertTo-Json -Depth 10
(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body $body -UseBasicParsing).Content
从 MCP 客户端连接
将以下内容添加到 MCP 客户端配置中:
{
"mcpServers": {
"android-security-analyzer": {
"url": "http://localhost:8787/mcp"
}
}
}
生产环境(托管服务):
{
"mcpServers": {
"android-security-analyzer": {
"url": "https://android-security-analyzer.ako-labs.workers.dev/mcp"
}
}
}
安全规则
分析器在 5 个类别中实现了 53 条安全规则:
| 类别 | 前缀 | 规则数 | 示例 |
|---|---|---|---|
| 清单 | MAN-* | 17 | debuggable、allowBackup、导出的组件、权限 |
| Gradle | GRD-* | 9 | 发布配置、SDK 版本、依赖、密钥 |
| 源代码 | SRC-* | 17 | WebView、SSL/TLS、加密、注入、文件存储 |
| XML 配置 | XML-* | 4 | 网络安全配置、文件提供程序路径 |
| 密钥 | SEC-* | 7 | API 密钥、令牌、密码、云凭据 |
每条发现均包含:
- 稳定的规则 ID
- 严重性(critical/high/medium/low/info)和置信度(high/medium/low)
- 文件路径和行号(可确定时)
- 证据片段
- CWE 和 OWASP Mobile Top 10 映射
- 可执行的建议
评分
风险分数(0-100)根据发现项的严重程度计算:
- 严重:9 分
- 高:6 分
- 中:3 分
- 低:1 分
- 信息:0 分
原始总分会根据预期最高分 50 分进行归一化。
局限性
- 不能替代 SAST — 基于模式/正则表达式的启发式分析,不进行完整的 AST/数据流分析
- 无需构建 — 分析原始源代码,因此无法看到构建时转换
- 可能出现误报 — 尤其是在密钥扫描和某些代码模式方面
- Workers 限制 — 128MB 内存限制、CPU 时间限制,且无法访问文件系统
- 不分析 APK/AAB — 仅分析源代码
- 不进行过程间分析 — 按文件匹配模式,不跨调用图分析
项目结构
src/
├── index.ts # Worker entry point
├── server/
│ ├── mcp.ts # MCP JSON-RPC 2.0 handler
│ └── tools/ # MCP tool implementations
│ ├── analyzeAndroidProject.ts
│ ├── listAndroidSecurityChecks.ts
│ ├── explainFinding.ts
│ └── health.ts
├── core/
│ ├── types.ts # TypeScript types & Zod schemas
│ ├── scoring.ts # Risk score computation
│ ├── registry.ts # Rule registry
│ └── orchestrator.ts # Analysis orchestrator
├── analyzers/
│ ├── manifestAnalyzer.ts
│ ├── gradleAnalyzer.ts
│ ├── sourceAnalyzer.ts
│ ├── xmlConfigAnalyzer.ts
│ └── secretScanner.ts
├── parsers/
│ ├── xml.ts # XML parser wrapper
│ ├── gradle.ts # Gradle file parser
│ ├── source.ts # Source code pattern matcher
│ └── files.ts # File classifier
├── rules/
│ ├── manifestRules.ts
│ ├── gradleRules.ts
│ ├── sourceRules.ts
│ ├── xmlRules.ts
│ └── secretRules.ts
├── mappings/
│ ├── cwe.ts # CWE descriptions
│ └── owaspMobile.ts # OWASP Mobile Top 10
└── utils/
├── lines.ts # Line number utilities
├── paths.ts # Path classification
└── text.ts # Text utilities
test/
├── fixtures/ # Sample Android project files
├── unit/ # Unit tests per module
└── integration/ # Full analysis integration tests
添加新规则
- 在
src/rules/下的相应文件中定义规则 - 在
src/analyzers/下对应的分析器中添加检测逻辑 - 如有需要,在
src/mappings/cwe.ts中添加 CWE 映射 - 添加一个测试用例
- 规则会通过
src/core/registry.ts自动注册
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。