2019 红帽杯 easyRE
Posted mishixiaodai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019 红帽杯 easyRE相关的知识,希望对你有一定的参考价值。
记一次被带入坑的逆向
拿到题目,发现是elf文件,拖入Linux运行程序,发现什么提示也不给,输入任意字符串,程序退出。
拖入64位的ida中,查找字符串,发现几个很有用的字符串,查看第三个字符串处的代码
先给了一大串数字,将类型转变成char[36]后如下图所示。分析伪代码发现函数名都是统一的sub_
。
进入第一个函数sub_4406E0
,发现很难理解此函数是干嘛的,但通过主程序,我们可以猜测,该函数的作用应该是读取我们的输入。同理,根据if语句中的v15[i] ^ i) != v14[i]
,我们也可以猜测函数sub_424BA0
是读取长度的。这样,continue前的逻辑就分析出来。
编写脚本,爆破出第一处的输入,脚本如下
v17=[0]*36
v17[0] = 73
v17[1] = 111
v17[2] = 100
v17[3] = 108
v17[4] = 62
v17[5] = 81
v17[6] = 110
v17[7] = 98
v17[8] = 40
v17[9] = 111
v17[10] = 99
v17[11] = 121
v17[12] = 127
v17[13] = 121
v17[14] = 46
v17[15] = 105
v17[16] = 127
v17[17] = 100
v17[18] = 96
v17[19] = 51
v17[20] = 119
v17[21] = 125
v17[22] = 119
v17[23] = 101
v17[24] = 107
v17[25] = 57
v17[26] = 123
v17[27] = 105
v17[28] = 121
v17[29] = 61
v17[30] = 126
v17[31] = 121
v17[32] = 76
v17[33] = 64
v17[34] = 69
v17[35] = 67
flag1=[]
for i in range(36):
for key in range(32,127):
if key ^ i == v17[i]:
flag1.append(chr(key))
print(''.join(flag1))
爆破出的结果是Info:The first four chars are `flag`
继续分析剩下的逻辑,我们进入sub_400E44
函数中,唉,又是难以理解的代码但是我们发现一串很长的字符串,包含了所有的英文字母和数字还有其他字符,每当看到这样的字符串时,我们就可以猜测,这是进行了一次base64编码。base64的编码原理可以参考这篇文章
我们发现,这个函数被调用了十次,也就是说进行了十次base64的编码。编码后的结果和off_6CC090
比较(猜测sub_400360
是strcmp函数),将这一大串字符串,进行十次base64解码,得到的结果是一个网站。
进入网站看一下,发现内容是主动防御,就感觉自己被骗了,这根本就没有flag。看来出题者是想现教现学啊。 被带入坑后,我们需要其他的线索,联想到第一个提示信息,说前四个字符是’flag’。同时,我们可以发现在那一大串base64编码的字符串下,还有一组数据,进入其函数查看。
发现此函数的逻辑就是将byte_6CC0A0
字符串进行异或,还可以发现if语句中,有判断是否等于‘f’和‘g’的条件,根据已有信息猜测这个字符数组就是‘flag’。为什么v2会是一个数组呢,因为HIBYTE()
函数的作用是获取高字节也就是数组的最后一位,同时还有BYTE()、BYTE1()、BYTE2()
第一个是获取数组的第一位,第二个就是获取第二位,依次类推。
编写脚本,将v2和flag爆破出来。脚本如下
key2=[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]
key3='flag'
key4=[]
flag=[]
for x in range(4):
key4.append(chr(key2[x] ^ ord(key3[x])))
print(key4)
for i in range(25):
flag.append(chr(key2[i]^ord(key4[i%4])))
print(''.join(flag))
得到的flag为flagAct1ve_Defen5e_Test
以上是关于2019 红帽杯 easyRE的主要内容,如果未能解决你的问题,请参考以下文章