项目简介
GhidraMCP是一个Model Context Protocol (MCP) 服务器,它将Ghidra的强大逆向工程功能(如反编译、反汇编、符号重命名、数据类型管理等)封装成一系列可供大语言模型 (LLM) 调用的工具。通过GhidraMCP,LLM可以获取程序上下文、执行分析任务、修改二进制文件信息,从而实现自主的逆向工程工作流。它由一个运行在Ghidra内部的HTTP插件和一个作为MCP服务器的Python桥接脚本组成,两者协同工作,为LLM提供强大的二进制分析能力。
主要功能点
- 二进制分析: 提供程序元数据、内存段、导入/导出表、字符串列表、函数列表和数据项列表等详细信息,帮助LLM理解程序的整体结构。
- 函数操作: 支持按名称或地址反编译/反汇编函数,获取函数调用者、被调用者及交叉引用,以便分析程序控制流。还可对函数及局部变量进行重命名。
- 数据类型管理: 能够创建、修改(添加/移除成员)、查询结构体、枚举和联合体等自定义数据类型,并可应用于指定内存地址,提升数据分析的准确性。
- 内存操作: 支持读取和写入指定地址的字节序列,搜索字节模式,以及创建和重命名内存标签,便于LLM对特定内存区域进行探索和修改。
- 上下文感知: 获取Ghidra当前选中的地址和函数信息,为LLM提供实时操作依据和更自然的交互体验。
安装步骤
- 安装Ghidra: 访问 Ghidra官网 下载并安装Ghidra软件。
- 安装Python 3和MCP SDK: 确保您的系统已安装Python 3。通过 pip 安装 MCP SDK 和 'requests' 库:
pip install mcp requests - 下载GhidraMCP发布包: 从 GhidraMCP GitHub发布页 下载最新版本的 'GhidraMCP-*.zip' 文件,该文件包含Ghidra插件和Python桥接脚本。
- 安装Ghidra插件:
- 运行Ghidra。
- 选择 '文件 (File)' -> '安装扩展 (Install Extensions)'。
- 点击 '+' 按钮,选择下载的 'GhidraMCP-*.zip' 文件。
- 根据提示重启Ghidra。
- 配置并激活插件:
- 在Ghidra的 '项目管理器 (Project Manager)' 中创建或打开一个项目,并导入一个二进制文件进行分析。
- 双击导入的程序或使用 '工具 (Tools)' -> '代码浏览器 (CodeBrowser)' 打开代码浏览器。
- 在代码浏览器中,导航至 '文件 (File)' -> '配置 (Configure)' -> '开发者 (Developer)'。
- 启用 GhidraMCPPlugin。GhidraMCP的内部HTTP服务器将在插件启用且有活动程序时自动启动。
- (可选) 配置服务器端口: 在代码浏览器中,通过 '编辑 (Edit)' -> '工具选项 (Tool Options)' -> 'GhidraMCP HTTP Server' 配置服务器端口(默认为 8080)。
服务器配置
GhidraMCP服务器通过一个Python脚本 ('bridge_mcp_ghidra.py') 作为桥接层来运行。这个脚本是您MCP客户端连接的目标。对于常见的MCP客户端(如Claude Desktop、VSCode Copilot或Cline),您需要配置它们来运行此Python脚本或连接到它启动的SSE服务器。
-
配置信息示例 (JSON 格式): 对于支持 'command' 方式启动MCP服务器的客户端(如Claude Desktop 或 VSCode Copilot (stdio)),您需要在客户端的配置中添加如下信息:
{ "mcpServers": { "GhidraMCP": { "command": "python", "args": [ "/ABSOLUTE_PATH_TO/bridge_mcp_ghidra.py", "--ghidra-server", "http://127.0.0.1:8080/" ], "description": "GhidraMCP 服务器允许 LLM 调用 Ghidra 的逆向工程工具。请将 '/ABSOLUTE_PATH_TO/' 替换为 bridge_mcp_ghidra.py 脚本在您系统上的实际绝对路径。确保 Ghidra 应用程序已运行,其 GhidraMCP 插件已启用,并且已在 Ghidra 的代码浏览器中加载了您要分析的二进制文件。" } } }- "GhidraMCP": 您为该MCP服务器自定义的名称。
- "command": 用于启动 'bridge_mcp_ghidra.py' 脚本的执行器,通常为 'python' 或 'python3'。
- "args": 传递给 'command' 的参数列表。
- '"/ABSOLUTE_PATH_TO/bridge_mcp_ghidra.py"': 这是GhidraMCP Python桥接脚本在您系统上的绝对路径。请务必将其替换为实际路径。
- '"--ghidra-server http://127.0.0.1:8080/"': 指定GhidraMCP插件内部HTTP服务器的地址和端口。如果Ghidra插件的默认端口已更改,请更新此URL。
- "description": 对该MCP服务器的简要说明,帮助您理解其用途和配置要求。
-
对于SSE传输的客户端 (如 Cline): 首先,您需要手动运行 'bridge_mcp_ghidra.py' 脚本以启动SSE服务器。打开终端并执行以下命令:
python /ABSOLUTE_PATH_TO/bridge_mcp_ghidra.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8081 --ghidra-server http://127.0.0.1:8080/请将 '/ABSOLUTE_PATH_TO/' 替换为 'bridge_mcp_ghidra.py' 脚本的实际绝对路径。如果 '--mcp-host' 或 '--mcp-port' 已更改,请相应调整。 然后,在您的MCP客户端中添加一个远程MCP服务器连接,其URL为 'http://127.0.0.1:8081/sse'。
基本使用方法
- 启动Ghidra: 启动Ghidra,确保GhidraMCP插件已启用,并加载了您想要分析的二进制文件到 '代码浏览器 (CodeBrowser)'。
- 启动MCP客户端: 根据您选择的MCP客户端(如Claude Desktop、VSCode Copilot等),按照上述“服务器配置”说明进行设置并启动。
- 开始逆向工程: 在LLM客户端的聊天界面中,您现在可以使用GhidraMCP提供的工具进行交互式逆向工程。例如,您可以要求LLM:
- "列出程序中所有的函数" (调用 'list_methods' 工具)
- "反编译 'main' 函数" (调用 'decompile_function' 工具)
- "在地址 '0x401000' 处创建一个名为 'my_custom_label' 的标签" (调用 'create_label' 工具)
- "查找函数 'calculate_checksum' 的所有调用者" (调用 'get_function_callers' 工具) LLM将通过调用GhidraMCP服务器的相应工具来执行这些操作,并将结果返回给您,从而实现高效的AI辅助逆向工程。
信息
分类
开发者工具