1.re2-cpp-is-awesome
分析
打开看看,发现需要一个参数。在IDA里查找这个luck next time,交叉引用
再次交叉引用,发现到main函数。
这里就是关键的对比了,看起来像是v8经过某个处理后与明文表对比。动态调试看看,下端点在v8,发现我们所输入的字符串没有被处理过,那就更简单了,直接最原始的明文对比。
每次将执行到这里会出现一个flag明文,在下面的跳转指令初,修改的值使得程序一直验证正确。最终得到明文flag ALEXCTF{W3_L0v3_C_W1th_CL45535}
总结
这篇C++的题从静态上看着很复杂,但是找到验证的点和参与验证的参数,再追到参数变化即可,只是这里的参数没有进行变化。。可能还有更简单的做法,我只做到这里了,这题属于C++简单题。
2.The_Maya_Society
分析
打开题目,发现有很多个文件。我很少遇到这种题,一般遇到也是不会做。但里面有一个launcher文件似乎是一个elf
使用IDA查看也是一些正常的函数,但是地址似乎错了。只能用EDB调试一下
当执行到这里时候,看到获取本地时间
结合静态函数知道,接下来sub_45a会对该时间字符串进行处理。跟进去看看
四个常数很像是md5加密的特征。继续动态调试往下看看
在执行到第五个sprintf的时候看到参数里出现了md5加密后的字符。但是题目交互里没有给出什么失败或者成功的字样。有点迷惑,查阅得知玛雅文明的终结是2012-12-21所以将时间设定之后再次运行,可以得到flag。
flag{e3a03c6f3fe91b40eaa8e71b41f0db12}
总结
有点像misc题,但是也有收获。遇见很多个文件的题,查看关键文件信息,会有收获。常用的直接在linux里 strings [binary]
3.gametime
分析
打开试玩,确实是一个小游戏,就是在它给出一个指令的时候需要输入按下相应的按键。一共只有x m 空格 三种类型。如果失败了就会提示
访问该网址没有打开。
在IDA中查找该字符串,交叉定位到对应函数
我将它重命名为了check。在OD中找到该函数,下断点。执行的时候会发现每次执行该函数的时候就是会进行输入
只要没有在一定时间内输入,就会出错。我试了试,有一些会特别快,没有反应时间完成。所以按规则玩肯定是很难通过。后面发现每次在这里之后,会有一个判断结果函数,jnz,所以每次修改对应的标志位即可假装通过验证,到达下一个验证。类似于结果
即使一直在错,也一直将游戏进行下去。最后通过几个循环,输出了字符串
flag就是括号里的值。
总结
这题给我学到的东西,也不多。但是属于比较有趣的类型。考察的点应该在动态调试,其实很多时候我感觉做逆向都是靠耐心的,技术上我还是太少了。开始时候以为sleep函数会很长,于是使用一个时间加速软件,加速时间。叫 变速齿轮,可能会对调试有所帮助。
明日计划
- 明天周五,有一节课要结课了,应该会着手做一些课程相关的作业。
- 攻防世界下一题。