从网站上可以下载一个CTF.hdd的文件,使用winHex打开,可以知道这是一个exFAT格式的文件。
用binwalk检查一下,发现文件中包含两个zip文件,使用foremost进行提取。一个压缩包需要密码解压缩,另一个解压后发现Password.txt文件。说明另一个压缩包的密码与checksum有关。
通过查看exFAT文件系统格式可以得知如何计算checksum。有关exFAT文件系统格式可以参考exFAT 文件系统格式
文中给的是C#代码,改写成python代码进行计算checksum值。计算结果为0x81c6fa94。
# -*- coding:utf8 -*-
file = open('/root/Downloads/CTF.hdd', 'rb')
content = file.read()
checksum = 0
for i in range(0, 11*512):
if i == 106 or i == 107 or i == 112:
continue
checksum = (((checksum << 31) & int('0xFFFFFFFF', 16)) | (checksum >> 1))+content[i]
print(hex(checksum))
使用81c6fa94计算MD5值得到的password是错误的。查看了一下其他人的WriteUp。是因为与文件的大小端存储有关。正确的顺序为94FAC681。
计算出正确的password为C9737665D39274F6C5A256B943748068。
解压获得Key.txt.flag为CTF{ExFat-Checksum}