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 = 1
for 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}