一组内分为三块,每块4字符,转换成10进制,分别乘100、10、1再相加,之后与33异或,拼接得到result
2026/7/20 16:03:57 网站建设 项目流程

继续学习python

a = “000010000010000001101001000010000001000001100110000010000010000001101000000001100110000010010000000001101001000000011001000000011000000000100000000001100100000001100111000001110001000000100011000000010010000001110001000000100010000000100010000000011000000000010010000000100001000000011000000001100111000001100100000000010010000001100100000000010110000000010110000000010111000000010010000000010110000000011000000001101001000000100101000000100010000001101001000001100100000000011000000001101000000000100011000000010111000000010111000010010010”

result = “”
for i in range(0, len(a), 12):
b = a[i:i+4]
c = a[i+4:i+8]
d = a[i+8:i+12]

e = int(b, 2) * 100 + int(c, 2) * 10 + int(d, 2) result += chr(e ^ 33)

print(result)
其实我有个想法,可不可以修改他的源码,把游戏成功条件降低,让他自己吐出flag呢

gdre_tools.exe --headless --compile=‘E:\cod_ctf_nxgodot\gdre_recover\main.gd’ --bytecode=‘4.5.0’ --output=‘E:\cod_ctf_nxgodot\repack_build’
gdre_tools.exe --headless --pck-patch=‘E:\cod_ctf_nxgodot\NXgodot\GD1.pck’ --patch-file=‘E:\cod_ctf_nxgodot\repack_build\main.gdc=res://main.gdc’ --output=‘E:\cod_ctf_nxgodot\NXgodot\GD1_patched.pck’
image-20260702182211288

关于这道题,还有几个问题

1.pck文件,gdc文件,gd文件是什么

2.gdre_tools.exe --headless --compile=‘E:\cod_ctf_nxgodot\gdre_recover\main.gd’ --bytecode=‘4.5.0’ --output=‘E:\cod_ctf_nxgodot\repack_build’
gdre_tools.exe --headless --pck-patch=‘E:\cod_ctf_nxgodot\NXgodot\GD1.pck’ --patch-file=‘E:\cod_ctf_nxgodot\repack_build\main.gdc=res://main.gdc’ --output='E:\cod_ctf_nxgodot\NXgodot\GD1_patched.pck’这两个命令是干什么的

  1. pck、gdc、gd 分别是什么

gd

这是 Godot 的脚本源码。
类似 Python 风格,给场景节点写逻辑。
你恢复出来的 main.gd、player.gd 就是源码。
可以理解成:

gd = 人能直接读和改的脚本
gdc

这是 GDScript 编译后的字节码文件。
运行时 Godot 会加载它执行。
它不是原生机器码,但也不是源码,中间态。
CTF 里常见做法就是只给你 .gdc,不直接给 .gd。
可以理解成:

gdc = Godot 脚本的编译产物
pck

这是 Godot 的资源包/打包文件。
里面会装:
场景
贴图
音频
配置
脚本源码或脚本字节码
发布游戏时,Godot 常见结构就是:
game.exe
game.pck
可以理解成:

pck = 游戏资源总包
gd/gdc 往往都装在 pck 里
这题里关系就是:

main.gd 源码
↓ 编译
main.gdc 字节码
↓ 打包进
GD1.pck 资源包
↓ 被
GD1.exe 运行
2. 第一个命令是干什么的

你的第一个命令:

gdre_tools.exe --headless --compile=‘E:\cod_ctf_nxgodot\gdre_recover\main.gd’ --bytecode=‘4.5.0’ --output=‘E:\cod_ctf_nxgodot\repack_build’
作用是:

把你修改过的 main.gd
按 Godot 4.5 对应的字节码格式
编译回 main.gdc
输出到 E:\cod_ctf_nxgodot\repack_build
拆开看:

–headless
无界面 CLI 模式运行
–compile=‘…main.gd’
指定要编译哪个 GDScript 源码文件
–bytecode=‘4.5.0’
指定编译成哪一版 Godot 字节码
因为原题识别出来是 4.5.x,所以这里要对齐版本
否则新编译出来的 gdc 可能和原游戏不兼容
–output=‘…repack_build’
指定编译产物输出目录
所以这条命令本质上就是:

main.gd -> main.gdc
3. 第二个命令是干什么的

你的第二个命令:

gdre_tools.exe --headless --pck-patch=‘E:\cod_ctf_nxgodot\NXgodot\GD1.pck’ --patch-file=‘E:\cod_ctf_nxgodot\repack_build\main.gdc=res://main.gdc’ --output=‘E:\cod_ctf_nxgodot\NXgodot\GD1_patched.pck’
作用是:

以原始 GD1.pck 为基础
把里面原本的 res://main.gdc
替换成你刚编译出来的新 main.gdc
生成一个新的 patched 包 GD1_patched.pck
拆开看:

–pck-patch=‘…GD1.pck’
说明要 patch 的目标包是哪个
–patch-file=‘本地文件=包内路径’
左边:
E:\cod_ctf_nxgodot\repack_build\main.gdc
这是你本地新编译出来的文件
右边:
res://main.gdc
这是它在 Godot 项目里的逻辑路径
意思是“用左边这个文件替换包里原来的 res://main.gdc”
–output=‘…GD1_patched.pck’
把替换后的新包写到哪里
所以这条命令本质上就是:

新 main.gdc -> 替换进原始 GD1.pck

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询