收获

  • XML 文件可以是 Snap! 图像编程语言的文件,可以根据 XML 的 <project name="re4baby22" app="Snap! 8.2, https://snap.berkeley.edu" version="2"> 得知

(2023年5月27日-2023年5月28日)【CISCN 2023】babyre


思路

下载得到一个 babyre.xml 文件,VScode 打开发现很乱,无法阅读:

CISCN2023-babyRE1.png

使用浏览器打开分析:

CISCN2023-babyRE2.png

搜索 flag,发现一个字符串 flag{o_shit_i_dont_know_that},但明显不是真正的 flag

CISCN2023-babyRE3.png

不过有一串可疑的数据:102,10,13,6,28,20,48,44,27,1,29,43,54,54,59,11,1,26,43,52,5,1,24,40,43,28,9,21,9

由于阅读文件内容无果,但是注意到 XML 项目文件是由 Snap! 生成的

CISCN2023-babyRE4.png

百度可知这是一个图形编程语言:

CISCN2023-babyRE5.png

进入官网:https://snap.berkeley.edu

创建新项目,发现可以导入项目,将刚刚的 babyre.xml 导入进来:

CISCN2023-babyRE6.png

根据提示运行项目,点击右上角绿色旗帜,按空格键
发现运行到一个带锁的界面,要求输入 flag:

CISCN2023-babyRE7.png

双击锁的图案,在中间一栏出现逻辑:

CISCN2023-babyRE8.png

分析流程可知,当询问 “Give me the flag” 时,输入的回答 key 就是最终的 flag

CISCN2023-babyRE9.png

is_ok = 1 时,说明输入正确
找到 secret 的生成流程:

CISCN2023-babyRE10.png

最终得到的 secret 为:[102, 10, 13, 6, 28, 74, 3, 1, 3, 7, 85, 0, 4, 75, 20, 92, 92, 8, 28, 25, 81, 83, 7, 28, 76, 88, 9, 0, 29, 73, 0, 86, 4, 87, 87, 82, 84, 85, 4, 85, 87, 30]

根据校验逻辑编写脚本即可,校验比较简单,主要是异或操作:return a^b

已知 key 的第一项为 102,即字符 'f'
根据 key[i] ^ key[i - 1] = secret[i],依次求出后续 key


脚本

secret = [102, 10, 13, 6, 28, 74, 3, 1, 3, 7, 85, 0, 4, 75, 20, 92, 92, 8, 28,  
     25, 81, 83, 7, 28, 76, 88, 9, 0, 29, 73, 0, 86, 4, 87, 87, 82, 84, 85, 4, 85, 87, 30]  
  
key = 'f'  # 102  
print(key, end='')  
for i in range(1, len(secret)):  
    tmp = ord(key) ^ secret[i]  
    key = chr(tmp)  
    print(key, end='')

结果

flag{12307bbf-9e91-4e61-a900-dd26a6d0ea4c}

CISCN2023-babyRE11.png