BUUCTF五道reverse新手题目
1.易怒
考点:基础题,shift+F12出字符串显示窗口
下载文件之后,是一个压缩包。正常解压。
打开之后,没有任何东西,输入字符之后,直接就退出。
PE查软件之后,64位,直接IDA打开。
然后shift+F12 显示出字符串窗口,flag直接出现。
2.reverse1
考点:
首先下载文件之后,又是一个压缩包,解压之后打开。
输入字符之后,直接退出了。
继续用PE查看软件的基本信息,64位,无壳。
用64位的IDA打开。
没有main函数。
直接shift+F12 查看字符串窗口。
找到一个好像是flag的{hello_world}直接复制加上flag,答案错误。
双击{hello_world}
可以看到在 sub_1400118C0处被引用了。
去找到 sub_1400118C0。
按F5之后,反编译。
疑惑:F5反编译不是只能在32位中的IDA中才可以么?如果在IDA64位中也可以的话,那怎么判断使用F5反编译。(后面知道了 在64位和32位中都可以反编译)
何时使用,判断依据是什么?
分析伪代码。
在if语句中,我们发现,如果str【2】 == o ,那么就会把它变成 0。
所有我们把{hello_world}中的o 变成 0
得到flag{hell0_w0rld}
总结:这个题,最关键的一步就是F5反编译查看伪代码。之前我一直以为在IDA64位中不能反编译。
增加了一个知识点。能大概看懂了,被哪个地址引用的。
3.reverse2
考点:跟reverse1 一样。主要F5反编译。
不是exe文件,用PE查看。
IDA64位打开。
继续shift+F12查看字符串窗口。
找到好像flag的字符串,双击。
好像是在主main函数中引用了。
找到主main函数,直接F5反编译。
接下来分析代码。
这里其实已经得到答案了,一开始没注意if语句中是没有{}的,但是后面那个*(&flag+i) = ‘ 1 ’,就是{}中的语句。
所以这里的意思是把flag中的 i 和 r 换成 1。
得到flag{hack1ng_fo1_fun}。
4.软件的内涵
考点:MD5解密?其实是考脑洞。。。注意结合他的题意和提示。
PE。
32位。
IDA打开。
找到_main_0函数,F5反编译。
这里就是软件打开之后,按Y提示,和N提示的if else判断语句。
答案应该在这一串字符串中。
一开始想的是这一串字符解密?
疑问:怎么判断是MD5解密。**
没想到这是MD5加密。
难道flag是 flag{全国人民震惊了} ?
不对。。。。。
又去其他函数搞了半天,越搞越复杂。
后面发现这是脑洞题。。。
最后flag其实就是那串字符串。
flag{49d3c93df25caad81232130f3d2ebfad}
5.新年快乐
考点:upx脱壳,upx -d xxxxx
根据上一题的经验,结合题意。。。。
首先是32位的,并且有UPX壳。
首先要脱壳。
之前脱过一次upx的壳。这次也是顺利一次操作成功。。。
shift+F12 查看字符串窗口,发现一串字符,是新年快乐的意思。
结合题意,flag就是一个字符串,再结合题目是新年快乐。
的壳。这次也是顺利一次操作成功。。。
[外链图片转存中…(img-5JTvwoDL-1626313229157)]
shift+F12 查看字符串窗口,发现一串字符,是新年快乐的意思。
结合题意,flag就是一个字符串,再结合题目是新年快乐。
flag{HappyNewYear!