XMAN排位赛-babymaze

暑期XMAN排位赛中一道逆向思路

看到题目名字,babymaze,中文意思是婴儿迷宫,看来是一个跟迷宫有关的题目。要不就是迷宫清空,要不就是走出迷宫。

好了,咱先打开题目输入看看,为了看得清楚防止一闪而过,我们就用OD打一个辅助好了。

word天,居然还是日文,吓的我赶紧翻译了一波,好像是不对的意思吧。。暂且不管。用IDA看看关键代码吧。

又发现一撮日文,一个个翻译了下,意思已经标注,(如上图所示)有正确提示和错误提示,但是就是没有发现刚才出现的那个提示,所以想这个还是一个调用,所以我们往前追溯。

Ok,找到了,上图可以看出第一步,也就是flag的格式了,必须是xman{xxxxxxxx}的格式,那么,在123和125的验证中间还有一个函数调用,这儿也就是我们刚才看到的那另一串答案提示了。

看上图这一串数据,应该就是构成迷宫的关键了吧,如果看不出来咱可以用OD,验证一下咯,输入xman{1231231231231234},这样程序就会跑到那儿去进行赋值进行迷宫的制造,然后我们看看数据就可以看出来迷宫了。

我们把迷宫排列一下就是下面这个样子了。

继续往下分析。看到了四个判断嵌套,分别是1,2,3,4的if判断,点进去看的东西如下图注释,1234分别代表左右上下。除此以外我们还可以看出A1指针代表列,A2指针代表行。

要问判断依据?,看下面这个图的红色剪头,由于刚才看到的迷宫是六行九列的,那么与9相乘的数据就是列所在指针,后面的加数就是行所在指针,而且这里红色箭头指向的函数返回的数据是与32进行对比是否一样,一样则是0,那么和1异或,如果不一样,你懂得。~~~

而32的十六进制就是0x20
也就是迷宫的数据,我们把迷宫用01进行填充一下好了。

下面就剩下最后的两个判断,一是是否走到尽头,二是是否只走了16步。

OK,全部搞懂了吧,开始你的迷宫之旅。

Contents
|