强网杯2020 Blockchain IPFS

强网杯2020 Blockchain IPFS

首先观察题干,下载附件后位如下的文本文档。
强网杯2020 Blockchain IPFS
两张图片分别为pic1.jpg和pic2.jpg。然后pic2给出了文件的sha256sum,pic1被分为6个碎片进行存储,并给了每个碎片的文件哈希。
了解IPFS的人应该知道,IPFS里面文件哈希均以Qm开头。这是因为IPFS采用了MultiHash技术。原理就是在原有哈希值的前面加上sha-256编码(0x12)和32字节的哈希摘要(0x20),并进行base58编码,最终得到Qm开头的哈希地址。因此在本题中,可以非常容易的得到pic2的哈希,进而下载图片。
我们采用python代码来进行base58编码,最终的返回的结果,就是题目中的hash2。
强网杯2020 Blockchain IPFS
并且我们利用这个哈希,可以在ipfs.io下载对应图片,浏览器地址如下。强网杯2020 Blockchain IPFS
打开页面后就可以看到pic2。并且我们可以猜测出完整的图片图案应该是QWB。强网杯2020 Blockchain IPFS
到此,pic2搞定。剩下就是同样的方式去浏览器获取pic1的六个碎片。但是当下载好之后,我们剋发现,只有图示这张图片是可查看的,其余文件均无法打开。原因是因为,当我们在IPFS上进行文件存储时,会将文件转换成二进制,然后切割成若干份,最后进行存储。因此我们获得了 文件碎片,就可以恢复pic1。强网杯2020 Blockchain IPFS
借助Hex Fiend查看这张图片,由于是jpg文件,文件以FFD8开头。所以这张图片应该以FFD9结束。因此,我们查看了其余5个部分,并最终发现了这个部分。至此,图片的开头和结尾两个部分已经知晓,剩下的就是根据QWB的图案,将剩余三个部分组合进去,最终拼成pic1.强网杯2020 Blockchain IPFS
强网杯2020 Blockchain IPFS
(为了防止白嫖,在恢复这个图片的时候,故意犯了一些错误。)
拿到两张图片后,可以看到flag需要两张图片的hash。那么如何获取hash1呢?
如果了解IPFS,我们可以知道,IPFS的存储是只针对内容的。首先将文件转换为二进制,并进行sha256加密,得到该文件内容对应的独一无二的sha256sum,并根据规则,添加1220并进行base58编码,从而就可以得到hash1。
我们对恢复的图片进行sha256sum操作。得出来的一串数字就是sha256sum,随后在前面添加1220,并用python计算base58编码。强网杯2020 Blockchain IPFS强网杯2020 Blockchain IPFS

最终得出的结果Qm就是hash1 。针对本题来说,因为恢复的pic1中有错误,因此这个hash1肯定不是正确的hash1。
至此,两个哈希都获得到了,剩下的就不用说了吧。这个题被分类到区块链下,感觉跟区块链技术并没什么关系,只是应用了IPFS存储罢了。

本人小白,第一次发帖,求轻喷。