Re学习之攻防世界-easy_Maze
目录
攻防世界-easy_Maze
步骤
查看文件类型,拖进Ubuntu,终端file命令ida打开,找到main函数,F5查看伪代码,发现一共三个步骤
进入到Step_0()
a3为主函数中的v7,a2=7,a1是主函数中的v9。继续分析代码,看的出来一共执行了49次,这说明了v9这个数组并不是如ida翻译的那样是个长度为7的数组,它后面的那些数据也应该是v9中的数据。
这样我们就可以写一个类似的代码来跑一下,看看经过Step_0之后v7的值变成了什么,显然这一步还是挺好理解的。
来到Step_1()
很是复杂的一个函数,里面还有。。。
然后就倒在了这里(本来想不看大佬们的wp自己搞的),大佬们的wp里大都是用的动调,因为Step_0,Step_1都是在输入函数之前,且这两个函数的作用就是用来生成迷宫,然后在Step_2中输入并判断该处是否为1,所以完全可以使用动调,然后在栈里面查看数据。
附上:ida动调的博客
下好断点
F9自动进入debug,并执行到断点处
在右下角Stack view里面右键跳转到RSP(栈顶,上一步执行完后数据存储的地方,即地图数据),在右键跟随16进制数据,如此左下方的Hex view就会跳转到RSP
这里就是地图了,把数据提取出来(手写也不多。滑稽脸)然后wasd就可以把flag整出来了。
总结
如果在输入之前有什么数据会自动生成的话,就可以对其进行动态调试,通过对内存的查看来找出其自动生成的那部分数据,以求对后续步骤产生作用。