如何解包 Godot 自包含 exe(以《多肉小憩》为例)
本文记录2026-09-11解包 Steam 游戏《多肉小憩》(Succulent Break)的实际做法。

渲染中...
在解包 Godot 游戏时,不少开发者会将引擎与资源打包成单个 `.exe` 文件(自包含 / Self-contained)。这种打包方式并没有对资源加密,只是把游戏的 `.pck` 资源包**拼接到了 EXE 可执行文件的末尾**。
本文将以 Steam 游戏《多肉小憩》(程序名 `succulent-break.exe`)为例,用最直观的操作步骤,教你一步步手动将 `.pck` 截取出来并还原为工程。
## 准备工具
| **工具名称** | **作用** | **获取方式** |
| ------------------------- | -------------------------------------- | ------------------------------ |
| **010 Editor** 或 **HxD** | 十六进制编辑器,用于定位和裁剪数据 | 免费工具(HxD 官方可直接下载) |
| **GDRE Tools** | Godot 专用的逆向工程与代码还原工具 | GitHub 开源免费下载 |
| **Python 3.x** *(可选)* | 脚本自动化截取(不想手动切文件的备选) | 官方 Python 运行环境 |
## 第一步:用十六进制编辑器定位 PCK 文件头
为什么说 PCK 是内嵌在末尾的?因为 Godot 引擎的标准 PCK 文件头都以 ASCII 字符串 **`GDPC`**(Hex 值:`47 44 50 43`)开头。
1. 打开 **HxD** 或 **010 Editor**。
2. 将 `succulent-break.exe` 拖入编辑器中。
3. 按下快捷键 `Ctrl + F` 打开搜索窗口:
- **数据类型**:选择 **十六进制值(Hex-values)** 或 **文本(Text/ASCII)**。
- **搜索内容**:输入 `47 44 50 43`(或文本 `GDPC`)。
- **搜索方向**:选择“向前”或“全部搜索”。
4. **定位关键点**:
- 搜索结果会定位到文件后半段的某处(例如 Hex 偏移量为 `0x00A12340`)。
- 检查 `47 44 50 43` 所在的整行:这之前的十六进制字节属于 Godot 引擎自身的 PE 程序主体,**从 `47`(即字符 G)开始的字节,才是真实的 `.pck` 数据起点**。
## 第二步:将内嵌的 .pck 资源包提取出来
找到起点后,你需要将从 `47 44 50 43` 开头一直到 `succulent-break.exe` 文件最末尾的所有字节导出为一个独立的 `.pck` 文件。
### 方式 A:使用 HxD / 010 Editor 手动截取(推荐)
1. 在 HxD 中,将光标定位在 `47 44 50 43` 的 **`47`** 前面。
2. 按下快捷键 `Shift + Ctrl + End`(或按住 Shift 并滚动到最底部),**选中从 `47` 开始直到文件最后一字节的所有数据**。
3. 按 `Ctrl + C` 复制所选数据。
4. 按 `Ctrl + N` 新建一个空白文件,按 `Ctrl + V` 将数据粘贴进去。
5. 将新建的文件另存为 **`succulent_data.pck`**。
### 方式 B:使用 Python 脚本一秒自动裁剪(防手抖)
如果你不想手动在编辑器里选几十兆的数据,可以在 `succulent-break.exe` 所在目录下新建一个脚本 `extract.py`,粘贴并运行以下代码:
```Python
# extract.py - 自动寻找 GDPC 标记并截取 PCK
with open("succulent-break.exe", "rb") as f:
content = f.read()
# 查找 Godot PCK 包的起始签名 GDPC
target = b"GDPC"
offset = content.find(target)
if offset != -1:
print(f"[+] 成功找到 PCK 起始位置!HEX 偏移量: {hex(offset)}")
pck_data = content[offset:]
with open("succulent_data.pck", "wb") as f_out:
f_out.write(pck_data)
print("[+] 已成功导出为 succulent_data.pck 文件!")
else:
print("[-] 未找到 GDPC 标志,请检查该游戏是否开启了自定义加密。")
```
## 第三步:反编译与资源提取(使用 GDRE Tools)
拿到裁剪出来的 `succulent_data.pck` 后,就可以使用专用的工具还原游戏工程和源码了。
**1.打开 GDRE Tools 工具:**
运行 `GDRE Tools`(如 `Godot RE Tools.exe`),在主界面菜单栏点击 **`RE Tools` -> `Recover project`**。
**2.选择我们截取出来的 PCK 文件:**
在文件选择框中,找到并选择上一步导出的 **`succulent_data.pck`** 文件。
**3.自动解析与格式确认:**
工具会自动读取 `GDPC` 头后的版本参数(例如解析出 Godot 引擎版本为 4.x / 3.x)。
**4.一键导出工程文件:**
- 在弹出的对话框中选择一个空的本地文件夹(如 `D:/Succulent_Project`)。
- 点击 **`Extract` / `Full Recovery`**。
- 工具会自动将 GDScript 字节码反编译回可视化的 `.gd` 脚本,同时释放 `.png` 贴图、`.wav`/`.ogg` 音频以及 `.tscn` 场景文件。
## 补充:如何验证提取出的 PCK 是否完整?
如果你在用 GDRE Tools 打开 `succulent_data.pck` 时报错“Corrupted file”或“Invalid header”,通常是因为截取时漏掉或多选了字节:
1. **检查开头**:用十六进制编辑器打开导出的 `succulent_data.pck`,确保**第 00 字节必须是 `47` (G)**,不能有多余的 `00` 或其他字节。
2. **检查结尾**:内嵌 PCK 的结束位置就是整个 EXE 文件的 EOF(文件末尾),不要漏掉尾部数据。END
评论
登录后查看和发表评论
前往登录