0x01 關於xor
xor,即為計算機中的異或計算,相同為0,不同為1。
下面是關於異或加密的四個定理
- A ^ 0 = A
- A ^ A = 0
- (A ^ B) ^ C = A ^ (B ^ C)
- (B ^ A) ^ A = B ^ 0 = B // 明文 B;密碼 A
觀察可知,經歷異或加密後的密文,再次進行異或演算法即可得到明文。
0x02 題解
先丟進Die看一眼
瞟一眼發現沒殼,而且是64位,直接丟進IDA。
一眼看到左邊的main函式。我直接F5大法(
“input your flag” 關鍵語句
獲取輸入後做了異或運算,然後與global變數作比較
大機率需要的flag就是global的值
一路左鍵找到global的值
選中,shift+E匯出
剩下的就是編寫指令碼
簡單用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)
最後的輸出結果