BUGKU -- MountainClimbing

文章目录

脱壳

将程序拖入查壳工具后,显示upx壳
在这里插入图片描述
在这里插入图片描述
使用官网的upx脱壳失败
这里有两种方法:
1:多去试试几个脱壳工具
在这里插入图片描述
2:使用od来进行脱壳
将程序拖入od
在这里插入图片描述
可以看到pushad对程序进行了压栈
单步执行一下,在ESP处设置一个硬件断点
在这里插入图片描述
然后运行程序,断下来后在调试里再删除硬件断点,否则程序会一直断下来
在这里插入图片描述

然后继续单步执行,发现下面有个小的循环,直接在下面的跳转处设置一个断点,运行到下面的跳转,然后单步执行
在这里插入图片描述

这样就找到了程序原本的入口点,然后获取eip作为oep脱壳保存即可
在这里插入图片描述

分析

将脱壳后的程序放入IDA中
在这里插入图片描述

限定了输入的字符串个数为19个,且输入只能是L或R,否则就直接error。而在开头用了一个伪随机数,伪随机数不管在任何电脑上运行输出的都是同一个结果
在这里插入图片描述
根据程序运行时提示的maximum和题目mountain climbing可以猜测本题目为获取最大值,所以将伪随机数数组弄出来看看

RRRRRLLRRRLRLRRRLRL
而我们的输入经过了一个函数的修改,我们的目的是输入的字符串经过这个函数的变化后变成RRRRRLLRRRLRLRRRLRL
在IDA里跟进这个函数里看看
在这里插入图片描述
emmm,不太看得懂,进OD里面调一下吧。

调试

找到这个函数的地址,然后进OD调试下断点
在这里插入图片描述
在00411CBA处下一个断点,然后直接运行
将我们的字符串输入进去
在这里插入图片描述
00411C8B函数就是修改的函数,直接单步跟进去看一下
在这里插入图片描述
继续跟进下面的函数
在这里插入图片描述
进去之后看到这样一个东西,可以发现就是之前change函数最里面的那个地方
在最下面有个retn,我们直接让他执行到retn
在这里插入图片描述
返回到了这里,我们继续单步跟进,注意观察寄存器窗口,发现我们的参数后直接跟随数据窗口,在下面可以看到进行了一个xor 4与4进行异或的操作,我们一直跟进来观察数据窗口的变化
在这里插入图片描述
从数据窗口中可以看到,进行了偶数位跟4异或的操作
直接执行完后将这串字符串拿出来或者自己写个脚本即可拿到flag
在这里插入图片描述
脚本:
在这里插入图片描述
在这里插入图片描述
flag:zsctf{RVRVRHLVRVLVLVRVLVL}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值