首先还是下载附件,这次是一个exe文件,先打开看一下
发现这是一个依次输入数字然后点亮所有的符号,得到flag的游戏,然后我们就用Exeinfo PE打开
发现是一个c++编写的32位程序,然后就用ida32打开
有时进来之后无法直接找到main函数,那就按 Alt+T 搜索文本 main 就能找到,然后就跟进main函数查看伪代码
继续跟进main_0函数,跟进后可以看到以下代码
这些代码是判断输入的数字是否在要求范围内,否则重新输入,下面的代码是根据输入的数字,改变字符
我们就先跟进 sub_4576D6 函数查看一下改变符号的代码,经过两次跳转后就看到了如下代码
现在也就不看题中改变字符的代码了,继续查看主函数,下面最后这些代码就是判断每个字符都为1,即都被点亮后执行sub_457Ab4函数,我们猜测这里就是得到flag 的代码,就继续跟进sub_457Ab4
两次跳转后看到
猜测下面就是得到flag的代码
看到这里的最后的一个for循环有v2和v59进行运算,应该就是得到flag的代码
这里对v2和v59进行或运算,逆运算也是或运算,我们把v2和v59地址增加后的数字编写进数组
编写Python脚本得到flag
v59 = [18, 64, 98, 5, 2, 4, 6, 3, 6, 48, 49, 65, 32, 12, 48, 65, 31, 78, 62, 32,
49, 32, 1, 57, 96, 3, 21, 9, 4, 62, 3, 5, 4, 1, 2, 3, 44,65, 78, 32, 16,
97, 54, 16, 44, 52, 32, 64, 89, 45, 32, 65, 15, 34, 18, 16, 0]
v2 = [123, 32, 18, 98, 119, 108, 65, 41, 124, 80, 125, 38, 124, 111, 74, 49, 83, 108, 94,
108, 84, 6, 96, 83, 44, 121, 104, 110, 32, 95, 117, 101, 99, 123, 127, 119, 96, 48,
107, 71, 92, 29, 81, 107, 90, 85, 64, 12, 43, 76, 86, 13, 114, 1, 117, 126, 0]
flag = ' '
for i in range(56):
v2[i] ^= v59[i]
v2[i] ^= 0x13
flag += chr(v2[i])
print(flag)
脚本写好后运行得出flag
zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
本题结束