503 字
3 分钟
CISCN 长城杯 2026
第一次认真打这种录屏+禁AI的比赛
主要还是打了一下Re,水平好差,就牢出来两个题…其中有个密码算逆向我就算到逆向里了
Reverse
babygame
难点在于发现这是是Godot Engine引擎,我是丢进IDA里面然后对里面函数里面的代码直接丢进网上搜,触发关键词就弹出来了
有更高深的寻找方法可分享…
接下来做题过程参考了这位博主的博客,感谢分享https://blog.zhaozilin.cn/posts/godot
所以接下来用开源工具gdre解包就好了,得到
extends CenterContainer
@onready var flagTextEdit: Node = $PanelContainer / VBoxContainer / FlagTextEdit@onready var label2: Node = $PanelContainer / VBoxContainer / Label2
static var key = "FanAglFanAglOoO!"var data = ""
func _on_ready() -> void : Flag.hide()
func get_key() -> String: return key
func submit() -> void : data = flagTextEdit.text
var aes = AESContext.new() aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer()) var encrypted = aes.update(data.to_utf8_buffer()) aes.finish()
if encrypted.hex_encode() == "d458af702a680ae4d089ce32fc39945d": label2.show() else: label2.hide()
func back() -> void : get_tree().change_scene_to_file("res://scenes/menu.tscn")这里编码了key和密文,为AES加密,但是据题目提示吃完金币才能检测flag,所以继续看别的
extends Node
@onready var fan = $"../Fan"
var score = 0
func add_point(): score += 1 if score == 1: Flag.key = Flag.key.replace("A", "B") fan.visible = true这里就能看出来交换逻辑了,实际上真正的key是吃完金币后,把A和B字符调换一下位置 然后正常AES-ECB解密,拉去在线解密就好 解密得到wOW~youAregrEaT! 套flag交了
flag{wOW~youAregrEaT!}EzFlag
直接运行发现它会自己缓慢打印flag,于是不做了等它打印完(?)
主要是分析main函数和f函数
初始seed为1然后更新种子插入连字符-,然后是斐波那契模16周期24,有一个常量字符串K生成映射表,自行还原生成逻辑即可
K = "012ab9c3478d56ef"fib = [0, 1]for i in range(22): fib.append((fib[-1] + fib[-2]) % 16)
res = ""v11 = 1for i in range(32): res += K[fib[v11 % 24]] if i in [7, 12, 17, 22]: res += "-" v11 = (v11 * 8 + i + 64) & 0xFFFFFFFFFFFFFFFF
print(f"flag{{{res}}}")最终得到
flag{10632674-1d219-09f29-14769-f60219a24}