re-二维四向迷宫题
re-二维四向迷宫题
关于迷宫
我们结合具体的来进行描述。
迷宫,顾名思义是有墙,且只有一条路可以走下去。当我们在题目中获得了map(地图)就拥有了上帝视角,就可以顺利的走出迷宫。
在下面这个图就是一个迷宫的map,其中A是起点,B是终点,1代表墙,0代表通路(可以行走的区域)
这仅仅只是一个88的地图,可以直接解决找到路径,但是如果遇到3030或者更大的地图该如何办?
迷宫的解决不可能完全依靠我们人力去走通,而要尽力依靠脚本。
写脚本之前我们得先了解一下在这个迷宫题里的上下左右的方向分别是什么
eg.大部分游戏中的上下左右就是WSAD
通常这个走的路径就是我们需要的关键信息(甚至可能就是flag)
比如在这个地图里我们的关键信息就是SDSDDSDSSD(假设方向同上)
而写脚本的好处就是不那么废眼睛,要不一旦遇到稍大的地图将会累眼睛也废精力且费时。
解题
有了部分关于迷宫的知识后,我们去学习一下如何解决,这里与实题结合
得到附件确定了是多少位的文件以及有无壳后(有壳得脱壳)用ida打开看
提取迷宫地图
进入后,shift+f12查看字符获得地图的位置,然后双击其中一行去到IDA View-A中进行提取数据
第一种类型(字符型地图)
如果是字符型的map就选中地图后按shift+e进行提取数据。这个除了提取数据,提取后还得辨别那个字符代表路径,哪个字符代表墙
f1
如果可以直接获取字符就选择string literal但是
f2
但是可能提取不了所有的,比如这个地图,那就选择另一个C unsigned char array(hex),也就是将字符转为十六进制进行全部提取,然后再写脚本转换为地图
land=[0x41, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24,
0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24,
0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x2E, 0x00, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x00, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x00,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x00, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x00, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x00, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x00,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x2E, 0x24, 0x24, 0x2E, 0x2E,
0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x2E, 0x00, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x2E, 0x00, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x00, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x00, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x00, 0x2E, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x2E, 0x00, 0x2E, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x24, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x2E, 0x00, 0x2E, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x2E,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2E, 0x42, 0x00]
print(len(land))
map=''
for i in range(1830):
if land[i]==0x41:
map+='A'
print('A',end='')
elif land[i]!=0x24 & land[i]!=0x2E & land[i]!=0x00:
map+=chr(land[i])
print(chr(land[i]),end='')
elif land[i]==0x24:
map+='1'
print('1',end='')
elif land[i]==0x2E:
map+='25开学考迷宫.py'
print(0,end='')
else:
map+='\n'
print('\n')
print(map)
这里为了方便观看,我将0改为了“.(点)”,更便于分辨路径和墙
第二种类型(数字型地图)
数字型地图也就是我们最初提到的0和1组成的地图
处理好了地图,我们就得看看原文件的关键函数,找到各方向的输入字符
寻找关键函数
一个小tip,就是也用shift+f12去查看字符,看到中文或者类似意思的英文去定位回其地址,然后就得到了关键函数
比如这里双击后可以回到汇编语言的界面
这里双击其函数名,就又到了思维导图似的页面
__int64 sub_140011980()
{
char *v0; // rdi
__int64 i; // rcx
char v3[32]; // [rsp+0h] [rbp-20h] BYREF
char v4; // [rsp+20h] [rbp+0h] BYREF
int v5; // [rsp+24h] [rbp+4h]
int v6; // [rsp+44h] [rbp+24h]
int v7; // [rsp+64h] [rbp+44h]
int v8; // [rsp+84h] [rbp+64h]
unsigned int v9; // [rsp+A4h] [rbp+84h]
unsigned int v10; // [rsp+C4h] [rbp+A4h]
char v11[32]; // [rsp+E4h] [rbp+C4h] BYREF
unsigned int v12; // [rsp+104h] [rbp+E4h]
unsigned int v13; // [rsp+124h] [rbp+104h]
char v14; // [rsp+1F4h] [rbp+1D4h]
v0 = &v4;
for ( i = 74i64; i; --i )
{
*(_DWORD *)v0 = -858993460;
v0 += 4;
}
sub_14001137A(&unk_14002400E);
v5 = 0;
v6 = 0;
v7 = 59;
v8 = 29;
v9 = 0;
v10 = 0;
sub_14001119A(byte_14001AD30);
do
{
while ( 1 )
{
while ( 1 )
{
sub_14001119A("请输入移动指令 > ");
sub_140011203(" %c", v11);
v12 = v9;
v13 = v10;
v14 = v11[0];
if ( v11[0] == 67 )
{
--v12;
goto LABEL_14;
}
if ( v14 == 88 )
{
++v13;
goto LABEL_14;
}
if ( v14 == 89 )
break;
if ( v14 == 90 )
{
++v12;
goto LABEL_14;
}
sub_14001119A(asc_14001ADE0);
}
--v13;
LABEL_14:
if ( v12 <= 0x3C && v13 < 0x1F )
break;
v9 = 0;
v10 = 0;
sub_14001119A(asc_14001AE08);
}
if ( aA[61 * v13 + v12] == 36 )
{
v9 = 0;
v10 = 0;
sub_14001119A(asc_14001AE38);
}
else
{
v9 = v12;
v10 = v13;
sub_14001119A("你移动到了 (%d, %d)\n", v12, v13);
}
}
while ( v9 != 59 || v10 != 29 );
sub_14001119A(asc_14001AE90);
sub_140011316(v3, &unk_14001AD00);
return 0i64;
}
ai分析得到方向
此段代码看到下方有一个“v9 != 59 || v10 != 29”,这就说明了我们的地图大小为60*30
路径解决
深度优先搜索
什么是DFS
深度优先搜索,即DFS,一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。
一个形象的演示
深度优先搜索一般是通过递归来实现的,“递”的过程就是往下搜的过程对应着深度,“归”的过程就是回溯,回退上一级
基本思路(特点)
- 不论道路通或不通以及通向何处,都是一直朝一个方向往深处探索的,直到撞墙
- 遇到墙后才往回走,且只回溯到上一个节点,然后选择其他的方向行进
- 从出发点一直深入,遇墙回溯,直到到达终点结束
宽度优先搜索
什么是BFS
宽度优先搜索,即BFS。C++中的 (Breadth-First Search,BFS)是一种图遍历算法,它从图中的一个特定顶点开始,按照“广度”优先的顺序逐层遍历图中的节点。该算法通常用于寻找最短路径、图的连通性以及状态空间搜索等领域。
所谓广度,就是一层一层的,向下遍历,层层堵截。
详细来讲:从初始节点开始,应用算符生成第一层节点,检查目标节点是否在这些后继节点中,若没有,再用产生式规则将所有第一层的节点逐一扩展,得到第二层节点,并逐一检查第二层节点中是否包含目标节点。若没有,再用算符逐一扩展第二层所有结点……,如此依次扩展,直到发现目标结点为止 。
基本思路(特点)
- 一层一层的遍历,按层遍历,同层的都试完后进入下一层
- 所有点分为已访问的点和未访问的点,已访问的不会再次访问
- 一旦找到终点立刻结束,这样就能实现最短路径
对于BFS和DFS比较形象的一个比较
上面的那个例子需要的是最短路径,所以采用BFS
写脚本
maze=[['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1'],['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1'],['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],['1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '0', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '0'],['1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '0'],['0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0']]
from collections import deque #使用 deque(双端队列)来实现广度优先搜索(BFS)。deque 提供了高效的队列操作,支持从头部和尾部快速添加和删除元素。
def bfs(maze, start, end): #定义bfs函数
rows, cols = len(maze), len(maze[0]) #从maze中提取地图每行每列的元素的个数
directions = [(0, -1, 'C'), (0, 1, 'Z'), (1, 0, 'X')] #定义三个可能移动的方向的代码,C,Z,X
queue = deque([start])
visited = set([start]) #使用deque存储已访问的点
prev = {}
while queue:
x, y = queue.popleft()
if (x, y) == end:
break
for dx, dy, d in directions:
nx, ny = x + dx, y + dy
if 0 <= nx < rows and 0 <= ny < cols and maze[nx][ny] == '0' and (nx, ny) not in visited:
queue.append((nx, ny))
visited.add((nx, ny))
prev[(nx, ny)] = (x, y, d)
if end not in prev:
return None
path = []
x, y = end
while (x, y) != start:
x, y, d = prev[(x, y)]
path.append(d)
path.reverse()
return path
#定义路径查找的函数
def find_shortest_path(maze):
rows, cols = len(maze), len(maze[0])
start = (0, 0)
end = (rows - 1, cols - 1)
path = bfs(maze, start, end)
return path
path = find_shortest_path(maze)
print("".join(path) if path else "No path found")
得到后通常还需要进行md5加密(结果为32位)