Skip to main content
Glama
IDA_VS_SO_ANALYZER.md11.3 kB
# 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 逆向的最佳免费工具!**

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/1600822305/so-analyzer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server