内容
[](https://www.apache.org/licenses/LICENSE-2.0)
# PcmHackMCP
PcmHackMCP 是 [LaurieWired/GhidraMCP](https://github.com/LaurieWired/GhidraMCP) 的一个分支(Apache-2.0许可):一个模型上下文协议(MCP)服务器和Ghidra插件,允许MCP客户端(如Claude)驱动Ghidra进行逆向工程。
它保留了所有的上游工具,并添加了一个功能:**服务器端的`run_python`工具**,该工具在Ghidra中执行任意Jython脚本,只需一次调用。批量工作 - 批量重命名、交叉引用扫描、批量注释、将数据类型应用于许多地址 - 在Ghidra内部运行为一个循环,而不是数千个单独的MCP/HTTP往返。只有打印的结果才会跨越网络。
为了与原始的GhidraMCP一起运行而不会发生冲突,每个标识符都被重新命名,默认端口也被更改:
| | 上游GhidraMCP | PcmHackMCP |
|---|---|---|
| MCP服务器名称 | `ghidra-mcp` | `pcmhack-mcp` |
| Ghidra模块/扩展 | `GhidraMCP` | `PcmHackMCP` |
| Java类 | `com.lauriewired.GhidraMCPPlugin` | `com.pcmhack.mcp.PcmHackMCPPlugin` |
| 默认HTTP端口 | 8080 | 8765 |
| MCP桥接脚本 | `bridge_mcp_ghidra.py` | `bridge_mcp_pcmhack.py` |
## 功能
- 上游GhidraMCP中的所有功能(反编译、列出/重命名函数和数据、导入/导出、交叉引用、字符串、设置原型等)。
- `run_python(code, timeout=600)` - 在当前程序上运行一个任意的Jython脚本。完整的GhidraScript环境可用(`currentProgram`,扁平API,`monitor`);自动打开和提交程序事务;捕获并返回`print(...)`和`println(...)`的输出。
## 安装
### 依赖项
- Ghidra 11.3.2
- Python 3.10+ 和 MCP SDK:`pip install "mcp>=1.2.0,<2" "requests>=2,<3"`
### Ghidra插件
1. 运行Ghidra
2. `文件` -> `安装扩展`
3. 点击 `+` 并选择 `PcmHackMCP-11.3.2.zip`
4. 重启Ghidra
5. 在 `文件` -> `配置` -> `开发者` 中启用 **PcmHackMCP**
6. 可选:更改 `编辑` -> `工具选项` -> `PcmHackMCP HTTP服务器` 中的端口(默认8765)
### MCP客户端(Claude Desktop示例)
`Claude` -> `设置` -> `开发者` -> `编辑配置`,然后:
```json
{
"mcpServers": {
"pcmhack": {
"command": "py",
"args": [
"-3",
"C:\\ABSOLUTE_PATH_TO\\bridge_mcp_pcmhack.py",
"--ghidra-server",
"http://127.0.0.1:8765/"
]
}
}
}
```
主机/端口默认为 `127.0.0.1:8765`,如果未设置。
### Claude 代码
```
claude mcp add pcmhack -- py -3 "C:\ABSOLUTE_PATH_TO\bridge_mcp_pcmhack.py"
```
## run_python 示例
```
curl -s -X POST http://127.0.0.1:8765/run_python --data-binary @- <<'PY'
count = 0
for f in currentProgram.getFunctionManager().getFunctions(True):
if f.getName().startswith("FUN_"):
count += 1
print("auto-named functions:", count)
PY
```
脚本在Ghidra中运行并返回其打印的输出。
> 安全:嵌入式HTTP服务器绑定到所有接口,`run_python`在您的Ghidra会话中执行任意代码。请仅在受信任的网络上运行。
## Claude 代码技能
一个Claude代码技能随此仓库一起提供,位于[`.claude/skills/pcmhack-mcp/SKILL.md`](.claude/skills/pcmhack-mcp/SKILL.md)。它捕获了编写良好的`run_python`负载的纪律:整个脚本模型、以JSON打印结果、自动(在错误时提交)事务以及Jython 2.7陷阱,当您使用`run_python`时,它会自动加载。
## 从源代码构建
不需要Maven(它是一个单独的文件)。使用JDK 17-21:
1. 从您的Ghidra安装中复制这些JAR文件到 `lib/`:
- `Base.jar`, `Decompiler.jar`, `Docking.jar`, `Generic.jar`, `Project.jar`, `SoftwareModeling.jar`, `Utility.jar`, `Gui.jar`
2. 编译和打包:
```
javac --release 17 -cp "lib/*" -d build/classes src/main/java/com/pcmhack/mcp/PcmHackMCPPlugin.java
jar --create --file target/PcmHackMCP.jar --manifest src/main/resources/META-INF/MANIFEST.MF -C build/classes .
```
3. 搭建一个扩展文件夹 `target/ext/PcmHackMCP/`,包含 `extension.properties`、`Module.manifest` 和 `lib/PcmHackMCP.jar`,然后使用 `jar` 工具压缩 **with the `jar` tool**:
```
jar --create --file target/PcmHackMCP-11.3.2.zip -C target/ext PcmHackMCP
```
不要使用PowerShell `Compress-Archive`或.NET `ZipFile.CreateFromDirectory`压缩 - 在Windows PowerShell 5.1上,两者都写入**反斜杠** zip条目路径,Ghidra的安装程序拒绝(“扩展安装出错”)。`jar`工具写入正斜杠路径和目录条目,Ghidra接受。
或者,如果您已安装Maven:`mvn clean package assembly:single`。
## 致谢
PcmHackMCP forked from [GhidraMCP](https://github.com/LaurieWired/GhidraMCP) by LaurieWired. Licensed under Apache-2.0; see [LICENSE](LICENSE).