CTF中的迷宫问题

在这里插入图片描述
这是拿的WIKI的迷宫图片,扫眼一看确实没有什么思路,再加上密密麻麻的字符就会让人感觉头大,还必须再这里找到迷宫的路线,好家伙,真的是给做题人不留点空间想象,不过我做的这道题确实迷宫不算太大,至少是8x8的宽度。
我是看了这个链才有所顿悟,如果我下面说的还不算太明白可以看看这个链接https://ctf-wiki.org/reverse/maze/maze/.
在这里插入图片描述
现在做reverse我的第一步都是成了查壳,习惯性的看它有没有加壳,然后拖到IDA中查看main函数在这里插入图片描述
经过查看这是一个64位的ELF文件,我们在把他拖到64位IDA中查看main函数
在这里插入图片描述

我们再按shift+F12打开字符串窗口查看一下有没有可以的字符串
在这里插入图片描述
然后我们会看到一串可以的字符串

.data:0000000000601060	00000041	C	  *******   *  **** * ****  * ***  *#  *** *** ***     *********

然后我们开始分析main函数

  v10[0] = 0;     //是一个数组,代表为列
  v9 = 0;         //代表为行
  puts("Input flag:");
  scanf("%s", &s1);
  if ( strlen(&s1) != 24 || strncmp(&s1, "nctf{", 5uLL) || *(&byte_6010BF + 24) != 125 )
  {
LABEL_22:
    puts("Wrong flag!");
    exit(-1);
  }//这里说不是括号里的东西就是错误答案,所以可得到len(s1) = 24, s1开头必须为nctf
 v3 = 5LL;
  if ( strlen(&s1) - 1 > 5 )
  {
    while ( 1 )
    {
      v4 = *(&s1 + v3);
      v5 = 0;
      if ( v4 > 78 )
      {
        if ( (unsigned __int8)v4 == 79 )//aciss中79为‘O’
        {
          v6 = sub_400650(v10);//跟进这个函数里面显示的是左移,因为函数中为--又因为是v10为列,所以左移
          goto LABEL_14;
        }
        if ( (unsigned __int8)v4 == 111 )//aciss中111为‘o’
        {
          v6 = sub_400660(v10);//跟进这个函数里面显示的是右移
          goto LABEL_14;
        }
      }
      else
      {
        if ( (unsigned __int8)v4 == 46 )//aciss中46为‘.’
        {
          v6 = sub_400670(&v9);//跟进这个函数里面显示的是下移,因为函数中为--,又因为是v9为行所以下移
          goto LABEL_14;
        }
        if ( (unsigned __int8)v4 == 48 )//aciss中48为‘0’
        {
          v6 = sub_400680(&v9);//跟进这个函数里面显示的是上移
LABEL_14:
          v5 = v6;
          goto LABEL_15;
        }
      }

然后就是我们走迷宫的时候了,因为这是个8x8迷宫,所以要把它弄成8x8表格

.data:0000000000601060	00000041	C	  *******   *  **** * ****  * ***  *#  *** *** ***     *********
00******
*000*00*
***0*0**
**00*0**
*00*#00*
**0***0*
**00000*
********

从左上脚出发走到#号,上下左右就是前面分析的0oO.这四个来控制
在这里插入图片描述
因为我们前面分析获取正确的flag前要开头必须为nctf
所以flag就是nctf{o0oo00O000oooo…OO}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值