首先根据题目发现这是一个迷宫。
首先用Exeinfo PE打开看到这是64位的ELF文件
然后我们用ida64打开,查看伪代码
首先伪代码中有很多数字,我们按R键转换为相应的字符。
接着我们开始分析伪代码,
首先我们先查阅strncmp函数的作用
因此我们知道这个if函数是要判断我们输入的flag是否满足长度为24,并且flag是否包含nctf{}
然后我们往下看代码
低8位用来存储迷宫的列 高8位用来存储迷宫的行 它是一个__int64位的数据
v9+1就是v9的高8位的值
查看这部分代码发现了两个函数 sub_400650 和函数 sub_400660,键入这两个函数
然后我们继续向下看代码,又发现类似的两个函数
然后我们总结一下:左O右o上.下0
根据这个if函数我们可以得出这是一个8*8的迷宫,如果这个if条件不等于#那么跳转到20wrong flag,等于#则提示正确,说明这个迷宫的终点就是达到#。
然后我们进入asc_601060这个函数看一下发现
这是一串字符,可能就是本题的迷宫,然后我们又知道迷宫的规格是8*8,所以我们整理一下
然后我们又发现上边四个函数都跳转到了14,14有跳转到了15
然后我们键入sub_400690函数看看
经过分析,他是判断是否等于‘空格或#
if里的条件为真,即为result不等于空格或# 即撞墙,然后就跳转22输出错误
所以我们分析迷宫的路径
右下右右下下左下下下右右右右上上左左
换成他们各自代表的符号
o0oo00O000oooo..OO
最后的flag=nctf{o0oo00O000oooo..OO}