本帖最后由 zzhwaxy 于 2020-5-25 12:54 编辑
逆向学习 之 巧解迷宫问题
前言
这是我以前做过的一道CTF的题目。
这道题目需要Linux环境才能运行。
之所以讲这道因为它是一个挺典型的迷宫问题。
这类题目一般比较有趣并且考验脑洞。
开始分析
迷宫初始化
0x601060: 32 ' ' 32 ' ' 42 '*' 42 '*' 42 '*' 42 '*' 42 '*' 42 '*'
0x601068: 42 '*' 32 ' ' 32 ' ' 32 ' ' 42 '*' 32 ' ' 32 ' ' 42 '*'
0x601070: 42 '*' 42 '*' 42 '*' 32 ' ' 42 '*' 32 ' ' 42 '*' 42 '*'
0x601078: 42 '*' 42 '*' 32 ' ' 32 ' ' 42 '*' 32 ' ' 42 '*' 42 '*'
0x601080: 42 '*' 32 ' ' 32 ' ' 42 '*' 35 '#' 32 ' ' 32 ' ' 42 '*'
0x601088: 42 '*' 42 '*' 32 ' ' 42 '*' 42 '*' 42 '*' 32 ' ' 42 '*'
0x601090: 42 '*' 42 '*' 32 ' ' 32 ' ' 32 ' ' 32 ' ' 32 ' ' 42 '*'
0x601098: 42 '*' 42 '*' 42 '*' 42 '*' 42 '*' 42 '*' 42 '*' 42 '*'
从这里可以看出是一个8*8的迷宫。
其中:
“*” -> 外墙
" " -> 通路
"#" -> 终点
迷宫规则
1. 不能走出墙外
2. 步数必须为18步
移动方向
"." :↑ 8 格
"0" :↓ 8 格
"O" :← 1 格
"o" :→ 1 格
设计思路
每次走完一步,会验证当前所在的位置。
如果不为" "或"#",则失败。
同理,如果走的位置不在迷宫之内,也会失败。
当前坐标
[rsp+4] 保存 所在行
[rsp] 保存 所在列
合起来就是当前坐标
视频分析
链接: https://pan.baidu.com/s/1nCA6AXuxnbewYSL-DC556g 密码: ra27
具体分析会放到视频中去讲。
至于flag,我就不放出来了。
感兴趣的可以做一下这个题目,然后分享一下你的思路和答案。
|