这道题硬是拖了两天。。
下载下来,丢到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直接就出来了
CTF之Bugku 游戏过关
最新推荐文章于 2024-05-11 02:11:37 发布