# IDA Pro MCP vs SO Analyzer MCP 工具对比
## IDA Pro MCP 工具列表 (共 45+ 个工具)
### 📊 基础信息 (5个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `idb_meta` | 获取IDB元数据 | `so_info` | ✅ 有 |
| `cursor_addr` | 获取当前地址 | ❌ | ❌ 无 |
| `cursor_func` | 获取当前函数 | ❌ | ❌ 无 |
| `segments` | 列出所有段 | `so_get_sections` | ✅ 有 |
| `entrypoints` | 获取入口点 | ❌ | ❌ 无 |
### 🔍 函数分析 (8个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `list_funcs` | 列出所有函数 | `so_list_all_functions` | ✅ 已实现 |
| `lookup_funcs` | 查找函数 | `so_search_symbol` | ✅ 有 |
| **`decompile`** | **反编译函数** | `so_decompile` | ✅ 已实现 |
| `disasm` | 反汇编函数 | `so_disassemble` | ✅ 有 |
| `analyze_funcs` | 综合分析函数 | `so_analyze_function_advanced` | ✅ 已增强 |
| `callees` | 获取被调用函数 | `so_callgraph` | ✅ 已实现 |
| `callers` | 获取调用者 | `so_callgraph` | ✅ 已实现 |
| `callgraph` | 构建调用图 | `so_callgraph` | ✅ 已实现 |
### 🔗 交叉引用 (3个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `xrefs_to` | 获取交叉引用 | `so_xref_string` | ✅ 有 |
| `xrefs_to_field` | 结构体字段引用 | ❌ | ❌ 无 |
| `xref_matrix` | 交叉引用矩阵 | ❌ | ❌ 无 |
### 📝 字符串和数据 (5个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `strings` | 列出字符串 | `so_strings` | ✅ 有 |
| `imports` | 列出导入 | `so_imports` | ✅ 有 |
| `list_globals` | 列出全局变量 | ❌ | ❌ 无 |
| `get_global_value` | 读取全局变量值 | ❌ | ❌ 无 |
| `int_convert` | 数字格式转换 | ❌ | ❌ 无 |
### 🔎 搜索功能 (4个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `search` | 搜索模式 | `so_search_bytes` | ✅ 有 |
| `find_bytes` | 查找字节 | `so_search_bytes` | ✅ 有 |
| `find_insns` | 查找指令序列 | ❌ | ❌ 无 |
| `find_insn_operands` | 查找指令操作数 | ❌ | ❌ 无 |
| `find_paths` | 查找执行路径 | ❌ | ❌ 无 |
### 📦 类型系统 (7个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `local_types` | 列出本地类型 | ❌ | ❌ 无 |
| `structs` | 列出结构体 | ❌ | ❌ 无 |
| `struct_info` | 获取结构体信息 | ❌ | ❌ 无 |
| `read_struct` | 读取结构体字段 | ❌ | ❌ 无 |
| `declare_type` | 声明类型 | ❌ | ❌ 无 |
| `apply_types` | 应用类型 | ❌ | ❌ 无 |
| `infer_types` | 推断类型 | ❌ | ❌ 无 |
### 🔧 修改操作 (6个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `patch` | Patch字节 | `so_patch_bytes` | ✅ 有 |
| `patch_asm` | Patch汇编 | ❌ | ❌ 无 |
| `rename` | 重命名 | ❌ | ❌ 无 |
| `set_comments` | 设置注释 | ❌ | ❌ 无 |
| `export_funcs` | 导出函数数据 | ❌ | ❌ 无 |
| `basic_blocks` | 获取基本块 | `so_get_cfg` | ✅ 已实现 |
### 🐛 调试器 (13个)
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `dbg_start` | 启动调试器 | ❌ | ❌ 无 |
| `dbg_exit` | 退出调试器 | ❌ | ❌ 无 |
| `dbg_continue` | 继续执行 | ❌ | ❌ 无 |
| `dbg_step_into` | 单步进入 | ❌ | ❌ 无 |
| `dbg_step_over` | 单步跳过 | ❌ | ❌ 无 |
| `dbg_run_to` | 运行到地址 | ❌ | ❌ 无 |
| `dbg_add_bp` | 添加断点 | ❌ | ❌ 无 |
| `dbg_delete_bp` | 删除断点 | ❌ | ❌ 无 |
| `dbg_list_bps` | 列出断点 | ❌ | ❌ 无 |
| `dbg_regs` | 获取寄存器 | ❌ | ❌ 无 |
| `dbg_read_mem` | 读取调试内存 | ❌ | ❌ 无 |
| `dbg_write_mem` | 写入调试内存 | ❌ | ❌ 无 |
| `dbg_callstack` | 获取调用栈 | ❌ | ❌ 无 |
### 🐍 Python 执行
| 工具 | 功能 | so-analyzer 对应 | 状态 |
|------|------|------------------|------|
| `py_eval` | 执行Python代码 | ❌ | ❌ 无 |
---
## 统计对比
| 类别 | IDA Pro MCP | so-analyzer | 差距 |
|------|-------------|-------------|------|
| **总工具数** | 45+ | 30 | -15 |
| **基础分析** | 5 | 8 | +3 ✅ |
| **函数分析** | 8 | 8 | 0 ✅ |
| **交叉引用** | 3 | 4 | +1 ✅ |
| **字符串/数据** | 5 | 3 | -2 ❌ |
| **搜索功能** | 5 | 3 | -2 ❌ |
| **类型系统** | 7 | 0 | -7 ❌ |
| **修改操作** | 6 | 4 | -2 ❌ |
---
## 已实现的核心功能
### 优先级 1 - 已完成
#### 1. 反编译 (`so_decompile`)
```python
so_decompile(so_path, address, method="radare2") # 或 "ghidra" / "simple"
# 返回: 伪代码字符串
```
支持三种模式: radare2(默认), Ghidra(高质量), simple(无依赖)
#### 2. 函数列表 (`so_list_all_functions`)
```python
so_list_all_functions(so_path, limit=2000, search="ssl")
# 返回: 所有函数(包括未导出的)
```
通过扫描 PACIBSP/STP X29,X30 等函数开头特征识别
### 优先级 2 - 已完成
#### 3. 调用图 (`so_callgraph`)
```python
so_callgraph(so_path, function_addr, max_depth=3)
# 返回: 调用关系 + DOT格式图
```
识别 BL/BLR 指令,递归分析调用关系
#### 4. 控制流图 (`so_get_cfg`)
```python
so_get_cfg(so_path, function_addr)
# 返回: 基本块 + 分支边 + DOT图
```
#### 5. 全面函数分析 (`so_analyze_function_advanced`)
```python
so_analyze_function_advanced(so_path, function_address, size=512)
# 返回: 调用关系、系统调用、字符串引用、复杂度、类型判断
```
### 优先级 3 - 已完成
#### 6. 字符串加密检测 (`so_detect_encryption`)
```python
so_detect_encryption(so_path)
# 返回: 高熵字符串、XOR密钥、Base64编码、解密函数提示
```
#### 7. 数据流分析 (`so_trace_register`)
```python
so_trace_register(so_path, function_addr, register="x0")
# 返回: 寄存器值来源、数据流、返回值分析
```
### 待实现 (低优先级)
#### 8. 指令模式搜索
```python
so_find_instruction_pattern(so_path, pattern="mov.*bl")
```
#### 9. 类型系统 (7个工具)
- 对于 SO 文件分析不太重要
#### 10. 调试器 (13个工具)
- 建议不实现,IDA Pro 的调试器更强大
---
## 我们独有的优势
### Flutter 自动化工具链
```
1. flutter_detect → 检测Flutter应用
2. flutter_ssl_offset_v2 → 智能定位SSL函数
3. flutter_patch_ssl → Patch SO文件
4. flutter_patch_apk → 一键Patch APK
5. apk_sign → 签名APK
6. adb_install → 安装到设备
```
**IDA Pro MCP 完全没有这些功能!**
### APK 操作能力
```
- so_list_libs → 列出APK中的库
- so_extract → 提取SO文件
- flutter_patch_apk → 修改并重新打包
```
**IDA Pro MCP 只能分析,不能操作 APK!**
---
## 建议实现的工具(按优先级)
### 🔴 必须实现 (核心缺失)
#### 1. `so_decompile` - 反编译
```python
{
"name": "so_decompile",
"description": "反编译函数生成伪代码(使用Ghidra)",
"inputSchema": {
"so_path": "SO文件路径",
"address": "函数地址",
"lines": "返回的代码行数(默认50)"
}
}
```
**实现方式**: 集成 Ghidra Headless
**工作量**: 2-3天
**价值**: ⭐⭐⭐⭐⭐
#### 2. `so_list_all_functions` - 列出所有函数
```python
{
"name": "so_list_all_functions",
"description": "识别所有函数(包括未导出的)",
"inputSchema": {
"so_path": "SO文件路径",
"filter": "过滤模式(可选)",
"limit": "最多返回数量"
}
}
```
**实现方式**: 扫描 .text 段,识别函数开头模式
**工作量**: 1-2天
**价值**: ⭐⭐⭐⭐
### 🟡 建议实现 (增强功能)
#### 3. `so_callees` - 获取被调用函数
```python
{
"name": "so_callees",
"description": "获取函数调用的所有函数",
"inputSchema": {
"so_path": "SO文件路径",
"function_addr": "函数地址"
}
}
```
**工作量**: 2天
**价值**: ⭐⭐⭐
#### 4. `so_callers` - 获取调用者
```python
{
"name": "so_callers",
"description": "获取调用此函数的所有函数",
"inputSchema": {
"so_path": "SO文件路径",
"function_addr": "函数地址"
}
}
```
**工作量**: 2天
**价值**: ⭐⭐⭐
#### 5. `so_callgraph` - 调用图
```python
{
"name": "so_callgraph",
"description": "构建函数调用图",
"inputSchema": {
"so_path": "SO文件路径",
"root_addr": "起始函数地址",
"max_depth": "最大深度(默认3)"
}
}
```
**工作量**: 3天
**价值**: ⭐⭐⭐
#### 6. `so_find_instruction_pattern` - 指令模式搜索
```python
{
"name": "so_find_instruction_pattern",
"description": "搜索指令序列模式",
"inputSchema": {
"so_path": "SO文件路径",
"pattern": "指令模式(如 'mov.*bl')",
"limit": "最多返回数量"
}
}
```
**工作量**: 2天
**价值**: ⭐⭐
#### 7. `so_basic_blocks` - 基本块分析
```python
{
"name": "so_basic_blocks",
"description": "获取函数的控制流图基本块",
"inputSchema": {
"so_path": "SO文件路径",
"function_addr": "函数地址"
}
}
```
**工作量**: 3天
**价值**: ⭐⭐
### 🟢 可选实现 (低优先级)
#### 8. `so_get_entrypoints` - 获取入口点
```python
{
"name": "so_get_entrypoints",
"description": "获取SO文件的入口点",
"inputSchema": {
"so_path": "SO文件路径"
}
}
```
**工作量**: 0.5天
**价值**: ⭐
#### 9. `so_list_globals` - 列出全局变量
```python
{
"name": "so_list_globals",
"description": "列出全局变量",
"inputSchema": {
"so_path": "SO文件路径",
"filter": "过滤模式"
}
}
```
**工作量**: 1天
**价值**: ⭐
---
## 实现优先级建议
### 第一批 (1-2周) - 核心功能
1. ✅ `so_decompile` - 反编译 (最重要)
2. ✅ `so_list_all_functions` - 函数识别
### 第二批 (2-3周) - 增强功能
3. ✅ `so_callees` - 被调用函数
4. ✅ `so_callers` - 调用者
5. ✅ `so_callgraph` - 调用图
### 第三批 (3-4周) - 高级功能
6. ⬜ `so_find_instruction_pattern` - 指令搜索
7. ⬜ `so_basic_blocks` - 基本块分析
### 不建议实现
- ❌ 调试器功能 (13个) - IDA Pro 更好
- ❌ 类型系统 (7个) - 对 SO 分析价值不大
- ❌ 注释/重命名 - 不是 MCP 工具的核心需求
---
## 总结
### 当前状态
- **已有工具**: 30个
- **IDA独有**: 15个 (主要是调试器和类型系统)
- **我们独有**: 13个 (Flutter专用 + 加密检测)
### 已实现的核心功能 ✅
1. **反编译** - 支持 radare2/Ghidra/轻量级模式 ✅
2. **函数识别** - 识别所有函数包括未导出 ✅
3. **调用图分析** - DOT格式输出 ✅
4. **控制流图** - 基本块分析 ✅
5. **字符串加密检测** - 熵值分析 ✅
6. **数据流分析** - 寄存器追踪 ✅
### 独特优势
1. **Flutter 自动化** - IDA 完全没有 ⭐
2. **APK 操作** - IDA 完全没有 ⭐
3. **一键 Patch** - IDA 需要手动 ⭐
4. **免费开源** - IDA Pro 需要 $1000+ ⭐
### 结论
**so-analyzer-mcp 已经是 Flutter 逆向的最佳免费工具!**