xor

题目链接: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)
posted @ 2024-11-11 22:50  imtaieee  阅读(2)  评论(0编辑  收藏  举报