攻防世界 ----- gametime

gfsj ----- gametime

昨天做了一道攻防世界的题key和这个gametime,都是动态调试的题。key还稍微简单一些,gametime稍微费点时间,记录一下。

昨天晚上可能是没进入做题的状态(疯狂为自己找借口),动态调试的时候稍微有点难受,就没有做出来,今天早上改完计网的题做了二十分钟就出来了。还是要专注一点呐!

废话不多说,看题。

先运行一下题目给的程序

攻防世界 ----- gametime

大致就是遇到s就按空格,遇到x按x,遇到m按m,前面都还按的挺顺畅的,后面就快了,反应不过来,按错了就直接退出。甚至玩通关了之后出现了flag还没来得及截图就退出了,更不用说复制了。

就动态调试吧。

通过刚刚玩游戏发现程序有输入的地方,那么我们猜测这个题的做法:F8的时候程序一定会在某个地方停住,下断点,重新载入,F9,在下断点的地方按F7,进入跟踪,然后F8……,一直循环,直到发现有用的函数。

程序载入OD,F8单步走,走到不能动的地方,下断点
攻防世界 ----- gametime
重新载入,F9,然后F7进入函数
攻防世界 ----- gametime

然后一路F8,直到F8不能动,再下断点
攻防世界 ----- gametime
再重新载入,F9到下的第一个断点处,现在我们可以把这里的断点去掉了。然后F9到第二个断点处。
重复上面的操作,直到程序出现…s
攻防世界 ----- gametime
这里就是让我们输入了,看看汇编
攻防世界 ----- gametime
我们在输入框那里输入空格,OD里面就可以继续F8了,再继续走就是让我们输入x/m的测试了。就按照之前的做法继续做……
之后就是正式的游戏环节,我调试的时候在输入空格、m、x的地方都下了断点。我们输入的时候可以发现,汇编指令那里有个jnz指令,输入的正确那么跳转就成功,输入的不正确就跳转不成功,然后进入一个提示失败的指令,如下图:
攻防世界 ----- gametime
运行到要输入的时候就随便输也行,输错了就改ZF标志位,让jnz跳转成功,输入大概五六个之后程序就会显示flag
key is (no5c30416d6cf52638460377995c6a8cf5)
所以flag:no5c30416d6cf52638460377995c6a8cf5