|
exFAT校验块快速计算与修复
我们知道 exFAT在DBR损坏后,可以找FAT表、$BitMap、$UpCase、Root等位置参数快速恢复DBR。
但是单纯的修复好DBR,分区依然不能正常打开。
这是因为操作系统会对比exFAT分区的11号扇区的校验值,值不相同则报错并不予识别。
这个校验值是通过0-10号扇区的数据计算得到的,也就是说只要0-10这几个扇区发生改变,则校验值改变。
查阅资料得到这个校验算法是这样的--11号扇区校验的算法:
UINT32 VBRChecksum(const unsigned char octsts[],long NumberOfBytes)
{ UINT32 Checksum = 0;
long Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if (Index == 106 || Index == 107 || Index == 112)
{
continue;
}
Checksum = ((Checksum <<31) | (Checksum>> 1)) + (UINT32) octsts[Index];
}
return Checksum;
}
好,算法有了,我们用winhex脚本快速实现。
下来演示一下,脚本的实地效果:
演示说明:
这是一个正常的exFAT分区虚拟磁盘,加载后显示里面有10张图片。
我们搞下破坏,在1号扇区修改一些数据并保存。
弹出虚拟磁盘后再加载,此刻系统报错。识别为RAW格式。
打开写好的脚本,计算并修改一下校验值。
保存后分区自动打开,数据正常访问。 |
|