我的语言还真学得一团糟
已经感觉不够用了
没有什么有用信息
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里
解题脚本如下
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没被处理