BUUCTF 不一样的flag

题目:BUUCTF 不一样的flag

看的这个:BUUCTF 不一样的flag_Afanbird的博客


先查,没壳,32位,打开
在这里插入图片描述
ida分析,嗯,啥也看不出来,v12345什么的非常混乱
突破口是这两句
在这里插入图片描述发现49是1,35是#,再结合语句和运行exe给的走迷宫提示,可以翻译出:碰到1就是走错了,最后走到#就是走对了,此时输入就是flag

字符里能找到这么一个
在这里插入图片描述有很多1,以#结尾,大胆猜测这就是迷宫地图
正好可以写成5*5的迷宫

*1111
01000
01010
00010
1111#

于是可以走走,序列是

222441144222

flag是对的

分析一下输出和操作这段,v5是输入
v3的字符串后面那段叫它t
v4初值为0

if ( v5 == 2 )//down
    {
      ++*(_DWORD *)&v3[25]; //t++
    }
    else if ( v5 > 2 )
    {
      if ( v5 == 3 )//left
      {
        --v4;
      }
      else
      {
        if ( v5 != 4 )//说明大于4
LABEL_13://输入不符,退出
          exit(1);
        ++v4;//right
      }
    }
    else
    {
      if ( v5 != 1 )//说明小于等于0
        goto LABEL_13;
      --*(_DWORD *)&v3[25];//up, t--
    }

这样一看就还挺清楚的,v4就是横坐标,t就是纵坐标
最后是检查阶段

for ( i = 0; i <= 1; ++i )
    {
      if ( *(int *)&v3[4 * i + 25] < 0 || *(int *)&v3[4 * i + 25] > 4 )
        exit(1);
    }

i为0的时候是v3[25]那里,也就是t
i为1时是再下一个int,也就是v4
在这里插入图片描述所以就是每次操作后都要检查x和y坐标是不是在0~4之间

到这里就算是全懂了 撒花——

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值