xjoker/ghidra-mcp
GitHub: xjoker/ghidra-mcp
该项目为无头二进制逆向工程提供了一个单进程 MCP 服务器,通过 PyGhidra 驱动 Ghidra 并向 AI 客户端开放 35 个任务导向的分析工具,实现自动化的二进制逆向分析流程。
Stars: 1 | Forks: 0
# Ghidra MCP
[简体中文](README.zh-CN.md)
一个用于无头逆向工程的单进程 MCP server。一个 Python 进程通过 PyGhidra 启动 JVM,管理持久化的 Ghidra 项目,并向 AI 客户端暴露 35 个面向任务的工具。
## 项目状态
项目源代码基于 Apache License 2.0 授权。Ghidra、PyGhidra、MCP SDK 及其他第三方组件仍保留其各自的许可证。
本服务旨在用于受控的无头分析,而非作为多租户沙盒。Ghidra 会解析不受信任的二进制文件,且 HTTP token 持有者可以调用分析和修改工具。请使用隔离的容器、只读的输入挂载、专用的持久化存储卷以及最小的网络访问权限。
## 容器镜像
该仓库包含一个 GitHub Actions 工作流,在每次推送到 `main` 分支后,它会使用 `--no-cache` 构建 `linux/amd64` 镜像,将带有版本号和 `latest` 标签的镜像发布到 GHCR,拉取已发布的摘要,并根据源代码版本和提交验证 `/health`。
一旦 GHCR 包发布并将其可见性设置为公开,即可在无需身份验证的情况下拉取它:
```
docker pull ghcr.io/xjoker/ghidra-mcp:latest
```
GHCR 默认将新建的容器包设为私有。仅工作流成功运行并不能证明其可以匿名访问;请通过未经验证拉取来进行确认。
运行镜像时,请使用持久化项目和只读输入目录:
```
docker volume create ghidra-mcp-projects
(
read -rsp 'Ghidra MCP token: ' GHIDRA_MCP_AUTH_TOKEN && echo
export GHIDRA_MCP_AUTH_TOKEN
docker run -d --name ghidra-mcp \
--platform linux/amd64 \
-p 127.0.0.1:8765:8765 \
-e GHIDRA_MCP_PUBLIC_URL=http://127.0.0.1:8765 \
-e GHIDRA_MCP_AUTH_TOKEN \
-v ghidra-mcp-projects:/data/projects \
-v /absolute/path/to/binaries:/data/input:ro \
ghcr.io/xjoker/ghidra-mcp:latest
)
```
隐藏的提示让 token 值不会留在 shell 历史记录中。但任何拥有 Docker daemon 访问权限的人仍然可以检查容器环境变量;请相应地限制 daemon 访问权限。
使用 `Authorization: Bearer ` 连接到 `http://127.0.0.1:8765/mcp`。公开的健康检查端点为 `http://127.0.0.1:8765/health`。
要从源代码构建,请将 `` 替换为根目录下 `VERSION` 文件中的值:
```
docker buildx build \
--platform linux/amd64 \
--no-cache \
--load \
--build-arg GIT_COMMIT= \
--build-arg VERSION= \
-t ghidra-mcp: .
```
## 本地 stdio
要求:Python 3.11+、Ghidra 12.1.2+、`uv` 以及一个可写的项目目录。
```
uv sync --locked
cp .env.example .env
GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra \
GHIDRA_MCP_TRANSPORT=stdio \
uv run ghidra-mcp
```
MCP 客户端应自行启动 stdio 进程。等效的通用配置如下:
```
{
"mcpServers": {
"ghidra": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/ghidra-mcp",
"run",
"ghidra-mcp"
],
"env": {
"GHIDRA_INSTALL_DIR": "/absolute/path/to/ghidra",
"GHIDRA_MCP_TRANSPORT": "stdio"
}
}
}
}
```
字段名称和配置位置因客户端而异。对于 Streamable HTTP,请配置 `/mcp` URL 和 Bearer 授权请求头。本项目不提供 Ghidra GUI 自动化功能。
## 配置
优先级顺序为:环境变量 > `.env` > TOML > 默认值。默认的 TOML 文件是 `data/config/default.toml`。
| 变量 | 默认值 | 用途 |
|---|---:|---|
| `GHIDRA_INSTALL_DIR` | 无 | 必需的 Ghidra 安装目录 |
| `GHIDRA_MCP_ANALYSIS_TIMEOUT_SECONDS` | `300` | 自动分析超时时间,从 1 到 3600 秒 |
| `GHIDRA_MCP_TRANSPORT` | `stdio` | `stdio` 或 `streamable-http` |
| `GHIDRA_MCP_HOST` | `127.0.0.1` | HTTP 监听地址 |
| `GHIDRA_MCP_PORT` | `8765` | HTTP 端口,从 1 到 65535 |
| `GHIDRA_MCP_PUBLIC_URL` | 无 | 在 HTTP 模式下客户端看到的必需 HTTP(S) 根 URL |
| `GHIDRA_MCP_STORAGE_ROOT` | `data/projects` | 持久化 Ghidra 项目目录 |
| `GHIDRA_MCP_INPUT_ROOT` | 无 | 必需的 HTTP 输入边界;symlink 无法逃逸此目录 |
| `GHIDRA_MCP_AUTH_TOKEN` | 无 | 必需的 HTTP token,至少 32 个 UTF-8 字节 |
公开 URL 不能包含通配符主机、用户信息、查询字符串或路径前缀。密钥只能从环境变量或未跟踪的 `.env` 文件中获取;请勿将真实的 token 放入 TOML、日志、shell 历史记录或 Git 中。
## 文档
[GitHub Wiki](https://github.com/xjoker/ghidra-mcp/wiki) 包含了详细的英文入门指南、工具目录和运维手册。
- [入门指南](https://github.com/xjoker/ghidra-mcp/wiki/Getting-started)
- [工具目录](https://github.com/xjoker/ghidra-mcp/wiki/Tool-catalog)
- [运维手册](https://github.com/xjoker/ghidra-mcp/wiki/Operations)
- [贡献指南](CONTRIBUTING.md)
- [安全政策](SECURITY.md)
## 开发
该项目目前支持源码安装和本地构建;未声明任何 PyPI 发行版。
```
uv sync --locked --extra dev
uv run --locked pytest -m 'not integration' -q
uv run --locked ruff check src tests scripts
```
## 许可证
项目源代码基于 [Apache License 2.0](LICENSE) 提供。归属信息记录在 [NOTICE](NOTICE) 中。第三方组件保留其各自的许可证。
标签:安全规则引擎, 请求拦截, 逆向工具