项目简介 Tenrec是一个专为IDA Pro逆向工程设计的模型上下文协议(MCP)服务器。它允许大型语言模型(LLM)客户端以标准化的方式与IDA Pro进行交互,获取二进制分析上下文、调用特定工具来执行逆向任务,并通过插件系统灵活扩展功能。Tenrec支持无头IDA Pro操作、多会话分析,并可自动生成插件文档。
主要功能点
- IDA Pro集成: 实现IDA Pro的无头交互,通过插件提供对IDA数据库的全面访问和操作能力。
- 多会话管理: 支持IDA Pro数据库的多会话并行管理,方便处理复杂项目或相关库文件。
- 可扩展插件系统: 核心功能通过模块化插件提供,如函数分析、交叉引用追踪、符号管理、内存段查询等,允许用户轻松创建自定义插件扩展功能。
- LLM工具接口: 将IDA Pro的各项功能封装为LLM可调用的工具(Tools),通过标准JSON-RPC协议进行通信。
- 上下文提供: 向LLM客户端提供二进制的结构化上下文信息,包括函数、字符串、段等。
- 多种传输协议: 支持Stdio、HTTP、SSE、Streamable HTTP等多种传输协议。
安装步骤
- 先决条件:
- Python 3.10 或更高版本
- IDA Pro 9.1+ 版本安装
- 通过'uv'安装:
uv tool install tenrec - 设置IDA Pro路径:
Tenrec依赖'ida-domain'库,需要设置'IDADIR'环境变量指向你的IDA Pro安装目录。
- macOS示例:'export IDADIR="/Applications/IDA Professional 9.1.app/Contents/MacOS"'
- Linux示例:'export IDADIR="/opt/idapro"'
- Windows示例 (PowerShell, 管理员权限运行):'setx IDADIR "C:\Program Files\IDA Pro" /M'
服务器配置 (MCP客户端) Tenrec服务器需要由MCP客户端启动。以下是一个MCP客户端配置Tenrec服务器的JSON示例,通常存储在客户端的配置文件中(例如,'.cursor/mcp.json' 或 '~/.claude.json'):
{ "mcpServers": { "tenrec": { "command": "uvx", "args": ["tenrec", "run"], "env": { "IDADIR": "你的IDA Pro安装路径" // 示例: "/Applications/IDA Professional 9.1.app/Contents/MacOS" (macOS) // 示例: "/opt/idapro" (Linux) // 示例: "C:\\Program Files\\IDA Pro" (Windows) }, "timeout": 1800, // 可选:服务器启动超时时间,单位秒。 "disabled": false, // 可选:是否禁用此服务器。 "autoApprove": [ "server_new_session", "server_list_sessions", "server_set_session", "server_remove_session", "server_remove_all_sessions", "bytes_create_data_at", "bytes_get_value_at", "bytes_is_type_at", "bytes_patch_value_at", "bytes_set_value_at", "bytes_get_original_value_at", "bytes_check_flags_at", "bytes_delete_value_at", "bytes_find_bytes_between", "bytes_find_immediate_between", "bytes_find_text_between", "bytes_get_all_flags_at", "bytes_get_bytes_at", "bytes_get_data_size_at", "bytes_get_disassembly_at", "bytes_get_flags_at", "bytes_get_next_address", "bytes_get_next_head", "bytes_get_original_bytes_at", "bytes_get_previous_address", "bytes_get_previous_head", "bytes_has_any_flags_at", "bytes_has_user_name_at", "bytes_is_code_at", "bytes_is_data_at", "bytes_is_flowed_at", "bytes_is_forced_operand_at", "bytes_is_head_at", "bytes_is_manual_insn_at", "bytes_is_not_tail_at", "bytes_is_tail_at", "bytes_is_unknown_at", "bytes_is_value_initialized_at", "bytes_revert_byte_at", "comments_delete", "comments_get", "comments_get_all", "comments_get_all_filtered", "comments_set", "entries_add", "entries_exists", "entries_get_addresses", "entries_get_all", "entries_get_at_index", "entries_get_at", "entries_get_by_name", "entries_get_by_ordinal", "entries_get_count", "entries_get_forwarders", "entries_get_start", "entries_get_ordinals", "entries_rename", "entries_set_forwarder", "functions_get_all", "functions_get_all_filtered", "functions_get_by_name", "functions_get_at", "functions_get_between", "functions_get_callees", "functions_get_callers", "functions_get_pseudocode", "functions_get_signature", "functions_set_name", "functions_rename_local_variable", "names_delete", "names_demangle_name", "names_force_name", "names_get_all", "names_get_all_filtered", "names_get_at", "names_get_at_index", "names_get_count", "names_get_demangled_name", "names_set_name", "segments_get_all", "segments_get_at", "segments_set_name", "strings_get_all", "strings_get_all_filtered", "strings_get_at_address", "strings_get_at_index", "strings_get_between", "types_declare_c_type", "types_list_local_types", "types_set_local_variable_type", "types_set_function_prototype", "types_set_global_variable_type", "xrefs_get_xrefs_from", "xrefs_get_xrefs_to", "xrefs_get_xref_graph" ], // 可选:LLM可以自动调用这些工具,无需用户批准。 "alwaysAllow": [ // ... (与autoApprove类似,但通常用于需要更高权限的工具) ] } } }
请注意:'IDADIR'环境变量必须设置正确,否则Tenrec服务器无法启动。'autoApprove'和'alwaysAllow'列表会在运行'tenrec install'命令时自动填充默认安全工具。
基本使用方法 配置好MCP客户端后,你的LLM客户端即可通过Tenrec服务器与IDA Pro进行交互。
- 启动Tenrec服务器:
通常由MCP客户端在需要时自动启动。你也可以手动运行(不常用):
('--transport'参数可选'stdio'、'http'、'sse'、'streamable-http',具体取决于客户端需求)tenrec run --transport stdio - LLM交互示例:
在支持MCP的LLM客户端中,你可以直接向LLM提问,并让它调用Tenrec提供的工具来分析IDA Pro数据库。例如,让LLM打开一个二进制文件并进行分析:
"你已获得当前目录下的 'darn_mice.exe' 二进制文件。使用 Tenrec 打开一个会话并逆向分析此二进制文件。主要任务是找到入口点,追踪执行流以获得高级理解。请在分析过程中重命名变量和函数。xref 插件对此任务可能很有帮助。最终你将寻找一个标志,其格式为电子邮件地址,可能需要解密。不要尝试猜测标志,而是根据二进制分析来引导你找到正确的答案。"
信息
分类
开发者工具