https://buuoj.cn/challenges#[WUSTCTF2020]Cr0ssfun

64 elf

很有意思 很有意思

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4[48]; // [rsp+0h] [rbp-30h] BYREF
 
  puts(" _    _ _   _ _____ _____   _____           ");
  puts("| |  | | | | /  ___|_   _| /  ___|          ");
  puts("| |  | | | | \\ `--.  | |   \\ `--.  ___  ___ ");
  puts("| |/\\| | | | |`--. \\ | |    `--. \\/ _ \\/ __|");
  puts("\\  /\\  / |_| /\\__/ / | |   /\\__/ /  __/ (__ ");
  puts(" \\/  \\/ \\___/\\____/  \\_/   \\____/ \\___|\\___|");
  while ( 1 )
  {
    puts("Input the flag");
    __isoc99_scanf("%s", v4);
    if ( (unsigned int)check(v4) == 1 )
      break;
    puts("0ops, your flag seems fake.");
    puts("==============================");
    rewind(_bss_start);
  }
  puts("Your flag is correct, go and submit it!");
  return 0;
}

进入 check

_BOOL8 __fastcall iven_is_handsome(_BYTE *a1)
{
  return a1[10] == 112
      && a1[13] == 64
      && a1[3] == 102
      && a1[26] == 114
      && a1[20] == 101
      && (unsigned int)iven_is_c0ol(a1);
}

… 子子孙孙无穷匮也?

全部打开复制出来

a1[10] == 112
&& a1[13] == 64
&& a1[3] == 102
&& a1[26] == 114
&& a1[20] == 101
&& a1[7] == 48
&& a1[16] == 95
&& a1[11] == 112
&& a1[23] == 101
&& a1[30] == 117
&&*a1 == 119 && a1[6] == 50 && a1[22] == 115 && a1[31] == 110 && a1[12] == 95 &&
a1[15] == 100
&& a1[8] == 123
&& a1[18] == 51
&& a1[28] == 95
&& a1[21] == 114
&&a1[2] == 116
&& a1[9] == 99
&& a1[32] == 125
&& a1[19] == 118
&& a1[5] == 48
&& a1[14] == 110
&&a1[4] == 50 && a1[17] == 114 && a1[29] == 102 && a1[17] == 114 && a1[24] == 95 &&a1[1] == 99 && a1[25] == 64 && a1[27] == 101

写个正则匹配就行了

import re  
  
src = """a1[10] == 112  
&& a1[13] == 64  
&& a1[3] == 102  
&& a1[26] == 114  
&& a1[20] == 101  
&& a1[7] == 48  
&& a1[16] == 95  
&& a1[11] == 112  
&& a1[23] == 101  
&& a1[30] == 117  
&&*a1 == 119 && a1[6] == 50 && a1[22] == 115 && a1[31] == 110 && a1[12] == 95 &&  
a1[15] == 100  
&& a1[8] == 123  
&& a1[18] == 51  
&& a1[28] == 95  
&& a1[21] == 114  
&&a1[2] == 116  
&& a1[9] == 99  
&& a1[32] == 125  
&& a1[19] == 118  
&& a1[5] == 48  
&& a1[14] == 110  
&&a1[4] == 50 && a1[17] == 114 && a1[29] == 102 && a1[17] == 114 && a1[24] == 95 &&a1[1] == 99 &&  
a1[25] == 64 && a1[27] == 101"""  
  
pattern = re.compile(r"a1\[(\d+)\] == (\d+)")  
matches = pattern.findall(src)  
flag = " " * 33  
for i in matches:  
    flag = flag[:int(i[0])] + chr(int(i[1])) + flag[int(i[0])+1:]  
print(flag)
 ctf2020{cpp_@nd_r3verse_@re_fun}