RE之攻防世界 maze

这个是我看到的写的最全的WP

maze 迷宫问题,先看一下wiki了解一下

迷宫问题具有以下特征:
• 在内存中放置一个“地图”
• 将用户输入限制为几个字符。
• 通常只有一个迷宫入口和一个迷宫出口
放置的地图可以由可显示的字符(例如#和*)组成(这非常明显,字符串的基本视图知道这是一个迷宫。),还可以使用不可见的十六进制值来表示。该地图可以直接组成非常长的字符串,也可以一一排列。如果是逐行排列,由于迷宫一般较大,所以用于按线(注意,不按排列)按顺序排列,每行对应一个特定的行号,需要确定该行还原迷宫图的编号。

第一步,还是查壳 ,知道是64位的啦

第二步,拖入IDA64
找到main函数


 v4 = 5LL;
 if ( strlen(&s1) - 1 > 5 )
 {
   while ( 1 )
   {
     v5 = *(&s1 + v4);
     v6 = 0;
     if ( v5 > 78 )
     {
       v5 = (unsigned __int8)v5;
       if ( (unsigned __int8)v5 == 79 )
       {
         v7 = sub_400650((char *)&v10 + 4, v3);
         goto LABEL_14;
       }
       if ( v5 == 111 )
       {
         v7 = sub_400660((char *)&v10 + 4, v3);
         goto LABEL_14;
       }
     }
     else
     {
       v5 = (unsigned __int8)v5;
       if ( (unsigned __int8)v5 == 46 )
       {
         v7 = sub_400670(&v10, v3);
         goto LABEL_14;
       }
       if ( v5 == 48 )
       {
         v7 = sub_400680(&v10, v3);
LABEL_14:
         v6 = v7;
         goto LABEL_15;
       }
     }
LABEL_15:
     v3 = (const char *)HIDWORD(v10);
     if ( !(unsigned __int8)sub_400690(asc_601060, HIDWORD(v10), (unsigned int)v10) )
       goto LABEL_22;
     if ( ++v4 >= strlen(&s1) - 1 )
     {
       if ( v6 )
         break;
LABEL_20:
       v8 = "Wrong flag!";
       goto LABEL_21;
     }
   }
 }
 if ( asc_601060[8 * (signed int)v10 + SHIDWORD(v10)] != 35 )
   goto LABEL_20;
 v8 = "Congratulations!";
LABEL_21:
 puts(v8);
 return 0LL;
}

首先一上来我们能知道
if ( strlen(&s1) != 24 || (v3 = "nctf{", strncmp(&s1, "nctf{", 5uLL)) || *(&byte_6010BF + 24) != '}' )
也就是flag长度为24 ,且以nctf{ 开头,以}结尾
再看下面可以分成四个部分(把if语句中的数字都变成字符,也就是选中摁R)

这里其实就是控制上下左右的函数,可以发现分别是Oo.0
400650对应O

400660对应o

400670对应.
和400650相同

400680对应0
和400660相同

打开汇编看一下这里的V9和V9+1到底指代的是啥

r14,也就是V9是Y轴,r15,也就是V9+1是X轴
经过分析得出

O => x-=1 左移
. => y-=1 上移
o => x+=1 右移
0 => y+=1 下移

再往下看解开函数的关键来了
查看asc_601060得到
asc_601060 db ' ******* * **** * **** * *** *# *** *** *** *********',0
又根据上面的8乘多少多少猜测迷宫为8个一行,则依次排列下来就是这样

结果是右下右右下下左下下下右右右右上上左左,正好18位
nctf{o0oo00O000oooo..OO}

你做的每件事都值得。 ——yaerda
原文地址:https://www.cnblogs.com/XXX-Echoed/p/13526920.html