feifanll 发表于 2019-4-28 18:46:42

exFAT校验块快速计算与修复

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;
    }
return Checksum;
}

好,算法有了,我们用winhex脚本快速实现。
下来演示一下,脚本的实地效果:

演示说明:
这是一个正常的exFAT分区虚拟磁盘,加载后显示里面有10张图片。

我们搞下破坏,在1号扇区修改一些数据并保存。
弹出虚拟磁盘后再加载,此刻系统报错。识别为RAW格式。

打开写好的脚本,计算并修改一下校验值。

保存后分区自动打开,数据正常访问。

华云乐道 发表于 2019-4-28 20:21:30

挺好,顶下!!

xiao1967_109 发表于 2019-4-30 11:23:25

exFAT分区用的不多,但是还要顶一下

吴先生 发表于 2019-5-28 09:28:59

好厉害呀 虽然我没看懂,,

笨菜鸟 发表于 2020-3-26 13:27:25

楼主,这个程序在哪下载呀。
页: [1]
查看完整版本: exFAT校验块快速计算与修复