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}

(仅为个人学习记录,如有错误,欢迎指正)

posted @ 2022-11-30 10:20  一个半  阅读(340)  评论(1)    收藏  举报