攻防世界逆向高手题之gametime
继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的gametime
下载附件,照例扔入exeinfope中查看信息:
32位无壳,运行一下程序看看主要信息:
说实话我一开始没看懂怎么玩,所以扔入IDA32中查看伪代码信息,有main函数看Main函数:
哇,眼花缭乱,代码太多了。这里积累第一个经验,游戏题一定要玩懂才行,没那么难玩的,如果游戏文字跳转太快看不清,很难玩,就看着反汇编代码来玩。用OD等动态调试器在游戏结束时保持最后界面,以此来用最后结束时的界面信息根据伪代码判断在哪里退出的,从而找到第一个判断函数。
.
.
上OD动态调试:
.
.
终于可以看清游戏规则了,出现s就按空格,不然就退出:(后面还有按x和m的),在IDA伪代码中查看对应信息:
终于在众多代码中找到判断函数了,双击跟踪:
结合刚才结束界面的回显信息,进一步缩小了判断函数的范围。然后这里积累第二个经验:游戏类题目,有些是存储型flag,就是flag本来就在那里,你解出游戏就会显示。而有一些是与用户输入相关的生成型flag,就是用户通关的每一步影响着flag的生成,比如通一关给一部分flag这样。
这道题明显是后者,但是生成型flag中又要看输入到底怎么影响flag生成,如果是那种以通关数生成flag的话,我们改一下判断条件就可以全部通关了。但如果是那种通关的时候要靠用户输入字符,并考输入的对应字符来生成甚至是加密后再生成一部分flag的话,这种题就要一个个找到对应的通关字符然后再逆向逻辑才行。
而这题比较简单,是只判断通关数即可生成flag,为什么我会知道呢,其实我猜的。(笑~) 所以我们用OD修改判断条件即可。
.
.
.
看判断函数的反汇编代码:
在OD中修改对应内存地址的反汇编代码,你也可以直接用IDA调试:
前面一切正常,因为但是后面出了问题:
前面正常是因为下面三个都是同一个判断函数:
.
.
后面出错就去后面找,发现还有三个判断函数:
.
.
老样子双击跟踪找汇编代码:
.
.
继续运行程序,成功输出:
.
.
总结:
1:
这里积累第一个经验,游戏题一定要玩懂才行,没那么难玩的,如果游戏文字跳转太快看不清,很难玩,就看着反汇编代码来玩。用OD等动态调试器在游戏结束时保持最后界面,以此来用最后结束时的界面信息根据伪代码判断在哪里退出的,从而找到第一个判断函数。
2:
这里积累第二个经验:游戏类题目,有些是存储型flag,就是flag本来就在那里,你解出游戏就会显示。而有一些是与用户输入相关的生成型flag,就是用户通关的每一步影响着flag的生成,比如通一关给一部分flag这样。这道题明显是后者,但是生成型flag中又要看输入到底怎么影响flag生成,如果是那种以通关数生成flag的话,我们改一下判断条件就可以全部通关了。但如果是那种通关的时候要靠用户输入字符,并考输入的对应字符来生成甚至是加密后再生成一部分flag的话,这种题就要一个个找到对应的通关字符然后再逆向逻辑才行。
而这题比较简单,是只判断通关数即可生成flag,为什么我会知道呢,其实我猜的。(笑~) 所以我们用OD修改判断条件即可。
解毕!敬礼!