Buuctf xor逆向
拖进IDA:

可以看见第一个if判断了输入的长度为33,紧接着for循环对我们的输入进行异或运算,最后通过if和global这个变量进行比较最终判断输入是否正确。
也就是说我们只要知道global的值那么就能很快解出flag
双击global进去看看

这里我不知道我判断的对不对,应该是定义了一个名叫global的char* 变量,紧接着指向了“aFKWOXZUPFVMDGH”变量的地址,总之再跟进“aFKWOXZUPFVMDGH”里面去看看,

这里就可以看到具体的数据了,也就是说我们的输入最终经过异或运算要和这串字符一样才行,我们将它复制出来,选中变量按快捷键shift+E,选择C unsigned char array(hex) ,将下面的16进制数据复制下来方便编写代码。

a = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11,
0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F,
0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F,
0x47, 0x32, 0x4F, 0x00]
flag = ""
i=1
for i in range(len(a)):
flag += chr(a[i] ^ a[i - 1])
print(flag)
运行得到flag:
flag{QianQiuWanDai_YiTongJiangHu}
(仅为个人学习记录,如有错误,欢迎指正)

浙公网安备 33010602011771号