标签:比较 提示 osi 提取 调试器 alt 失败 分享 http
题目链接: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步,由于是练习题,就不走了。
标签:比较 提示 osi 提取 调试器 alt 失败 分享 http
原文地址:https://www.cnblogs.com/Fingerprint/p/10075879.html