实验吧:损坏的U盘镜像

解题链接:http://ctf5.shiyanbar.com/misc/upan/CTF.hdd

本文会用到binwalk,foremost和ghex工具,首先进行一个简要的介绍。

1.binwalk:Binwalk是一个固件分析工具,用于协助研究人员对固件进行分析,文件提取等。详细介绍看这里

2.Foremost:foremost是一个控制台程序,用于根据页眉,页脚和内部数据结构恢复文件,也是一个可以用来文件还原分离的神器。相比而言binwalk的速度更快,功能也更强大,但是有时候如果不能分离出来,就可以试试看foremost。详细介绍看这里

3.GHex是一个简单的二进制文件编辑器。它允许用户使用多级撤消/重做机制查看和编辑hex和ascii中的二进制文件。功能包括查找和替换功能,二进制,八进制,十进制和十六进制值之间的转换,以及使用另一种用户可配置的多文档界面概念,该概念允许用户使用多个视图编辑多个文档。官网在这里

接下来开始解题,点击链接弹出下载框,下载下来就是一个hdd的文件,利用binwalk看看里面有什么东西

发现有两个压缩文件,一个是Key.txt,一个是Password.txt。试试用binwalk -e CTF.hdd进行提取

提取后会出现这样一个文件夹,打开看看

发现有4个文件,Key.txt和Password.txt已经直接从压缩包中提取出来了。只不过两个压缩文件无法打开,这个Password.txt是可以正常打开的,Key.txt里面是空的。按理说其中的一个压缩包应该是带有密码的,然后用Password.txt里面得到的值去解压,最后得到flag。可是这一步好像是出现了问题,那就试试foremost

命令行输入foremost CTF.hdd,生成了一个文件夹

打开有一个文件夹和一个文档

文档内容是关于作者的信息,以及刚才提取文件的日志信息

打开文件夹发现里面有两个压缩包,这次是可以正常打开的,而且其中一个是加了密码的

看样子应该是成功了,这回开始破解密码吧

密码提示是checksum,应该是计算这个CTF.hdd文件的checksum,然后求checksum前4字节的MD5就可以得到密码。

利用ghex打开CTF.hdd,发现这个镜像是个exFat格式的磁盘文件,上网查找关于exFat文件系统格式的相关资料。原文在这里,译文在这里

由上图可知checksum的计算方式,将它用python实现一下,代码如下

f = open("CTF.hdd",'r')
data = f.read()
checksum = 0
for i in range(11*512):
    if i==106 or i==107 or i==112:
        continue
    else:
        checksum = (((checksum<<31)&(int('0xFFFFFFFF',16)))|(checksum>>1))+ord(data[i])
print hex(checksum)

运行得到checksum为0x81c6fa94

在线求81c6fa94的md5

将21C00BFC1B0A052AE5194B263C652E81输入密码栏进行解压,发现密码错误?

看了看别人的writeup,发现最后需要转换为大端序,于是上网查询大端序与小端序的区别,如何判断等信息。

可是看了半天都是查询本机的大端序和小端序,没有针对文件系统进行判断的信息,有哪位大神可以帮忙解答一下吗?

最后输入94fac681的MD5值,发现还是错误?

这里还有一点需要注意的,就是得输入大写的94FAC681进行加密,这样得到的MD5才能正确解密压缩包

最后得到的密码是C9737665D39274F6C5A256B943748068

输入即可解压得到Key.txt

如果下回遇到类似的题,还是跟这个流程相似,只不过最后要尝试一下大小端序的不同MD5值。

路漫漫其修远兮,吾将上下而求索

点赞

发表评论

[2;3Rer>