【CISCN 2023】babyre
收获
- 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 打开发现很乱,无法阅读:
使用浏览器打开分析:
搜索 flag,发现一个字符串 flag{o_shit_i_dont_know_that}
,但明显不是真正的 flag
不过有一串可疑的数据: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!
生成的
百度可知这是一个图形编程语言:
进入官网:https://snap.berkeley.edu
创建新项目,发现可以导入项目,将刚刚的 babyre.xml
导入进来:
根据提示运行项目,点击右上角绿色旗帜,按空格键
发现运行到一个带锁的界面,要求输入 flag:
双击锁的图案,在中间一栏出现逻辑:
分析流程可知,当询问 “Give me the flag” 时,输入的回答 key
就是最终的 flag
当 is_ok = 1
时,说明输入正确
找到 secret
的生成流程:
最终得到的 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}