gdsdecomp:Godot反编译与项目恢复,只剩PCK还能拿回工程吗
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
gdsdecomp(Godot RE Tools)是一款开源的Godot反编译与项目恢复工具。它把APK、PCK或EXE里的编译产物拆出来,将GDScript字节码还原为源码,并把导入过的资源转回原始格式,帮你拼回一个可以继续编辑的工程。
🧩 只剩APK或PCK,恢复流程其实只有三步
作为Godot项目恢复工具,它的完整恢复做四件事:反编译全部GDScript脚本、还原 project.godot、把导入资源转回原始格式、重建插件配置;你得到的就是一个目录结构完整的工程。入口就两个:菜单里的 "Recover project...",或者直接把 PCK/EXE 拖进主窗口。
在GUI里挑输入、挑模式
- 选输入:文件对话框里挑 PCK、APK 或嵌入式 EXE,
--extract式的纯提取和完整恢复用的是同一个入口 - 选模式:仅提取只把文件原样拆出来;完整恢复才会做脚本反编译和资源格式转换,抢救项目选后者
- 设置输出目录和密钥(有加密时),点确定开跑
用恢复报告判断成败
跑完它会弹出一份恢复报告,并落盘一个 log 文件。重点看四行:成功反编译的脚本数、失败的脚本数、成功转换的资源数、未转换的文件列表——报告末尾还会告诉你应该用哪个版本的 Godot 编辑器打开这份工程。
⌨️ 命令行批处理:批量反编译、PCK文件提取与回写
不想点界面时,gdre_tools --headless加主命令就能跑完同样的事,适合 CI 或一次处理几百个文件。常用主命令:
--recover=<PCK/EXE/APK>:完整项目恢复--extract=<PCK/EXE/APK>:只做 PCK 文件提取--decompile=<GDC>/--compile=<GD>:批量反编译或反向编译,glob 里用**递归--pck-create/--pck-patch:从目录重建 PCK,或把指定文件写回原包--bin-to-txt/--txt-to-bin:场景和资源文件在文本与二进制格式间互转
整包恢复一条命令就能跑:
gdre_tools --headless --recover=game.pck --output=recovered执行后recovered/下会出现拼好的工程,终端末尾打印和 GUI 相同的恢复报告。
只想要脚本的话,批量反编译加--bytecode指定版本即可:
gdre_tools --headless --decompile="**/*.gdc" --bytecode=4.3.0执行后.gdc同位置生成对应的.gd文件;版本号给错会直接报解析失败,而不是产出乱码。加密包加--key,大项目用--include/--exclude缩小范围,版本实在识别不了可用--force-bytecode-version指定 commit 哈希或版本号。
🧬 从v1到v101:GDScript字节码还原靠什么
GDScript字节码还原的精度完全取决于版本定义文件是否齐全:bytecode/目录里每对哈希命名的.cpp/.h就是一套对应版本字节码的解析器,合计覆盖 Godot 1.0 到 4.5 的全部发行版(字节码 v1~v101,共 59 个版本定义)。
它怎么知道该用哪套解析器?正常流程是自动检测;检测不出来时你手动给版本。版本的差异记录在 misc/bytecode_versions.json 里,逐版本列出了新增/删除的 token、函数变化,例如 4.5-dev 时期加入的TK_PERIOD_PERIOD_PERIOD和三目运算符相关的改动;想读人话版对照表可以看 BYTECODE_HISTORY.md,它按 1.x / 2.x / 3.x / 4.x 分支排列了每个字节码编号对应的提交与变更。helpers/目录则是一组最小探测脚本,靠"引擎里有没有某个语法"来反推版本,供自动检测调用。
🔐 加密包:先确认密钥,再考虑自定义解密
绝大多数解密失败是密钥不对,而不是方案不行——先确认手里拿到的是 64 位十六进制密钥,且游戏用的就是标准 AES-256-CFB 加密,别急着写脚本。
标准密钥路径
标准方案下密钥通过--key传入(GUI 里在 "Set Encryption Key" 菜单设置即可)。crypto/目录实现了标准的加解密上下文(AES、Camellia、Aria 等),你不需要关心块结构、MD5 校验这些细节,它们按"读 magic、读 md5/length/iv、解密、验 md5"的固定流程自动处理。
自定义解密脚本
游戏自己魔改了加密(比如换了密钥排列或自定义算法)时,就写一个 GDScript 脚本继承CustomDecryptor类、实现_parse_and_decrypt()方法,再用--custom-decryption-script传入路径。文件结构、加密流程的拆解和标准实现的参考代码(gdre_standard_encryption.gd)都写在 docs/custom_decryptors.md 里。注意文档明确说:拿密钥这件事它不帮忙。
📦 边界与坑:哪些资源转不了,从源码编译要什么
官方明确了两类尚未支持的转换:2.x 的模型文件(dae/fbx/glb 等)和 GDNative/GDExtension 脚本;除此之外都能转,转不了的会原样留在恢复报告里。
- 用和游戏原版一致的 Godot 版本打开恢复后的工程,报告里写明检测到的版本
- 从源码构建:把仓库克隆进 Godot 的
modules/目录并命名gdsdecomp,另需 rustup 和 dotnet 10 SDK;3.x 的构建支持已停更,但 3.x/2.x 项目的反编译能力保留
从源码构建的命令就一行克隆:
git clone https://gitcode.com/GitHub_Trending/gd/gdsdecomp执行后得到本地仓库,把它挪进modules/改名gdsdecomp,再按 Godot 的编译文档重编引擎即可;构建时 scons 会自动给main/main.cpp打幂等补丁以挂钩 CLI 参数解析。
📌 划重点
能救回多少,取决于两个变量:字节码版本匹不匹配、密钥对不对。
- 完整恢复 = 脚本反编译 + 还原 project.godot + 导入资源转回原始格式 + 插件配置重建,入口是 "Recover project..." 或拖拽文件
- 命令行形态是
gdre_tools --headless加主命令,批量反编译靠--decompile配--bytecode - 59 个版本的字节码定义都在
bytecode/目录,版本差异可查misc/bytecode_versions.json - 加密包先给 64 位十六进制密钥,非标准加密方案再写 CustomDecryptor 脚本
- 2.x 模型文件和 GDExtension 脚本暂未支持,动手前先翻一遍恢复报告
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考