BUUCTF在线评测 (buuoj.cn)
查一下壳,32位upx壳
脱完壳放到ida,shift+F12看一下字符串,是个迷宫,maze(迷宫)
这里有一个经典的花指令 (导致找不到main函数)
下方有个奇怪的jnz指令,它跳转到了下一行,相当于没跳
我们可以发现 call的这个地址根本不存在,这里两种方法
第一种用ollydbg nop掉
找到这条call指令对应的地址,是0040:102E这个位置
由于 0040102C执行了jump 所以也要跟着一起patch掉 ctrl+E
这个call指令,不能全部nop,因为后面那个东西可能是有效代码
修改为 90(nop)
选择复制到可执行文件(所有修改) 然后保存文件
然后再IDA打开
花指令就被去除了
第二种是ida nop掉
这个call指令,不能全部nop,因为后面那个东西可能是有效代码(我先全部nop掉了没法f5)。
(注:nop40102E是不要全部nop,防止关键信息也被nop掉,先用d键转化为字节数据,在一个一个试,先nop第一个,在nop前两个。。。。)
按d将其先转换为字节数据。
在花指令的链接中,那篇博主总结了花指令的常见情况,知道了db 0E8h是添加花指令,继续nop掉
nop掉之后IDA自动的将后面的数据转换为代码数据
此时数据地址是红色的,仍然没法f5反汇编,将关键代码全部选中,按p键将其声明为函数
然后就可以F5伪代码了
- flag的长度为14,分析代码可知:开始dword_408078=7,40807c=0,坐标是(7,0),然后要让dword_408078=5,40807c=-4,意思是结束的位置是(5,-4),然后w表示上,s表示下,a表示左,d表示右
- 这是一道迷宫题,先打印一下字符
*******+** ******* ** **** ** ** ***** ** **F**** ** **** **********flag{ssaaasaassdddw}
本题考察了花指令和迷宫,需要先把花指令去掉,然后自己根据逻辑构造一个迷宫,用wasd分别代表上左下右走出迷宫,即flag