BUUCTF xor

qixunxunuxunxun發表於2024-05-19

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