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为flag{Act1ve_Defen5e_Test}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值