BUUCTF--[HDCTF2019]Maze

一笑奈何 提交于 2020-04-29 17:12:43

测试文件:https://lanzous.com/ibh0xhi

 

脱壳

获取信息

  • 32位文件
  • upx壳

 

代码分析

看名字就知道,应该就是用几个符号代表方向,让我们走迷宫。打开字符串窗口看了看

星号那段就是迷宫了,总共70个字符。

找到main函数,发现0x40102E有莫名的指令,直接使用OD nop掉,转存到新文件。

 

得到了新文件,打开main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  signed int i; // [esp+10h] [ebp-14h]
  char v5[16]; // [esp+14h] [ebp-10h]

  sub_401140(aGoThroughTheMa);
  scanf(a14s, v5);
  for ( i = 0; i <= 13; ++i )
  {
    switch ( v5[i] )
    {
      case 'a':
        --dword_408078;
        break;
      case 'd':
        ++dword_408078;
        break;
      case 's':
        --dword_40807C;
        break;
      case 'w':
        ++dword_40807C;
        break;
      default:
        continue;
    }
  }
  if ( dword_408078 != 5 || dword_40807C != -4 )
  {
    sub_401140(aTryAgain);
  }
  else
  {
    sub_401140(aCongratulation);
    sub_401140(aHereIsTheFlagF);
  }
  return 0;
}
.data:00408078 dword_408078    dd 7                    ; DATA XREF: _main:loc_401096↑r
.data:00408078                                         ; _main+9E↑w ...
.data:0040807C dword_40807C    dd 0                    ; DATA XREF: _main:loc_401074↑r
.data:0040807C                                         ; _main+7D↑w ...

让我们用14步,让dword_408078==5,dword_40807c==-4

不过直接凑出是不行的,结合前面的迷宫,猜测迷宫为7*10。

从+走到F就行,w:上;s:下;a:左;d:右,ssaaasaassdddw

 

get flag!

flag{ssaaasaassdddw}

 

谢谢@jentle 和 @bejyf2008 给的提醒:

这题是多解的,密码ssaaaa打头就行。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!