题目链接:xor。
下载附件后,使用 IDA 打开,并反编译,定位到 main 函数,如下。
通过查看 main 函数源码,可以发现该程序主要的操作如下。
for ( i = 1; i < 33; ++i )
__b[i] ^= __b[i - 1];
if ( !strncmp(__b, global, 0x21uLL) )
printf("Success");
即,把用户的输入进行异或操作,随后与程序中储存的一个字符串进行比对,若异或后与该字符串相同,则通过检测。
首先是提取出 global 指向的字符串的内容,如下。
即。
data = [
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
]
接着,直接对该字符串进行异或,即可获得程序要求用户输入的字符串(即 flag)。
data = [
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
]
data_reverse = "f"
for i in range(1,len(data)):
data_reverse += chr(data[i] ^ data[i - 1])
print(data_reverse)
标签:__,xor,0x4F,0x11,异或,字符串,data
From: https://www.cnblogs.com/imtaieee/p/18540749