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}

解毕

总结:以后要多多注意程序中的前后连贯性,可能程序中很多都是无意的代码,没有必要过多的去进行一个纠结

 

posted @ 2022-11-18 20:44  Qsons  阅读(207)  评论(0编辑  收藏  举报