2018/11/06-SCUCTF-re4

题目链接:https://pan.baidu.com/s/1Q7MmJjff_3xMs2OvKbUdsw
提取码:t7jr 

首先程序用了重定位,od和ida里面的地址不一样,我们用修改PE文件的Option Header中的Dll Characteristics,把这个的数据置为0,然后载入到调试器中之后就首地址就会和IDA中一样。

这是一个迷宫题,不过没有提示的话光看算法不太容易看出来,地图也被稍微隐藏了一下。

点进check函数分析一下。

其实我们看到这里就应该猜到是迷宫了,v11到v14的比较是四个方向,四个函数会对position进行处理改变坐标,&unk_42B9C0就是地图。

方向的值是rand()生成的,用od动态调一下可以得到。

点进去一个方向中的处理函数分析一下。

可以看到先进行坐标变化,若下一个要移动的位置不是‘ . ’说明撞墙了,返回-1,游戏失败。

注意到是map+4*v2,说明在内存中的一堆数据中每四位的第一位才是地图的物品,看一下内存发现78(‘ x ’)是墙,2E(‘ . ’)是通道。

我们把map所有数据dump下来,然后写脚本生成地图即可。

data = open('E://data','rb').read()
for i in range(0,2495,4):
    if(i%(48*4) == 0):
        print('\n')
    print(chr(data[i]),end="")

可以生成地图。

从左下角走到右上角即可,程序的输入即是每一步的方向。

题目比较恶心,要走78步,由于是练习题,就不走了。

猜你喜欢

转载自www.cnblogs.com/Fingerprint/p/10075879.html
今日推荐