2018/11/06-SCUCTF-re4

Posted fingerprint

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(
)
    print(chr(data[i]),end="")

可以生成地图。

技术分享图片

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

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

 


以上是关于2018/11/06-SCUCTF-re4的主要内容,如果未能解决你的问题,请参考以下文章

web代码片段

Xcode 4.6 的备份代码片段

4.3 合并重复的条件执行片段

以下代码片段的时间复杂度是多少?

ViewPager开关没有显示片段之间

Android 实用代码片段