[2019红帽杯]easyRE 1

发布时间 2023-05-05 18:36:28作者: TFOREVERY

查壳:

64位,进IDA找主函数:

挺长的,慢慢来吧,先找正确的判断输出:涉及到了v11,又涉及到到方法sub_400E44,跟进方法看看:

出现位运算,和aAbcdefghijklmn,跟进看看:

标准base64编码,那就是说v11是根据v18base64加密了10次得到的,我们再看看,sub_400360的另一个参数off_6CC090,跟进:

拿这个去解密10次:得到一个网址:https://bbs.pediy.com/thread-254172.htm

开开心心点进去:

真就是网址呗,让我们学习主动防御:真好这个出题人

既然这个没有,那么我们往上看,因为刚进来的时候发现几段字符串很像加密后的flag

将这几个字符串连起来,为啥要连起来呢,因为不连起来,输出是错的(一个个试过的我,根本不成语句)这里注意,在连接前两字符串的时候,它们的末尾还要加上127这个数字得到“Iodl>Qnb(ocy\127y.i\127d`3w}wek9{iy=~yL@EC”

继续往下走,发现似乎对某段字符加密了,然后与v12对比,不同就结束。

一个输出。那么我们先对加密后的字符串解密

上脚本:

Des = 'Iodl>Qnb(ocy y.i d`3w}wek9{iy=~yL@EC'
flag = ''
for i in range(len(Des)):
    if Des[i] == ' ':
        flag += chr(127 ^ i)
    else:
        flag += chr(ord(Des[i]) ^ i)
print(flag)

得到一条信息:Info:The first four chars are flag,那么接下来呢?好像到头了昂,但是我们并没有得到正确的flag昂。别慌,我们再找找:

我们能仔细看看,发现在错误的网址那,出现过一段字符串,我们回去看看:(在shift+F12中也能找到类似加密的文档,需要耐心)

在这shift+x查看调用:

发现下边有段像极了加密后的flag特别是有[]这两像极了{},我们跟进看看:

转化一下ASCII:

在这段函数里,首先先做了两个判断:对那段内存的两个字符进行异或,看是否为'f'、'g',根据我们得到的信息,前四个字符就是flag,再加上现在的判断,得出结论:就是将输入的flag进行异或后得到那段数据:(把它异或回来得到flag)

提取出内存中存放的数据:shift+e:

上脚本咯:

Des = [0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F,
       0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E,
       0x72, 0x3C, 0x32, 0x45, 0x5B]
v4 = 'flag'
v44 = ''
flag = ''

for i in range(len(v4)):
    v44 += chr(ord(v4[i]) ^ Des[i])
for i in range(len(Des)):
    flag += chr(Des[i] ^ ord(v44[i % 4]))
print(flag)

得到flag{Act1ve_Defen5e_Test}收工。