# ResourceHacker MCP 服务器

基于 Model Context Protocol (MCP) 的 ResourceHacker 工具服务器，可通过 Claude、codex等使用自然语言操作 Windows PE 文件资源。

## 功能特性

通过 MCP 协议提供 ResourceHacker 的命令行功能访问：

- **提取资源** - 从 PE 文件（exe、dll 等）中提取图标、位图、对话框、菜单等资源
- **列出资源** - 查看 PE 文件中包含的所有资源列表，无需提取文件
- **添加资源** - 向可执行文件添加新资源
- **删除资源** - 从 PE 文件中删除资源
- **修改资源** - 更新现有资源
- **编译资源脚本** - 将 .rc 资源脚本编译为 .res 二进制文件
- **更改语言** - 修改所有资源的语言 ID
- **执行脚本** - 运行包含多个命令的 ResourceHacker 脚本
- **获取帮助** - 显示 ResourceHacker 命令行帮助信息

## 安装配置

### 前置要求

- Windows 操作系统
- Node.js 18 或更高版本
- Claude code、codx等支持mcp的应用
- [ResourceHacker](http://www.angusj.com/resourcehacker/)

### 步骤 1：安装依赖

```bash
git clone https://github.com/Valerian7/ResourceHacker-mcp.git
cd ResourceHacker-mcp
npm install
```

### 步骤 2：配置 MCP

Claude添加以下配置：

```json
{
  "mcpServers": {
    "resource-hacker": {
      "command": "node",
      "args": [
        "ResourceHacker-mcp_PATH\\ResourceHacker-mcp\\index.js"
      ],
      "env": {
        "RESOURCE_HACKER_PATH": "RESOURCE_HACKER_PATH\\ResourceHacker.exe"
      }
    }
  }
}
```

Codex添加以下配置：

```toml
[mcp_servers.resource_hacker_mcp]
type = "stdio"
command = "node"
args = ['ResourceHacker-mcp_PATH\\ResourceHacker-mcp\\index.js']

[mcp_servers.resource_hacker_mcp.env]
RESOURCE_HACKER_PATH = 'RESOURCE_HACKER_PATH\\ResourceHacker.exe'
```

- 将路径替换为你的实际安装位置
- `ResourceHacker-mcp_PATH` 指向 ResourceHacker-mcp 的完整路径
- `RESOURCE_HACKER_PATH` 指向 ResourceHacker.exe 的完整路径

## 快速使用示例
在Claude、codex中输入
```
调用ResourceHacker-mcp工具汉化procexp64.exe，注意窗口层级
```
汉化效果对比：

<img width="1932" height="1099" alt="image" src="https://github.com/user-attachments/assets/b0083386-7eb3-4fdf-b3ac-fe54018a894d" />

<img width="1898" height="1098" alt="image" src="https://github.com/user-attachments/assets/05133b72-6cbb-4f91-85db-37ce36a6aba7" />


## 完整功能

### 1. list_resources - 列出资源

查看 PE 文件中包含的所有资源列表，无需提取文件。此命令可以避免产生大量临时文件。

**参数：**
- `input_file` (必需)：输入 PE 文件的路径

**使用示例：**
```
列出 myapp.exe 中的所有资源
```

### 2. extract_resource - 提取资源

从 PE 文件或资源文件中提取资源。

**参数：**
- `input_file` (必需)：输入 PE 文件的路径
- `output_path` (必需)：输出文件或文件夹路径
- `resource_mask`：资源掩码格式 `类型,名称,语言`（默认：`,,`）
- `log_file`：日志文件路径或 `CONSOLE`（默认：`CONSOLE`）

**使用示例：**
```
从 notepad.exe 中提取所有图标到 icons 文件夹
```

### 3. add_resource - 添加资源

向 PE 文件添加新资源。

**参数：**
- `input_file` (必需)：要修改的 PE 文件路径
- `output_file` (必需)：输出文件路径
- `resource_file` (必需)：要添加的资源文件路径
- `resource_mask`：资源掩码（默认：`,,`）
- `mode`：添加模式 - `add`（存在则失败）、`addoverwrite`（覆盖）、`addskip`（跳过）
- `log_file`：日志文件路径

**使用示例：**
```
用 newicon.ico 替换 myapp.exe 的主图标
```

### 4. delete_resource - 删除资源

从 PE 文件中删除资源。

**参数：**
- `input_file` (必需)：PE 文件路径
- `output_file` (必需)：输出文件路径
- `resource_mask` (必需)：标识要删除资源的掩码
- `log_file`：日志文件路径

### 5. modify_resource - 修改资源

修改 PE 文件中的现有资源。

**参数：**
- `input_file` (必需)：PE 文件路径
- `output_file` (必需)：输出文件路径
- `resource_file` (必需)：新资源文件路径
- `resource_mask`：资源掩码
- `log_file`：日志文件路径

### 6. compile_rc - 编译资源脚本

将资源脚本（.rc）编译为二进制格式（.res）。

**参数：**
- `input_rc` (必需)：.rc 文件路径
- `output_res` (必需)：输出 .res 文件路径
- `log_file`：日志文件路径

**使用示例：**
```
编译 resources.rc 为 resources.res
```

### 7. change_language - 更改语言

更改 PE 文件中所有资源的语言。

**参数：**
- `input_file` (必需)：PE 文件路径
- `output_file` (必需)：输出文件路径
- `language_id` (必需)：语言 ID 数字
- `log_file`：日志文件路径

**常用语言 ID：**
- 1033：英语（美国）
- 2052：中文（简体）
- 1028：中文（繁体）
- 1049：俄语
- 1031：德语
- 1036：法语
- 1041：日语
- 1042：韩语

**使用示例：**
```
将 myapp.exe 的所有资源改为简体中文
```

### 8. run_script - 运行脚本

执行包含多个命令的 ResourceHacker 脚本文件。

**参数：**
- `script_file` (必需)：脚本文件路径

### 9. get_help - 获取帮助

获取 ResourceHacker 命令行帮助。

**参数：**
- `topic`：帮助主题 - `general`、`commandline` 或 `script`

## 资源掩码格式

资源掩码格式：`类型,名称,语言`

- **类型**：资源类型（如 `ICON`、`BITMAP`、`DIALOG`、`MENU`、`STRINGTABLE`、`ICONGROUP`）
- **名称**：资源名称或 ID
- **语言**：语言 ID（0 表示语言中性）

**示例：**
- `ICON,,` - 所有图标，任意名称，任意语言
- `BITMAP,128,0` - ID 为 128 的位图，语言中性
- `ICONGROUP,MAINICON,` - 名为 MAINICON 的图标组，任意语言
- `,,1033` - 所有英语（美国）资源


## 技术细节

- **语言：** JavaScript (ES Modules)
- **运行时：** Node.js 18+
- **协议：** Model Context Protocol (MCP)
- **SDK：** @modelcontextprotocol/sdk v1.0.4
- **平台：** 仅限 Windows（需要 ResourceHacker.exe）

## 常见问题

### MCP 服务器未在 Claude 中显示

1. 检查配置文件路径是否正确并使用双反斜杠
2. 验证 Node.js 已安装：运行 `node --version`
3. 确保 `npm install` 已成功完成
4. 完全重启 Claude Desktop（不仅是关闭窗口）
5. 检查 Claude Desktop 日志是否有错误

### 路径问题

确保配置文件中的路径是绝对路径并使用双反斜杠：
- ✅ 正确：`"D:\\Tools\\resource_hacker\\mcp_server\\index.js"`
- ❌ 错误：`"D:\Tools\resource_hacker\mcp_server\index.js"`
- ❌ 错误：`"./index.js"` 或 `"index.js"`

### 找不到 ResourceHacker.exe

确保在配置中正确设置了 `RESOURCE_HACKER_PATH` 环境变量，指向 ResourceHacker.exe 的完整路径。

### 权限错误

修改系统文件时需要适当的权限，尤其是在修改系统目录中的文件时。

## 限制说明

- 需要 Windows 操作系统
- ResourceHacker.exe 必须可访问
- 无法修改"打包"或"压缩"的可执行文件
- 某些操作需要对目标文件的写权限

## 参考链接

- [ResourceHacker 官方网站](http://www.angusj.com/resourcehacker/)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [Windows 资源类型文档](https://learn.microsoft.com/zh-cn/windows/win32/menurc/resource-types)

## 更新日志

### v1.1.0
- 新增 `list_resources` 工具，无需提取即可查看资源列表，减少文件混乱
- 优化代码结构，增加临时文件清理机制
- 修复 `parseRcFile` 解析逻辑

### v1.0.0
- 初始版本
- 实现 8 个 MCP 工具
- 支持可配置的 ResourceHacker.exe 路径
- 完整的错误处理和日志记录

