一组内分为三块,每块4字符,转换成10进制,分别乘100、10、1再相加,之后与33异或,拼接得到result

📅 2026/7/21 18:29:14
一组内分为三块,每块4字符,转换成10进制,分别乘100、10、1再相加,之后与33异或,拼接得到result
继续学习pythona “000010000010000001101001000010000001000001100110000010000010000001101000000001100110000010010000000001101001000000011001000000011000000000100000000001100100000001100111000001110001000000100011000000010010000001110001000000100010000000100010000000011000000000010010000000100001000000011000000001100111000001100100000000010010000001100100000000010110000000010110000000010111000000010010000000010110000000011000000001101001000000100101000000100010000001101001000001100100000000011000000001101000000000100011000000010111000000010111000010010010”result “”for i in range(0, len(a), 12):b a[i:i4]c a[i4:i8]d a[i8:i12]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.gdcres://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.gdcres://main.gdc’ --outputE:\cod_ctf_nxgodot\NXgodot\GD1_patched.pck’这两个命令是干什么的pck、gdc、gd 分别是什么gd这是 Godot 的脚本源码。类似 Python 风格给场景节点写逻辑。你恢复出来的 main.gd、player.gd 就是源码。可以理解成gd 人能直接读和改的脚本gdc这是 GDScript 编译后的字节码文件。运行时 Godot 会加载它执行。它不是原生机器码但也不是源码中间态。CTF 里常见做法就是只给你 .gdc不直接给 .gd。可以理解成gdc Godot 脚本的编译产物pck这是 Godot 的资源包/打包文件。里面会装场景贴图音频配置脚本源码或脚本字节码发布游戏时Godot 常见结构就是game.exegame.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.gdc3. 第二个命令是干什么的你的第二个命令gdre_tools.exe --headless --pck-patch‘E:\cod_ctf_nxgodot\NXgodot\GD1.pck’ --patch-file‘E:\cod_ctf_nxgodot\repack_build\main.gdcres://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