一道 CTF 逆向入门题(“游戏过关”)

有时候想:学习这方面已经有两个月了,却一道 CTF 题都没有玩过。于是我就找了道极其入门的题目来继续我学习的兴趣

本题来源:BugkuCTF

先放上程序:https://pan.baidu.com/s/1fvvKRbx-Yh0eW7vzwUremw

首先,运行程序:

这个意思好像是说只要让所有的灯都亮起来,就能得到 flag 。随便输几个,然后完全没找到规律。

那么就运行 Ollydbg

。。。,好吧,查找一下字符串

哦豁,看到“done!!! the flag is ”,眼前一亮,双击进入

后面一串都是差不多的东西,让我摸不着头脑。不过,既然已经显示出这个字符串了,那说明后面就跟着 flag

那么就去这个函数的头,看看是谁调用的它

又来到一堆 jmp ,不过还好,我们可以看到是谁调用的这个 jmp,继续跟随

来到一个充满这 条件跳转命令的地方,看起来很稳,因为需要判断每个灯是不是都亮着。

但是我懒得研究这个,我发现:这些 jnz 都不约而同地跳转到 call 命令的后面一条命令。看来这是一个动真格的地方,我们继续往上看

哦豁,这上面不就是游戏介绍嘛,说明我们在 main() 函数里,这后面肯定有个 scanf(),不如就在这里设一个断点吧,然后运行到这

接下来 F8 到底,嘿嘿。直到遇到我们的 jnz(随便输一个 n)

然后呢,懂吧,直接改 ZF 的值,改成1,让每次的跳转都无效

然后一路顺畅,来到 CALL 01237AB4

那还等着干什么,直接 F8,结束游戏

啦啦啦啦啦~就是这样,啥也不懂就是干,Ollydbg 真好用!

其实我觉得那个调用“done!…”的地方的后面一堆 mov 就是把 flag 输出来(我觉得比较正常的做法应该就是拿着个下手),但是一是因为我不知道怎么把后面的十六位数组全部复制出来转换成 ASCII 码(我不会我也不想一个一个自己输),二是我觉得这个实在是太长了,从 0x0-0x99?反正很多,看起来很麻烦。

这样子的做题肯定没有任何卵用啦,主要还是得深究,但就是觉得很好玩,既然做了就写个博客吧,纪念我做的第三道 RE 题,嘻嘻

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒