BUUCTF之2019红帽杯--easyre
老样子,先查壳
无壳,ELF64位,丢IDA继续分析即可
首先看下字符串表,发现有一大串字符,还有很像Base64索引表的字符串
来到主要逻辑函数
首先发现,v12,v13,v14是一个大数组,不过被IDA拆分成了多个小数组。而通过后面的if语句判断==36也能知道,通过v12,v13,v14这几个连续数组与本身i的异或能得到v15.
下面附上脚本
异或后的结果为:Info : The first four chars are 'flag',译为前4个字符为flag.
继续往下分析
在该处代码中,多处运用到了sub_400E44函数,跟进去发现是一个Base64的算法,并且并没有进行一个魔改,另外这里也可以通过IDA插件FindCrypt找到Base64算法。
而在一开始的字符串窗口,我们也找到了密文,直接Base一把梭.
然后经过N次的Base64解密,我成功的被骗了-_-,打开后是一个网址,什么用也没有.
然后继续硬着头皮分析,在输出You found me!语句的if判断语句的地方
发现了有一处地方,引用了函数sub_400D35。跟进去看看
除开第一次与v1异或外,后续还和已知数组进行了24次异或。
结合一开始我们大数组与i异或后的提示,前4个字符为flag,可以推断出,这里一开始是获得一个密钥,然后进行2次异或。
第一次异或是flag字符与已知数组进行异或,从而反推出v1
第二次异或是已知数组与v4进行异或,而通过第一次异或反推出的v1,也可以推出v4,进而异或推出flag.
下面附上脚本:
flag{Act1ve_Defen5e_Test}
解毕
总结:以后要多多注意程序中的前后连贯性,可能程序中很多都是无意的代码,没有必要过多的去进行一个纠结