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)
最后的输出结果