CTF之Bugku 游戏过关

这道题硬是拖了两天。。
在这里插入图片描述
下载下来,丢到ida和ollydbg里面
在这里插入图片描述
在ollydbg里面运
在这里插入图片描述
我们看到ida里面,shift+f12搜索字符串
在这里插入图片描述
马上就看到有个flag
做这种逆向的时候字符串搜索是一个很方便的功能,可以更快的找到flag
类似的,ollydbg也有,右键
在这里插入图片描述
智能搜索
在这里插入图片描述
窗口的选项可以回到刚刚的界面
在这里插入图片描述
我们看到了flag字样接下来就是想怎么样让程序直接执行到这里
这个程序也可以不用工具直接运行,完成条件得到flag
但这样就失去了这个题目的意义
所以还是用工具来学习下
在这里插入图片描述
双击这一行
在这里插入图片描述
我们发现这句话是一个变量,是用aDoneTheFlagIs装着
鼠标左键点一下这个变量,让它变成黄色,按键盘上的x
查看这个变量在什么地方引用,之前在网上搜的时候也叫交叉引用
就是别的地方用到这个变量的意思
点了x后弹出来的窗口点OK
在这里插入图片描述
是这么一段汇编程序(不知道汇编的同学还要去学学汇编。。)
这里大概率就是我们flag形成的一个函数了
我们就是要让程序按照我们的意愿直接执行到这里
我们在ida上方点options---->general---->line prefixes勾上
显示这些语句的地址
在这里插入图片描述
这个函数的地址从0045E940开始,也就是说我们要让程序跳到这里执行
我们在ollydbg里面调试
之前尝试了下,不能直接一次跳到这个函数,那么我们先跳到靠近这个函数的附近
再跳到这个函数里面
在这里插入图片描述
我选择的是先跳到上图的这一行,双击
在这里插入图片描述
按f2下断点,画圈圈的地方变成红色,程序执行到那里会停下来
回到程序,随便输入数字,回车
在这里插入图片描述
程序确实在这里停下来了,我们把停下来的下一句改掉
改成跳到flag函数里的语句
选中要改的行,按空格
在这里插入图片描述
语句是jmp 0x24e940
jmp后面代表的是地址,但这跟ida里面的地址0045e940不一样
0x24就是0024的意思,和0045相对应,是段地址,也就是内存被分成了很多段
但是每段都一样长,所以后面的偏移地址e940是一样的
在这里插入图片描述
改好语句,点汇编,那句就改了
点刚刚停下来的地方,按f8,这是在帮程序手动执行
执行完刚刚改动的地方后,我们来到了flag的函数
在这里插入图片描述
接下来就是f8,一直单步执行
执行到这个地方
在这里插入图片描述
我们回到ida里面
对着刚刚的flag函数按tab或f5
让他变成类C代码
在这里插入图片描述
其实就是一段循环,我们做题不需要知道这个循环在干什么,所以跳过这个循环就好了
回到ollydbg
在这里插入图片描述
再循环结束的下一句下一个断点(别问我怎么知道这是循环结束,不知道说明一些基础知识还不够。。。)
然后点运行,就是画圈的按钮
在这里插入图片描述
执行完后flag直接就出来了

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值