先把文件下载下来,得到一个hdd文件,这其实是一个磁盘镜像,可以用virtualbox挂载成硬盘

挂载完后,用winHex加载驱动器:

西普CTF-损坏的U盘镜像-以夕阳落款

可以把中间的两个文件Key.zip和Password.zip提取出来,因为下面有解压密码,为了防止不劳而获,设置回复可见

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

观察文件头,发现是exfat分区,但是直接加载分区会报错:

西普CTF-损坏的U盘镜像-以夕阳落款

说明是分区的引导扇区出现了问题。再看Password里面的内容,让我们修复分区的引导扇区,得到checksum

查阅资料:

exfat引导扇区有24个扇区,0-11号是引导部分,12-23号是备份部分,其中0-10号扇区是引导相关的信息,11号扇区是0-10号扇区的checksum

比对了0-10号和12-22号两个部分,发现部分地方有不一样,说明至少有一个损坏了,再考虑到两个不可能同时坏,假定作者没有动引导扇区其他地方,我们分别计算这两部分的checksum:

FileStream fs = new FileStream("1.hdd", FileMode.Open);
byte[] b = new byte[fs.Length];
fs.Read(b, 0, (int)fs.Length);
fs.Close();

UInt32 checksum = 0;  
for(int i = 0  * 512; i < 11 * 512; i++){  
	if (i == 106 || i == 107 || i == 112)  
		continue;  
	checksum = (checksum << 31) | (checksum >> 1) + b[i];  
}
string check = checksum.ToString("X8");
MessageBox.Show(check);

for(int i = 11  * 512; i < 12 * 512; i += 4){  
	b[i] = dy; b[i + 1] = cy;
	b[i + 2] = by; b[i + 3] = ay;
}

checksum = 0;  
for(int i = 12  * 512; i < 23 * 512; i++){  
	if (i == 12 * 512 + 106 || i == 12 * 512 + 107 || i == 12 * 512 + 112)  
		continue;  
	checksum = (checksum << 31) | (checksum >> 1) + b[i];  
}
check = checksum.ToString("X8");
MessageBox.Show(check);

计算得到两个值C1:81C6FA94和C2:21C6FA9D,分别算出MD5,尝试解压,结果发现不对。。。

新建一个exfat磁盘,用winHex提取磁盘镜像,用代码计算出checksum,发现这个是坑爹的大端存储,所以作者让我们求的是保存的checksum的值,于是得到正确的checksum:94FAC681,算出MD5:C9737665D39274F6C5A256B943748068,解压文件,得到Key

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Flag请点击这里查看索引

查看所有Flag文章需要输入密码,需要获取文章密码的童鞋请扫描下面微信或支付宝二维码捐助至少2元(老哥,捐多捐少是个缘分)之后发送支付凭证号联系我获取,Flag大全地址:Flag大全

新功能:捐款的小伙伴请联系我把自己的注册邮箱加入网站白名单,可以免回复看到本站所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜!

微信二维码:
支付宝二维码: