攻防世界-RE-三题WP

1.re2-cpp-is-awesome


分析

攻防世界-RE-三题WP_第1张图片

打开看看,发现需要一个参数。在IDA里查找这个luck next time,交叉引用

1556158700580

再次交叉引用,发现到main函数。

攻防世界-RE-三题WP_第2张图片

这里就是关键的对比了,看起来像是v8经过某个处理后与明文表对比。动态调试看看,下端点在v8,发现我们所输入的字符串没有被处理过,那就更简单了,直接最原始的明文对比。

攻防世界-RE-三题WP_第3张图片

每次将执行到这里会出现一个flag明文,在下面的跳转指令初,修改的值使得程序一直验证正确。最终得到明文flag ALEXCTF{W3_L0v3_C_W1th_CL45535}

总结

这篇C++的题从静态上看着很复杂,但是找到验证的点和参与验证的参数,再追到参数变化即可,只是这里的参数没有进行变化。。可能还有更简单的做法,我只做到这里了,这题属于C++简单题。


2.The_Maya_Society


分析

打开题目,发现有很多个文件。我很少遇到这种题,一般遇到也是不会做。但里面有一个launcher文件似乎是一个elf

1556160316627

使用IDA查看也是一些正常的函数,但是地址似乎错了。只能用EDB调试一下

攻防世界-RE-三题WP_第4张图片

当执行到这里时候,看到获取本地时间

攻防世界-RE-三题WP_第5张图片

结合静态函数知道,接下来sub_45a会对该时间字符串进行处理。跟进去看看

攻防世界-RE-三题WP_第6张图片

四个常数很像是md5加密的特征。继续动态调试往下看看

攻防世界-RE-三题WP_第7张图片

在执行到第五个sprintf的时候看到参数里出现了md5加密后的字符。但是题目交互里没有给出什么失败或者成功的字样。有点迷惑,查阅得知玛雅文明的终结是2012-12-21所以将时间设定之后再次运行,可以得到flag。

flag{e3a03c6f3fe91b40eaa8e71b41f0db12}

总结

有点像misc题,但是也有收获。遇见很多个文件的题,查看关键文件信息,会有收获。常用的直接在linux里 strings [binary]


3.gametime


分析

打开试玩,确实是一个小游戏,就是在它给出一个指令的时候需要输入按下相应的按键。一共只有x m 空格 三种类型。如果失败了就会提示

1556176489966

访问该网址没有打开。

在IDA中查找该字符串,交叉定位到对应函数

1556176592945

我将它重命名为了check。在OD中找到该函数,下断点。执行的时候会发现每次执行该函数的时候就是会进行输入

1556176688569

只要没有在一定时间内输入,就会出错。我试了试,有一些会特别快,没有反应时间完成。所以按规则玩肯定是很难通过。后面发现每次在这里之后,会有一个判断结果函数,jnz,所以每次修改对应的标志位即可假装通过验证,到达下一个验证。类似于结果

攻防世界-RE-三题WP_第8张图片

即使一直在错,也一直将游戏进行下去。最后通过几个循环,输出了字符串

1556176840424

flag就是括号里的值。

总结

这题给我学到的东西,也不多。但是属于比较有趣的类型。考察的点应该在动态调试,其实很多时候我感觉做逆向都是靠耐心的,技术上我还是太少了。开始时候以为sleep函数会很长,于是使用一个时间加速软件,加速时间。叫 变速齿轮,可能会对调试有所帮助。


明日计划

  1. 明天周五,有一节课要结课了,应该会着手做一些课程相关的作业。
  2. 攻防世界下一题。

你可能感兴趣的:(学习记录,逆向工程)