博客
关于我
2019 红帽杯 easyRE
阅读量:681 次
发布时间:2019-03-17

本文共 1881 字,大约阅读时间需要 6 分钟。

记一次被带入坑的逆向

拿到题目,发现是elf文件,拖入Linux运行程序,发现什么提示也不给,输入任意字符串,程序退出。

在这里插入图片描述

拖入64位的ida中,查找字符串,发现几个很有用的字符串,查看第三个字符串处的代码

在这里插入图片描述

先给了一大串数字,将类型转变成char[36]后如下图所示。分析伪代码发现函数名都是统一的sub_

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

进入第一个函数sub_4406E0,发现很难理解此函数是干嘛的,但通过主程序,我们可以猜测,该函数的作用应该是读取我们的输入。同理,根据if语句中的v15[i] ^ i) != v14[i],我们也可以猜测函数sub_424BA0是读取长度的。这样,continue前的逻辑就分析出来。

编写脚本,爆破出第一处的输入,脚本如下

v17=[0]*36v17[0] = 73v17[1] = 111v17[2] = 100v17[3] = 108v17[4] = 62v17[5] = 81v17[6] = 110v17[7] = 98v17[8] = 40v17[9] = 111v17[10] = 99v17[11] = 121v17[12] = 127v17[13] = 121v17[14] = 46v17[15] = 105v17[16] = 127v17[17] = 100v17[18] = 96v17[19] = 51v17[20] = 119v17[21] = 125v17[22] = 119v17[23] = 101v17[24] = 107v17[25] = 57v17[26] = 123v17[27] = 105v17[28] = 121v17[29] = 61v17[30] = 126v17[31] = 121v17[32] = 76v17[33] = 64v17[34] = 69v17[35] = 67flag1=[]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}

转载地址:http://dxgqz.baihongyu.com/

你可能感兴趣的文章
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>