BUUctf xor

0x01 关于xor

xor,即为计算机中的异或计算,相同为0,不同为1。

下面是关于异或加密的四个定理

  1. A ^ 0 = A
  2. A ^ A = 0
  3. (A ^ B) ^ C = A ^ (B ^ C)
  4. (B ^ A) ^ A = B ^ 0 = B // 明文 B;密码 A

观察可知,经历异或加密后的密文,再次进行异或算法即可得到明文。

0x02 题解

先丢进Die看一眼
image

瞟一眼发现没壳,而且是64位,直接丢进IDA。

image

一眼看到左边的main函数。我直接F5大法(

image

“input your flag” 关键语句

获取输入后做了异或运算,然后与global变量作比较

大概率需要的flag就是global的值

一路左键找到global的值

image

选中,shift+E导出
image

剩下的就是编写脚本
简单用python写个解密脚本

s=[102,  10, 107,  12, 119,  38,  79,  46,  64,  17, 120,  13,  90,  59,  85,  17, 112,  25,  70,  31, 118,  34,  77,  35,  68,  14, 103,   6, 104,  15, 71,  50,  79,   0]
flag=chr(s[0])
for i in range(1,len(s)):
    flag+=chr(s[i]^s[i-1])
print(flag)

最后的输出结果

image

posted @ 2024-05-19 19:05  Cia1lo  阅读(59)  评论(0编辑  收藏  举报