gdsdecompGodot 逆向工程工具把游戏 APK 与 PCK 恢复成可编辑工程【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecompgdsdecompGodot RE Tools是一个 Godot 逆向工程模块输入游戏的 APK、PCK 或内嵌 PCK 的 EXE输出反编译的 GDScript 源码、还原为原始格式的导入资源和重建的工程目录覆盖 Godot 2.x 到 4.x。 没有它时的三个困境只剩字节码没有源码。Godot 4.3 起项目可以带编译后的.gdc脚本发布市售 APK 里的 PCK 通常只有字节码而没有.gd。开发者停止维护或源码遗失后游戏逻辑完全黑箱——用 Godot 编辑器打开也只能看到编译脚本无法编辑。版本混乱。GDScript 字节码格式在 2.x、3.x、4.x 各代之间多次变更连4.x内部就至少有两代字节码版本100/1013.1 与 3.2 之间也只是差一个 token 集合。手工读字节码需要精确匹配引擎某个具体 commit 的格式定义这超出了手工分析的能力需要工具把所有历史版本的定义备齐。加密与魔改。商业游戏普遍对 PCK 做 AES-256-CFB 加密部分游戏还会对密钥或加密流程动手脚。没有正确密钥时普通提取工具连读出文件这一步都过不去即便拿到密钥加密方案被改过时照样解不出来。gdsdecomp 的定位就是覆盖这三个环节加载 → 反编译 → 恢复。项目恢复之外它还能创建与修补 PCK改完游戏后产出一份新的 PCK 文件。 工作原理一条从 APK 到可编辑工程的流水线以完整恢复--recover为例数据依次经过五层1. 输入层。一组文件访问实现处理不同输入源utility/file_access_apk.cpp 解析 APK 并在其中定位 PCKutility/file_access_patched_gdre.cpp 处理把 PCK 嵌入二进制内部的 EXE普通 PCK 直接读取。--recover也接受已经解出来的工程目录。2. 解密层。crypto/ 实现 Godot 标准 AES-256-CFB 解密文件头是魔数 MD5 长度 IV的固定结构解密后校验 MD5。非标准加密有专门扩展点写一个继承CustomDecryptor、实现_parse_and_decrypt()的 GDScript 脚本通过--custom-decryption-script传入据 docs/custom_decryptors.md 所述脚本内部可在 AES / Camellia / Aria 三种解密上下文之间选择。3. 兼容层。compat/ 负责跨版本资源格式差异。ResourceCompatLoader 同时支持二进制.res/.scn、3.x 的.obdb与文本.tres/.tscn三种资源存储方式Variant 的编解码也做了版本兼容3.x 的资源因此能在 4.x 引擎里被读取。4. 反编译层。bytecode/ 是项目的核心资产。每个字节码版本对应一组以引擎 commit 哈希命名的 .cpp/.h 文件——bytecode_1a36141是 3.1 的收尾版本bytecode_77af6ca是 4.3 首个带编译模式的版本。全部定义由 bytecode_generator.py 从一张 commit 对照表生成完整对照表见 BYTECODE_HISTORY.md。反编译器按 commit 哈希或版本号选择匹配的定义无需人工辨识。5. 输出层。exporters/ 按类型分发gdscript_exporter 把.gdc反编译回.gd贴图、ogg 音频、字体、spine 各有专用导出器C# 项目由 godot-mono-decomp/ 完成把 DLL 反编译回.cs以 .NET 原生 AOT 库形式交付。helpers/ 里的一组特性探测脚本has_*.gd则用于给引擎版本打指纹恢复报告里会直接告诉该用哪个编辑器版本打开工程。 动手实战三种入口完成一次恢复环境准备获取途径有三条Windows 用 Scoop 安装从项目 releases 页取最新构建自编译仓库放到 Godot 的modules/gdsdecomp下需要 rustup 与 .NET 10 SDK且 README 要求使用项目方指定的 Godot fork 分支见 README 的 Requirements 一节scoop bucket add games scoop install gdsdecompgit clone https://gitcode.com/GitHub_Trending/gd/gdsdecomp modules/gdsdecomp构建时 SCons 会自动把 patches/ 下的补丁应用到引擎源码把工具挂进引擎的命令行解析流程该过程幂等重新执行 scons 不会重复打补丁。图形界面拖进去就恢复运行独立版后在 RE Tools 菜单点 Recover project...或者直接把 PCK/EXE 拖进窗口。随后弹出 PCK explorer勾选要处理的文件选择 Full Recovery完整恢复含反编译与资源还原或 Extract only仅原样提取设置输出目录后点 Extract。命令行适合批处理与服务器环境完整恢复一条命令gdre_tools --headless --recovergame.pck --outputrecovered--output缺省时输出到名字_extracted目录加--scripts-only只提取脚本先做 PCK 文件清单预览、不改动任何内容gdre_tools --headless --list-filesgame.pck手头已有.gdc文件、只想做 GDScript 反编译时gdre_tools --headless --decompilescripts/*.gdc --outputdecompiled字节码版本默认自动识别不准时补--bytecode4.3.0或 commit 哈希。源码编译出的二进制也可以独立调用README 以 Linux 构建为例bin/godot.linuxbsd.template_debug.x86_64.llvm --headless \ --pathmodules/gdsdecomp/standalone --recovergame.pck 进阶玩法加密 PCK 的解密。场景拿到一个加密的 PCK 和它的密钥。gdre_tools --headless --recoverencrypted.pck --key64位十六进制密钥解密发生在文件读取层后续恢复流程与明文完全一致。密钥不生效时据项目文档所述多数情况是游戏代码在加载后对密钥做了变换此时写自定义解密脚本用--custom-decryption-script加载而不是反复怀疑工具。应对特殊引擎构建。场景游戏使用魔改过的 Godot反编译报错或产出乱码。先用--dump-bytecode-versionsDIR把内置定义导出为 JSON以它为模板修正偏移与 token 集合再用--load-custom-bytecodeJSON加载。效果反编译器改用你提供的定义不再受限于工具内置的版本集。修补游戏并写回 PCK。场景恢复工程后改了脚本要写回原 PCK 产出新版本。gdre_tools --headless --pck-patchoriginal.pck \ --patch-file./new.gdres://scripts/new.gd --outputpatched.pck--patch-file可重复一行一个文件左侧本地路径、右侧 PCK 内res://路径配合--include/--exclude控制原 PCK 中保留哪些文件--embed可把结果写进 EXE。只改翻译时用--patch-translationsCSVSRC_PATH与--pck-patch组合--locales指定语言。反向操作是--pck-createDIR从目录构建全新 PCK需指定--pck-version0/1/2与--pck-engine-version。文本与二进制资源互转。场景只想查看某个.scn/.res的内容不做完整项目恢复。gdre_tools --headless --bin-to-txtscene.scn--txt-to-bin为反向转换两者都可重复传参批处理多个文件。 排错与调优Q恢复完报告提示 Use Godot editor version 3.4 to edit the projectA这是工具检测到的原游戏引擎版本用同版本编辑器打开工程即可。若游戏用的是自定义引擎构建报告会注明该项检测尚未实现——此时改用游戏原始二进制作为导出模板来打开工程。Q解密总是失败A据 docs/custom_decryptors.md绝大多数解密问题出在密钥本身——游戏可能在加载密钥后做了置换直接从二进制提取的密钥未必可用。先确认密钥再用反汇编器核对加密方案是否非标准最后才考虑自定义解密脚本。Q出现 MD5 校验错误A说明文件与头部记录不符通常是因为文件被修补过或 PCK 损坏。--ignore-checksum-errors容忍错误继续提取--skip-checksum-check完全跳过校验数据可信度要求高时不要跳过。Q反编译产物残缺或 token 不对A字节码版本没匹配上。先用--list-bytecode-versions查看可用版本恢复流程用--force-bytecode-version版本号或commit哈希独立反编译用--bytecode。注意 commit 哈希比版本号更精确——同一版本号可能横跨多个字节码修订如 4.4 与 4.5 同为 101 版但 token 集合不同。Q报告里一批文件标着 Not convertedA已知限制2.x 模型dae、fbx、glb等与 GDNative/GDExtension 脚本暂不支持转换见 README 的 Limitations 一节这些文件会以二进制形式落盘但不会还原成源码。规模与速度建议大工程先--list-files估算体量再用--include缩小范围如只恢复脚本--includeres://**/*.gdc或--scripts-only快速拿脚本include/exclude 的 glob 必须以res://或user://为根带通配符但不含目录的写法如*.gdc会自动视为递归匹配 生态与参与插件系统独立版 GUI 内置 plugin_manager/支持 GitHub、GitLab、Codeberg 等多个代码托管源插件版本有本地缓存与静态版本缓存prepop_cache.py加速。版本跟踪项目以加表再生成的方式跟进引擎——每个新的字节码修订记入 commit 表由 bytecode_generator.py 重新生成全部定义BYTECODE_HISTORY.md 是这张表的人类可读索引。新引擎版本发布后这里是第一落点。测试tests/ 内含跨 2.x/3.x/4.x 的回归夹具.gdc字节码、.res资源、完整测试工程helpers/ 的探测脚本同时充当引擎特性指纹与测试样本。社区据项目文档所述作者提供 Discord 服务器作为支持与讨论渠道仓库采用 MIT 许可贡献可以从新增一个字节码版本或新增一个导出器这类模块级工作切入。这套工具本质上是把 Godot 的格式知识——逐 commit、逐格式——固化成可维护的代码。只要引擎继续演进、游戏继续以二进制形态发布这份格式知识库加反编译流水线的长期价值就不会消失。【免费下载链接】gdsdecompGodot reverse engineering tools项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考