BUUCTF-RE-xor

我的语言还真学得一团糟

已经感觉不够用了 

 BUUCTF-RE-xor_第1张图片

没有什么有用信息

 1 int __cdecl main(int argc, const char **argv, const char **envp)
 2 {
 3   char *v3; // rsi
 4   int result; // eax
 5   signed int i; // [rsp+2Ch] [rbp-124h]
 6   char v6[264]; // [rsp+40h] [rbp-110h]
 7   __int64 v7; // [rsp+148h] [rbp-8h]
 8 
 9   memset(v6, 0, '\x01\0');
10   v3 = (char *)256;
11   printf("Input your flag:\n", 0LL);
12   get_line(v6, 256LL);
13   if ( strlen(v6) != 33 )
14     goto LABEL_12;
15   for ( i = 1; i < 33; ++i )
16     v6[i] ^= v6[i - 1];
17   v3 = global;
18   if ( !strncmp(v6, global, 33uLL) )
19     printf("Success", v3);
20   else
21 LABEL_12:
22     printf("Failed", v3);
23   result = __stack_chk_guard;
24   if ( __stack_chk_guard == v7 )
25     result = 0;
26   return result;
27 }

由13行知道,flag长度为33

进行了xor运算

v6[i] ^= v6[i - 1]
然后寻找用以该处理方式的字符串
它就在global里
BUUCTF-RE-xor_第2张图片
                                                   

BUUCTF-RE-xor_第3张图片

 解题脚本如下

 1 a = ['f', 0x0A, 'k', 0x0C, 'w', '&', 'O', '.', '@', 0x11, 'x', 0x0D, 'Z', ';', 'U', 0x11, 'p', 0x19, 'F', 0x1F, 'v',
 2         '"', 'M', '#', 'D', 0x0E, 'g', 6, 'h', 0x0F, 'G', '2', 'O']
 3 
 4 x = 'f'
 5 
 6 for i in range(1, len(a)):
 7     if (isinstance(a[i], str)):
 8         if (isinstance(a[i - 1], str)):
 9             x += chr(ord(a[i]) ^ ord(a[i - 1]))
10         else:
11             x += chr(ord(a[i]) ^ a[i- 1])
12     else:
13         x += chr(a[i] ^ ord(a[i - 1]))
14 
15 print(x)

*第一个f没被处理

 

你可能感兴趣的:(BUUCTF-RE-xor)