easy_Maze
这个题简单,迷宫题目,需要动调,或者不用动调也行,可以自己算出地图,我用的是动调。
生成地图的两个函数

只需要动调到这两个函数的下一步后,找到储存矩阵的空间的地址, 把这个地址转到数据窗口跟随. 运行到生成矩阵的下面一个函数. 得到生成的矩阵.

把数据复制下来,每个数据是 占了四个字节(小端存放),然后根据函数外可知地图是7 * 7,紧接着把高28位的数据去掉,留下低四位,形成一副7*7的地图,顺着1按完asdw即可
即 UNCTF{ssddwdwdddssaasasaaassddddwdds}
梅津美治郎
这题的话,不难,只是得看出那个回调函数那里玄机
level1

直接得出字符串: r0b0RUlez!
level2分析

这里有个debugbreak函数,这函数的话,也就是相当于一个int 3指令,引发一个中断,把执行权移交给调试器,如果没有调试器,那就移交给其他异常处理回调函数,如果都没有,那么程序就自己断下来,这里就是为了触发回调函数,如果没有调试器附加,

那么debugbreak产生的异常会被AddVectoredExceptionHandler添加的回调函数捕获来处理,这里添加的回调函数也就是


就这个函数,成为了捕捉异常的回调函数。。
当我用OD的时候,发现这个int 3直接被patch掉了,不会触发异常回调函数,然后就直接return 0了。最后直接调用主函数外面的exit(0),直接跑0x7开头的地址,跑飞了,然后就没了。。这里用ida动调看看这个回调函数里面的东西。

再来动调看看这个数组值


然后看看紧接着输入字符的运算与这个数组的关系

直接异或2即可,上代码
a=[0x75,0x31,0x6E,0x6E,0x66,0x32,0x6C,0x67]
b=''
for i in a:
b+=chr(i^2)
print(b)

两部分使用下滑线连接起来为flag{r0b0RUlez!_w3lld0ne}
本文介绍了一道简单的迷宫题解决方法,并通过调试技巧获取地图数据,还讨论了level1和level2级别的分析,包括如何利用调试中断来触发异常处理函数。
2580

被折叠的 条评论
为什么被折叠?



