首页
社区
课程
招聘
[原创]BUUCTF逆向题:[WUSTCTF2020]Cr0ssfun
2022-3-27 16:17 4424

[原创]BUUCTF逆向题:[WUSTCTF2020]Cr0ssfun

2022-3-27 16:17
4424

1.基本信息探查:

1.EXEinfo:

2.运行一下:

2.IDA分析:

1.主函数分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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((__int64)v4) == 1 )
      break;
    puts("0ops, your flag seems fake.");
    puts("==============================");
    rewind(_bss_start);
  }
  puts("Your flag is correct, go and submit it!");
  return 0;
}

v4接受字符串后调用check函数,当返回值为1时跳出循环输出flag正确

 

跟踪过去

 

 

发现其实就是每个数组进行对比,没有什么好分析的每个字符都是这么对比出来的:

 

 

拼接之后为:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
w c t f 2 0 2 0 { c p p _ @ n d _ r 3 v
20 21 22 23 24 25 26 27 28 29 30 31 32
e r s e _ @ r e _ f u n }
 

wctf2020{cpp_@ndr3verse@re_fun}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回