内容
# mobsf-mcp
<p align="center">
<img src="assets/logo.png" alt="mobsf-mcp" width="400">
</p>
MCP(模型上下文协议)服务器,使AI代理能够执行自主的Android安全分析 - 静态分析、动态分析和Frida检测 - 由 [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF) 提供支持。
将AI代理指向APK文件,让它自主发现漏洞、检查反编译的源代码、测试导出的活动、绕过Frida的SSL固定,并生成安全报告。
## 架构
```
┌─────────────────────┐ ┌──────────────┐ ┌─────────────┐
│ AI 代理 │ MCP │ mobsf-mcp │ REST │ MobSF │
│ (Claude/Ollama等)│◄───────►│ 服务器 │◄───────►│ (Docker) │
└─────────────────────┘ stdio └──────────────┘ HTTP └──────┬──────┘
│ ADB
┌──────▼──────┐
│ Android │
│ 模拟器 │
│ (可选) │
└─────────────┘
```
**静态分析** (无需模拟器):上传APK → 反编译 → 分析清单、权限、代码、密钥、网络配置、加密、证书、跟踪器。
**动态分析** (需要模拟器):在模拟器上安装应用程序 → 监控运行时行为 → 使用Frida拦截API调用 → 测试TLS → 收集网络流量 → 测试导出的活动。
## 快速入门
### 一键设置
```bash
bash scripts/setup.sh
```
### 或逐步设置
```bash
# 1. 启动MobSF
docker compose up -d
# 2. 获取API密钥
docker logs mobsf 2>&1 | grep "REST API Key"
# 3. 安装MCP服务器
pip install -e .
# 4. 配置
cp .env.example .env
# 编辑.env文件,填写您的API密钥
# 5. 与您的MCP客户端一起使用
mobsf-mcp
```
## 连接到您的LLM
一旦MobSF正在运行,MCP服务器已安装,请配置您的MCP客户端以加载工具。
### Claude Desktop
添加到 `~/.claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"mobsf": {
"command": "mobsf-mcp",
"env": {
"MOBSF_URL": "http://localhost:8000",
"MOBSF_API_KEY": "your_api_key_here"
}
}
}
}
```
重启Claude Desktop。23个工具将自动出现。
### Open WebUI + Ollama
参见 [docs/ollama-setup.md](docs/ollama-setup.md),了解通过mcpo桥接连接本地LLM的信息。
### 任意MCP客户端
服务器通过stdio MCP协议通信。将任何MCP兼容的客户端指向 `mobsf-mcp` 命令,并设置 `MOBSF_URL` 和 `MOBSF_API_KEY` 环境变量。不需要额外的配置。
```bash
# 独立测试
MOBSF_URL=http://localhost:8000 MOBSF_API_KEY=your_key mobsf-mcp
```
## 可用工具(23)
### 静态分析(8)
| 工具 | 描述 |
|------|-------------|
| `upload_apk` | 上传APK文件进行分析 |
| `scan_apk` | 触发静态分析(反编译、清单、代码、密钥) |
| `get_report` | 获取详细的安全发现(可按章节筛选) |
| `get_security_scorecard` | 高级安全态势评分 |
| `view_source_file` | 检查特定的反编译源文件 |
| `list_scans` | 列出所有之前的扫描 |
| `search_scans` | 按名称/包/哈希搜索扫描 |
| `delete_scan` | 删除扫描 |
### 动态分析(9)
| 工具 | 描述 |
|------|-------------|
| `list_dynamic_apps` | 列出准备好进行动态测试的应用程序 |
| `start_dynamic_analysis` | 在模拟器上安装和启动应用程序 |
| `stop_dynamic_analysis` | 停止分析并收集结果 |
| `get_dynamic_report` | 获取运行时分析结果 |
| `get_logcat` | 获取过滤后的logcat输出 |
| `run_adb_command` | 在设备上执行ADB命令 |
| `test_exported_activities` | 测试未经授权的活动访问 |
| `launch_activity` | 启动特定活动 |
| `run_tls_tests` | 测试TLS/SSL安全 |
### Frida检测(6)
| 工具 | 描述 |
|------|-------------|
| `frida_instrument` | 运行钩子(SSL绕过、根绕过、自定义脚本) |
| `frida_monitor_apis` | 在运行时监控敏感的API调用 |
| `frida_get_logs` | 获取Frida钩子输出 |
| `frida_list_scripts` | 列出可用的内置脚本 |
| `frida_get_script_code` | 查看脚本源代码 |
| `frida_get_dependencies` | 在设备上安装Frida依赖 |
## 动态分析设置
动态分析需要一个具有 **root权限** (用于可写的`/system`)的Android模拟器连接到MobSF。
> **API级别说明:** MobSF v4.5.1使用Frida 17.15.3,它与Android 13(API 33)存在已知的兼容性问题 - `frida.attach()`因`TypeError`崩溃。对于包括Frida检测在内的完整DAST,请使用Android 11(API 30)模拟器。ADB命令、导出活动测试、TLS测试和logcat在API 33上运行正常。一旦MobSF更新其Frida依赖,此问题将得到解决。
### 模拟器设置
两种选项:
#### 选项A:Docker Android模拟器(最简单)
使用 [docker-android](https://github.com/budtmo/docker-android) - 一个预构建的Docker镜像,包含Android模拟器、SDK和ADB,无需本地SDK安装。
```bash
docker run -d --privileged -p 6080:6080 -p 5554:5554 -p 5555:5555 \
-e DEVICE="pixel_6" -e EMULATOR_ARGS="-writable-system" \
budtmo/docker-android:emulator_13.0
# 等待启动,然后对其进行root操作
adb connect localhost:5555
adb root && adb remount
```
然后在 `docker-compose.yml` 中设置 `ANALYZER_IDENTIFIER=localhost:5555`(代替 `emulator-5554`)。
#### 选项B:手动AVD(更多控制)
```bash
# 安装Android SDK命令行工具,然后:
sdkmanager "system-images;android-33;google_apis;x86_64" "platforms;android-33" "platform-tools"
avdmanager create avd -n mobsf -k "system-images;android-33;google_apis;x86_64" -d pixel_6 -f
# 以可写系统启动
emulator -avd mobsf -no-window -no-audio -no-snapshot \
-writable-system -gpu swiftshader_indirect -memory 2048 &
# 等待启动
adb wait-for-device
adb root && adb remount
adb shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 5; done'
```
### Docker ↔ 模拟器连接
该项目的 `docker-compose.yml` 已预配置:
- `network_mode: host` - Docker共享主机网络,因此ADB直接生效
- `MOBSF_PLATFORM=host` - 禁用Docker Desktop主机名翻译
- `ANALYZER_IDENTIFIER=emulator-5554` - 将MobSF指向模拟器
- `./mobsf-data/.android/` - ADB密钥挂载以进行授权
- 入口点包装器修补MobSF以支持API 33+
**重要**:在启动MobSF Docker之前,请杀死主机ADB服务器,以避免ADB冲突:
```bash
adb kill-server && docker compose up -d
```
## 示例代理交互
```
用户:分析./target.apk的安全性
代理:我将为您上传并扫描此APK。
[调用upload_apk("./target.apk")]
[调用scan_apk("a1b2c3d4...")]
[调用get_security_scorecard("a1b2c3d4...")]
该应用程序的安全评分为28/100(高风险):
- 6个高严重性清单问题(StrandHogg 2.0,可调试)
- 7个导出的组件没有权限检查
- Janus漏洞(仅v1签名)
- 发现23个硬编码密钥
- 3个隐私跟踪器
- 已启用调试,允许备份
您想让我开始动态分析并测试导出的活动吗?
```
## 文件结构
```
/home/kali/labs/MCP/
├── src/
│ ├── server.py ← MCP服务器(23个工具)
│ └── mobsf_client.py ← MobSF REST API客户端
├── scripts/
│ ├── setup.sh ← 一键设置
│ └── test_pipeline.py ← 端到端测试套件
├── docs/
│ └── ollama-setup.md ← LLM集成指南
├── mobsf-data/ ← Docker卷(持久)
│ ├── .android/adbkey ← ADB授权密钥
│ ├── entrypoint-wrapper.sh ← API补丁
│ ├── config.py / db.sqlite3 / secret
│ └── downloads/ ← 扫描工件
├── tests/
│ └── test.apk ← InsecureBankv2(测试目标)
├── docker-compose.yml ← MobSF容器配置
├── pyproject.toml ← Python包配置
├── .env.example ← 环境模板
└── README.md
```
## 开发
```bash
pip install -e .
python3 scripts/test_pipeline.py
```
## 许可证
MIT © [plur1bu5](https://github.com/plur1bu5)
---
<p align="center">
<sub>由 <a href="https://github.com/plur1bu5">plur1bu5</a> 构建 ❤️ - 如果这能帮助您更智能地黑客,请给一个 ⭐</sub>
</p>