Re学习(buuctf:Maze)

        单独写一篇解CrackRTF的文章,记录一下修改堆栈的流程和花指令。

Maze

        推荐文章:

IDA出现"sp-analysis failed"和F5(反编译)失败 - 灰信网(软件开发博客聚合)

[推荐]IDA sp-analysis failed 不能F5的 解决方案之(二)-软件逆向-看雪-安全社区|安全招聘|kanxue.com

#逆向-花指令篇 | Sealの北极小屋

CTF逆向基础----花指令总结_ctf re 花指令-CSDN博客

花指令和去花 - T0fV404 - 博客园

        先放入查壳软件,有upx壳。

       因为文件名中有空格,去壳程序无法识别

       修改文件名后成功去壳

       去壳后再次放入查壳软件,是32位的,打开ida。

       找到关键字符串却无法查找哪个函数使用

       在函数名中找到start函数,其中发现main函数

        一、main中的红色地址

        双击main函数,发现地址是红色的,也无法按空格转换到图形视图,更不能F5反编译。查阅资料后得知,IDA对于未识别出的函数都显示地址为红色,如果创建框图的区域ida不知道界限,或者有不认识的指令,就没办法显示为图形视图。

       所以需要在函数头点击右键-->Create Function(快捷键P),让IDA能够识别这个函数。

       出现错误提示,所以我们选中任意的一部分IDA分析不出来的代码按P来创建函数

       创建函数后能够F5反汇编

        二、花指令与堆栈错误

        还没完,提示这个函数’endp ; sp-analysis failed’。而且发现代码中存在jumpout(xxxx)的形式,这是一种不被执行的花指令。

       点击Options-->General-->选中Stack pointer,可以查看代码的堆栈指针

       在修改堆栈之前,要先把花指令的代码去掉,花指令为了干扰反汇编,增加静态分析的难度。

可以阅读一下这两篇文章CTF逆向基础----花指令总结_ctf re 花指令-CSDN博客

花指令和去花 - T0fV404 - 博客园

       在loc_40102E函数的开始,call  near ptr 0EC85D78Bh跳转到一个地址处,很明显这是一个错误的地址。jnz  short near ptr loc_40102E+1也是无用的代码。所以可以用nop指令对其进行填充,点击这行代码-->右键-->NOP(快捷键Ctrl+N)

        但是不能全部nop,因为这句话后面可能有关键代码。按d转换为数据后把call的硬编码(0E8h)nop掉,这是常见的一种花指令。

       发现后面这堆数据还是没有变化

       于是把顺序反过来,先把无关的花指令去掉,再用P创建函数,成功得到正确的函数。

        三、正确函数

        分析函数,输入长度为14,wsad分别代表上下左右,n5=5并且n6=-4时得到flag

       可以看出这是一个迷宫,初始位置在(7,0),迷宫总共70位,所以猜测是7*10的迷宫。

       写脚本把迷宫画出来

maze=[0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2A,
      0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x20, 0x2A, 0x2A,
      0x2A, 0x2A, 0x2A, 0x2A, 0x20, 0x20, 0x20, 0x20, 0x2A, 0x2A,
      0x2A, 0x2A, 0x20, 0x20, 0x20, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
      0x2A, 0x2A, 0x20, 0x2A, 0x2A, 0x46, 0x2A, 0x2A, 0x2A, 0x2A,
      0x2A, 0x2A, 0x20, 0x20, 0x20, 0x20, 0x2A, 0x2A, 0x2A, 0x2A,
      0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A]
for i in range(len(maze)):
    if(i%10==9):
        print(chr(maze[i]))
    else:
        print(chr(maze[i]),end="")

       从+开始走,迷宫的走法是下下左左左下左左下下右右右上,n5=7-5+3=5,n6=0-5+1=-4,符合判断条件,得到flag{ssaaasaassdddw}

四、总结

        一开始只认为是创建函数和堆栈不平衡的问题,没有想到花指令,还是做的题不够多,没有了解到各种花样。查阅了大量资料后,学习到了基本的花指令和如何去花,下次包能认出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值