最近在研究给一些小众同人游戏解包扒素材。
Godot 这款开源引擎打包导出的游戏,其底层 data.pck 数据包虽然很容易被第三方工具解包,但解包出来的资源文件并不能直接双击查看。因为 Godot 引擎在打包时为了加载效率,对原始文件进行了强行重命名,并在文件二进制头部添加了专有的索引脏数据,破坏了原本的魔数 (Magic Number)。
为了批量提取出原汁原味的图片和音频,我写了个 Python 还原修复脚本,针对不同的底层后缀进行二进制截断与格式逆转。
📦 第一步:提取 .pck 底层文件 使用现成的开源解包器:🔗 GDRETools (下载通道)
📦 第二步:运行我写的 pck_assets_helper.py 修复脚本进行洗白
(注意:由于 Godot 自带的 GDScript 并不像 Unity 的 C# 那样全能,且目前不支持直接视频流导入,部分开发者会额外挂载 Mono 模块进行开发。解包后如果有 .mono 文件夹,那么 .import 里存放的就是核心脚本;如果只是纯粹的 GDScript 项目,那么 /.godot/imported/ 目录下就包含了全部加密的媒体资源。)
目前研究出的各类文件修复策略 (脚本已内置):
.ctex(纹理贴图) -> 原始文件可能是.bmp/.dds/.ktx/.png等。- 策略:引擎在打包时会自动转码成
WebP,脚本会强制删除二进制头部RIFF标识符前面的脏内容,并在末尾追加.webp后缀即可完美复原。
- 策略:引擎在打包时会自动转码成
.stex(精灵贴图) -> 原始文件通常是.jpg/.png。- 策略:强制寻找并删除文件头部
‰PNG标识符前面的内容。
- 策略:强制寻找并删除文件头部
.oggstr(背景音乐) -> 原始文件是.ogg。- 策略:寻找并删除文件头部
OggS标识符前面的内容。
- 策略:寻找并删除文件头部
.mp3str(音效) -> 原始文件是.mp3。- 策略:没有魔数加密,不需要处理,直接改后缀即可。
.sample/.s3tc.stex/.mesh/.fontdata-> 原始音频采样、加密纹理模型与字体。- 策略:这部分元数据被引擎进行了深度破坏与重构加密,暂时没有找到无损还原的办法。