查看文件类型:
File 命令进行查看文件类型
看出ELF类型的64位程序
也可以使用工具直接查看
放到ubuntu里面运行一下查看程序运行的过程
当程序运行的时候,会提示我们输入flag并且根据我们输入的值进行运算后得到真正flag的值。
使用ida进行分析,首先看到puts提示输入字符串放入s1中,然后进入了if判断
S1长度要等于24,前五个字符是nctf{,最后一个字符是}
nctf{xxxxxxxxxxxxxxxxxx}这种格式
接着看判断里面的逻辑处理
逐个对我们输入的字符串进行判断,79(O),111(o),46(.),48(0)
来判断字符串中是否是这四个字符,如果是就进入相对应的函数中进行处理
79(O)判断字符为大写O的时候
*al的位置--,也就是向左移动,并且最后不能移出地图也就是要大于0才可以
111(o)小写o
首先+1然后覆盖变量v1后在进行赋值,也就是向右移动一位,并且不能大于8
也可以从这里进行判最右边是的个数是8,也就是地图的长度是8。
46(.)
向上移动一位,边界是0,不能移出地图
48(0)
向下移动一位,最底下的值是8
到这里可以看出来,这是一张8*8的地图迷宫
O(左) o(右) .(上) 0(下)
现在就是要找到地图的图纸
可以看到最后存在恭喜字样的地方,就是根据地图来进行判断是否走出迷宫,没有就goto回去,成功就返回flag
asc_601060
粘贴出来,8*8
s = " ******* * **** * **** * *** *# *** *** *** *********"
x = ""
for i in s:
if i == ' ':
x += '0'
elif i == '*':
x += '1'
else:
x += i
随后根据0的位置找到#号
也就是根据O(左) o(右) .(上) 0(下)
考虑到迷宫的起点就是0,0这个位置
o0oo00O000oooo..O刚好18位
nctf{o0oo00O000oooo..O}