Bugku——Take the maze详解

文章目录

题目

题目地址:Take the maze
在这里插入图片描述

解题

说句实话,这题看起来很简单,但其实是一道非常狗的题,谁做谁知道!

我们直接进OD查字符串,定位到key error这里:
在这里插入图片描述
这里可以看到,并没有什么跳转可以跳过它,说明这是一个外部调用,我们需要出这个CALL去分析,我们在断尾下断,以免程序跑飞了:
在这里插入图片描述
出CALL后发现有一个JE可以跳过它,我们把它改为jnz。
在这里插入图片描述
然后随便输入一串key让它判断去吧,程序断在我们的断点,我们F8出CALL,下面的第一个JMP会跳过程序输出flag,所以我们要NOP掉:
在这里插入图片描述
在这里插入图片描述

到这里还没完,我们继续F8往下走,下面的这个jge会跳过一个二次判断,但是这里没有实现跳转,我们把它改为jnz:
在这里插入图片描述
到这里继续F8,把这里的je改为jnz,让他执行那三次函数调用,这里我跑过了,不过不影响我们解题。
在这里插入图片描述
继续F8,程序跑起来了,我们按照他说的,按任意键继续,途中的断点我们都取消,成功绕过了程序的判断,让程序输出了最终的flag.png~
在这里插入图片描述
扫码后拿到提示:Congratulations! The flag is your input + “Docupa”,当时我就蒙了,这可不是我想要的flag啊!
在这里插入图片描述
到这里就是(kai)一(shi)个(gou)坑(le),程序虽然我们已经破解了,但是正确的flag必须根据input+Docupa来组成,我们前面输入的肯定是不对的,最终还是看了论坛大佬写的帖子,按照他最终的脚本拿到的flag。

a = list("06360836063b0839073e0639")
a[16] = chr(ord(a[16]) ^ 1)
for i in range(24):
    print(chr(ord(a[i])^i), end='')

运行结果:
在这里插入图片描述
最终flag:zsctf{07154=518?9i<5=6!&!v$#%.Docupa}

相关链接:吾爱破解

发布了60 篇原创文章 · 获赞 68 · 访问量 8397

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/105131091