本地路径::*********\re\Maze.exe
看到Maze就知道这是一道迷宫题,先运行一下,发现输完一闪而过,在终端打开:
果然还是日文,翻译一波,回来明白了:本当に 本当に よかった’,0Ah,0是正确的意思。其他不重要了!
跟进函数看一下:
可以看到flag形式:xman{xxxxxxxxxxxxxxxx},首先先判断了一波v5和v4,不等直接就错误退出,所以v5和v4一定相等才正常,下面的判断v4数组最后一位是不是“}”,不是也退出,格式正确之后进入sub_4015F3(&v4[5])函数,这里的v4[5]就代表在xman{后面的数据(此时v5的数据已经给了v4的前4位),进去看一下:
这个函数里面是定义“上下左右”代表的数值的,以及大数组的值,还有数组排列方式,在这里是9列,6行,如果(a1 + 9 * a2 + a3) == 32(0x20),返回1,与1异或之后为0,不满足条件就执行 if ( v24 != 5 || v23 != 7 ),可知迷宫的出口点就在(5,7),这个地方,又判断了是否走够16步,之后会显示成功,一维数组具体的值为:
0x20和0x05组成,定义的时候有int有char型的,所以在取int型数据的时候,要从右往左取一个字节一个字节的取。
现在知道数组是9列6行,且数据也有了,我们就开始摆迷宫(用二维数组的方式画出来):
1代表数据中的0x20,0代表0x05:
所以我们就可以画出路径(按1的走):
对应“上下左右”上:3 ,下:4,左:1,右:2
得到路径:4444422332244222
最后flag:xman{4444422332244222}