迷宫

main函数

__int64 __fastcall main()
{
  _main();
  printf("Welcome to the maze game. Try to get out of the maze and get the flag.\n");
  initmap();
  scanf("%s", Input);
  if ( check(Input) )
    printf("Congratulations on coming out of the maze! The flag is 'flag{your input}'\n");
  else
    printf("What a pity. You're still trapped in the maze :(\n");
  system_0("pause");
  return 0;
}

check 能看到是一个简单的迷宫

bool __fastcall check(char *ch_0)
{
  int v2; // eax
  char *v3; // rcx
  unsigned int v4; // r8d
  unsigned int v5; // edx
  char *v6; // r11
  char v7; // al

  v2 = strlen(ch_0);
  if ( v2 > 0 )
  {
    v3 = ch_0;
    v4 = 0;
    v5 = 0;
    v6 = &ch_0[v2 - 1 + 1];
    while ( 1 )
    {
      v7 = *v3;
      if ( *v3 == 115 )
      {
        ++v5;
      }
      else if ( v7 > 115 )
      {
        if ( v7 != 119 )
          return 0;
        --v5;
      }
      else if ( v7 == 97 )
      {
        --v4;
      }
      else
      {
        if ( v7 != 100 )
          return 0;
        ++v4;
      }
      if ( !realmap[10 * v5 + v4] || v5 > 9 || v4 > 9 )
        break;
      if ( v6 == ++v3 )
        return v4 == 9 && v5 == 9;
    }
  }
  return 0;
}

生成表的函数

void __cdecl initmap()
{
  char *v0; // r8
  int *v1; // r9
  int v2; // eax
  char *v3; // rdx

  v0 = realmap;
  v1 = gamemap;
  do
  {
    v2 = *v1;
    v3 = v0;
    do
    {
      (--v3)[10] = v2 & 1;
      v2 >>= 1;
    }
    while ( v2 );
    v0 += 10;
    *v1++ = 0;
  }
  while ( v0 != algn_1400150A4 );
}

不用下断点 因为scanf会自动停下来 停下来不输入就能得到迷宫图

image

exp

这个没有exp 因为我已经很久没有写过迷宫的脚本了 全都一把梭了 哈哈哈哈 不过我把迷宫图提取出来了 方便你们拿取

迷宫图

1, 0, 0, 0, 1, 0, 0, 1, 0, 0,
1, 1, 1, 0, 0, 1, 1, 1, 0, 0,
1, 1, 1, 0, 1, 1, 1, 0, 1, 1,
1, 1, 1, 1, 0, 0, 0, 1, 1, 0,
1, 0, 1, 0, 0, 0, 0, 1, 1, 1,
1, 0, 1, 1, 0, 0, 1, 1, 0, 0,
1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
1, 1, 0, 1, 0, 0, 0, 0, 0, 1,
0, 0, 0, 1, 1, 1, 1, 0, 0, 1

flag

flag{sddssdddwddwddsssaasassssddd}

一把梭

image