项目简介
ReVA (Reverse Engineering Assistant) 是一个开源项目,旨在构建一个不依赖特定模型的AI助手,专注于逆向工程任务。它以一个基于 Model Context Protocol (MCP) 的服务器形式存在,作为一个Ghidra扩展运行。ReVA 通过向大型语言模型 (LLM) 客户端暴露一系列精心设计的工具和资源,使得LLM能够访问和操作Ghidra内部的逆向工程数据,从而协助完成复杂的分析任务。
主要功能点
ReVA 作为MCP服务器,通过提供以下功能为LLM客户端赋能:
- 程序信息访问: 获取Ghidra中当前打开的程序列表及其基本信息。
- 项目文件浏览: 列出Ghidra项目中特定文件夹或整个项目的文件和目录。
- 内存数据读取: 根据地址读取程序的内存内容,并支持多种格式显示。
- 内存块列表: 获取程序的内存块列表及其属性(如读、写、执行权限)。
- 符号信息查询: 列出程序中的符号(如函数、标签、数据)及其地址、类型、命名空间等,支持过滤和分页。
- 函数信息获取: 列出程序中的函数,包括名称、地址、大小、签名、参数等,支持过滤。
- 代码反编译/汇编: 获取指定函数的反编译C代码和汇编代码。
- 变量重命名: 允许LLM根据分析结果建议,对函数中的变量进行重命名。
- 字符串查找: 列出程序中识别出的字符串,支持分页以处理大量数据。
- 交叉引用查询: 获取指定地址或符号的引用关系(谁调用/访问了它,它调用/访问了谁)。
- 数据类型管理: 列出Ghidra中可用的数据类型存档,并查询存档中的数据类型。
- 应用数据类型: 允许LLM根据分析结果,在特定地址或符号位置应用预定义的数据类型。
- 创建标签: 允许LLM在指定地址创建标签。
这些功能以标准化的MCP工具和资源形式提供,使得任何支持MCP的LLM客户端都能利用ReVA来与Ghidra进行交互,执行逆向工程分析任务。
安装步骤
ReVA 是一个 Ghidra 扩展,需要安装在 Ghidra 反编译平台中。目前 ReVA 支持 Ghidra 11.3 及以上版本。
安装方法:
- 下载发布版本: 从 ReVA 的 GitHub Release 页面下载与你的 Ghidra 版本对应的扩展包(通常是一个'.zip'文件)。
- 打开 Ghidra 扩展管理器: 在 Ghidra 中,导航到 'File' -> 'Install Extensions...'。
- 安装扩展: 在弹出的窗口中,点击绿色的加号图标('+'),选择你下载的 ReVA 扩展 '.zip' 文件,然后点击 'OK'。
- 重启 Ghidra: 安装完成后,需要重启 Ghidra 使扩展生效。
或者,你可以从源代码构建:
- 克隆仓库: 'git clone https://github.com/cyberkaida/reverse-engineering-assistant.git'
- 进入目录: 'cd reverse-engineering-assistant'
- 设置 Ghidra 安装路径: 确保 'GHIDRA_INSTALL_DIR' 环境变量指向你的 Ghidra 安装目录。例如:'export GHIDRA_INSTALL_DIR=/path/to/ghidra'
- 运行构建脚本: './gradlew' (或 'gradle' 如果已添加到PATH)
- 安装扩展: 构建成功后,扩展文件会在 'dist/' 目录生成。按照上面的步骤通过 Ghidra 扩展管理器安装 'dist/reva-<版本号>.zip' 文件。
- 重启 Ghidra: 重启 Ghidra 使扩展生效。
安装并重启 Ghidra 后,ReVA 插件会自动运行并尝试启动 MCP 服务器。
服务器配置 (供 MCP 客户端使用)
ReVA 插件启动后,会自动在其默认端口 '8080' (可在 Ghidra 设置中修改) 通过 SSE 传输协议暴露 MCP 服务。你的 MCP 客户端(如支持 MCP 的 LLM 应用或终端)需要配置连接到 ReVA 服务器。
以下是 MCP 客户端配置所需的基本信息及示例(请根据你使用的 MCP 客户端软件的文档进行具体配置):
- 服务器名称 (name): 'ReVa' (这是LLM客户端用来引用此服务器的名称)
- 传输协议和地址: ReVA 默认使用 SSE (Server-Sent Events) 协议,监听地址为 'http://localhost:8080/mcp/sse'。
- 连接命令 (command/args): 对于不支持 SSE 原生连接的客户端,可以使用 'mcp-remote' 工具作为代理。
例如,对于需要使用 'mcp-remote' 的客户端 (如 Claude、oterm): MCP配置通常是一个JSON文件或JSON结构,你需要添加一个服务器配置块,类似这样:
{ "mcpServers": [ { "name": "ReVa", // 服务器名称,用于客户端识别 "command": "npx", // 启动连接代理的命令 "args": [ // 传递给命令的参数 "-y", "mcp-remote", "http://localhost:8080/mcp/sse" // ReVA服务器的地址 ] } // ... 其他MCP服务器配置 ] }
解释:
- 'name': 客户端中显示和使用的服务器名称。
- 'command': 客户端启动一个外部进程来处理连接。这里使用 'npx' 来执行 'mcp-remote' 工具。你需要确保 Node.js 和 npm/npx 已安装。
- 'args': 'npx' 命令的参数,'-y mcp-remote' 表示自动安装并运行 'mcp-remote','http://localhost:8080/mcp/sse' 是 ReVA 服务器监听的实际地址。
对于支持 SSE 原生的客户端 (如 VSCode): 配置会更简单,直接指定类型和URL:
{ "mcp": { "servers": { "ReVa": { // 服务器名称 "type": "sse", // 传输协议类型 "url": "http://localhost:8080/mcp/sse" // ReVA服务器的地址 } } } // ... 其他MCP配置 }
注意: 具体的配置位置和格式请参考你使用的 MCP 客户端软件的官方文档。确保 Ghidra 正在运行并且 ReVA 插件已加载。
基本使用方法
一旦 ReVA 作为 Ghidra 扩展安装并启动,并且你的 MCP 客户端已配置连接到 ReVA,你就可以通过客户端与 ReVA 交互。
通常,这意味着你可以在 LLM 客户端中向模型提问,模型将识别 ReVA 提供的工具和资源,并在需要 Ghidra 中的逆向工程上下文时自动调用 ReVA 的工具。
例如,你可以直接在LLM客户端中询问:
- "Get the list of open programs from ReVa." (可能会调用 'list-open-programs' 工具或读取 'ghidra://programs' 资源)
- "Using the 'get-functions' tool from ReVa, list the functions in program '/path/to/my_program.reva' filtering out default names." (这会提示LLM调用 'get-functions' 工具)
- "Decompile the function named 'main' in '/path/to/my_program.reva'." (LLM可能会调用 'get-decompiled-function' 工具)
- "What are the interesting strings in '/path/to/my_program.reva'?" (LLM可能会调用 'get-strings' 或 'get-strings-count' 工具)
- "Read 32 bytes of memory at address 0x401000 in '/path/to/my_program.reva'." (LLM可能会调用 'read-memory' 工具)
LLM会根据你的提问、其内置能力以及 ReVA 提供的工具描述来决定调用哪个工具,并解析工具返回的结果,将其整合到回复中。ReVA 在后台与 Ghidra 交互,执行实际的逆向工程操作并将结果返回给 LLM。
确保你在Ghida中打开了你想让LLM分析的程序,并在命令中提供正确的程序路径(即程序在Ghidra项目中的路径,例如 '/my_project/my_program.reva')。你可以使用 'list-project-files' 或 'list-open-programs' 工具来查找正确的程序路径。
信息
分类
AI与计算