CTF之Bugku 游戏过关

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

你可能感兴趣的:(CTF)