这道题是本周的任务之一,是一道迷宫题,因为是华南师大的赛题我一开始以为很难,抱着试试的心态去做,没想到并没有我想象中的难,挺简单的哈哈哈哈,但可能有一点取巧了
首先检查程序,是一个 32 位的无壳程序,然后就是丢到 ida pro 中看主函数,然后可以看到以下这部分
它的关键部分就是我圈起来的这一部分,也就是这个 check 函数,同时它有一个条件是 flag 的长度要为 24 位,也就是说走出这个迷宫的路径就是 24,现在我们先查看一下 check 函数
1 | bool __cdecl check(char *flag) |
其中有一个 maze 数组,这应该就是我们的迷宫图了,我们点进去看,可以看到迷宫的组成
虽然有了它的组成部分,但是我并不知道它的格式是什么,从 check 函数来看,因为 @是第 14 位,所以我可以知道 @就是起点,终点都不用想,肯定是 #了,那么现在问题的关键就是要知道这个迷宫的格式,他肯定是个矩阵型的,这才符合一个标准的迷宫图形
这里我想到一个办法,就是把它复制粘贴到 word 文档中,看它有多少个字符,看会不会符合一个矩阵型,然后发现它一共有 169 个字符,我就想这不就是 13 的平方吗?于是我就赶紧操作起来,把它分为了一个 13×13 的迷宫,这就是它的格式了(也是我取巧的部分吧)
弄完之后就是长这个样子
然后我就以 @为起点,# 为终点来走迷宫(注意要是最短路径),然后走出了一个长度为 24 的路径,用 WASD 来表示上下左右,点开程序输入进去,发现是对的。不过这里有一点要注意一下,就是迷宫的每一步都要对齐,不要一下子就飘到另一个地方了,我一开始因为这样而错了好几次。
最后的结果如下
所以 flag 就是:flag{sssssdsssddsdddwwdwwaaaw}