Godot RE Tools 实战:一条命令把发行版 Godot 游戏还原成可编辑源码
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
Godot RE Tools(项目代号 gdsdecomp)是一套 Godot 逆向工程工具,能从发行版的 APK、PCK 或 EXE 中把整个项目还原成可编辑的源码:GDScript 脚本反编译回.gd,二进制资源和场景转回文本格式,并重建project.godot与插件配置。适合丢了源码想续作的项目开发者、做游戏安全审计的研究人员,以及想翻新老 Godot 项目的人。
🎯 它解决了什么问题
游戏发出去之后,你手里只剩下打包文件和一堆.gdc字节码、二进制.res场景,import 过的资源还带着哈希路径——想改一行逻辑都做不到。逆向流程要自己提取、解密、反编译、修复引用,繁琐且容易出错。Godot RE Tools 把这些步骤压进一条--recover命令,一次完成全项目恢复。
⚡ 快速上手:从 PCK 到可编辑项目只需一条命令
Windows 用户可以用 Scoop 安装,或者直接下载 release 里的预编译版,拿到gdre_tools可执行文件即可。恢复一个未加密的项目:
gdre_tools --headless --recover=game.pck --output=recovered加密项目加上 64 位十六进制密钥(即 32 字节 key 的 hex 串):
gdre_tools --headless --recover=game.apk \ --key=000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F \ --output=recoveredGUI 用户更简单:在"RE Tools"菜单选Recover project...,或者直接把 PCK/EXE 拖进窗口即可。
📦 核心能力拆解
多版本字节码反编译:老项目也能还原
字节码解析器位于 bytecode/,从 Godot 1.0 到 4.5 的每个字节码版本都有对应实现(版本对照见 BYTECODE_HISTORY.md)。工具会自动识别项目用的引擎版本,匹配失败时用--force-bytecode-version=4.3.0手动指定。这也是"支持 Godot 2.x、3.x、4.x"的关键——老项目不是靠一套解析器硬扛,而是逐版本适配。
加密项目怎么解:标准加密开箱即用
标准 AES-256-CFB 加密只靠--key参数就能解开。游戏用了自研加密方案时,可以写一个继承CustomDecryptor的 GDScript 脚本,实现_parse_and_decrypt()接管解密流程(完整写法参考 docs/custom_decryptors.md):
func _parse_and_decrypt(file: FileAccess, key: PackedByteArray, non_pack_file: bool) -> Dictionary: # 按游戏实际的加密格式读文件头和数据 # 用 crypto 模块里的上下文解密,校验 MD5 后返回 return {"error": OK, "length": len, "data": decrypted}脚本通过--custom-decryption-script参数或 GUI 里的密钥设置界面加载,加密上下文实现在 crypto/ 目录。
PCK 文件全家桶:提取、创建、打补丁三合一
除了--extract纯提取和--list-files看内容,还能反向操作:--pck-create从目录打包出新 PCK,--pck-patch往 PCK 里替换文件,配合--patch-translations可以批量修补翻译。实现都在 utility/ 下的 pck_creator、pck_dumper 等模块。
🔄 一个真实工作流:恢复加密的 AsteroidDodge
准备:拿到游戏的AsteroidDodge.apk和从二进制里提取的 32 字节密钥,转成 64 位 hex 串。
执行:跑--recover并带上--key,指定输出目录。工具会依次读取 PCK 结构、反编译全部脚本、转换 import 过的资源。
验证:恢复结束弹出报告窗口,先看Decompiled scripts和Failed scripts的数量——Failed: 0说明脚本全部还原成功;再检查Not converted列出的文件(未实现转换支持的资源会被原样导出,不影响主体恢复)。
修复:报告顶部会提示"Use Godot editor version X to edit the project"——打开项目务必用报告里检测到的那个引擎版本,很多"资源打不开"其实只是版本不匹配。
⚠️ 容易踩的坑与应对
现象:恢复出来一堆打不开的脚本,或反编译报错。原因:字节码版本识别偏差(游戏可能用修改过的引擎)。解法:用
--list-bytecode-versions看可用列表,再用--force-bytecode-version指定正确版本。现象:MD5 校验失败,文件标成 Broken。原因:密钥不对、文件被二次修改,或游戏改了校验逻辑。解法:非关键文件加
--ignore-checksum-errors跳过,或--skip-checksum-check直接不校验。现象:
--include按路径匹配,想要的文件没被恢复。原因:glob 只能匹配 PCK 里实际存在的文件(比如.gdc),匹配不到源文件路径.gd。解法:按打包后的文件名写通配符,*.gdc会被自动当递归模式处理。现象:恢复的项目一打开满屏红色 import 错误。原因:游戏用的是修改版引擎,而检测尚未覆盖这种场景(恢复报告里有提示)。解法:按报告建议,用游戏自带的二进制作为导出模板打开项目。
🔌 怎么扩展:加新字节码版本或解密方案
两个扩展点都有现成入口:新字节码格式用--load-custom-bytecode加载 JSON 定义,不必改代码;非标准加密走CustomDecryptor脚本。资源转换逻辑在 exporters/ 目录,想支持新资源类型可以照着现有导出器加;批量反编译、编译(--compile)能力也独立可用,不依赖完整恢复流程。
适合谁、什么时候该换方案
GDScript 项目、丢了源码或需要安全审计的场景,它是目前比较省事的完整方案。边界说清楚:GDNative/GDExtension 脚本、C# 代码和 2.x 的 3D 模型(dae、fbx、glb)目前无法转换,会原样导出。如果你的项目重度依赖这些,只能拿它做资源提取和脚本反编译这一半的工作。
【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考