exFAT校验块快速计算与修复

[复制链接]
  • TA的每日心情
    无聊
    2018-9-25 09:57
  • 签到天数: 27 天

    [LV.4]七品知县

    9

    主题

    168

    回帖

    1339

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1339
    发表于 2019-4-28 18:46:42 | 显示全部楼层 |阅读模式
    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校验计算.gif
    演示说明:
    这是一个正常的exFAT分区虚拟磁盘,加载后显示里面有10张图片。

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

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

    保存后分区自动打开,数据正常访问。
  • TA的每日心情
    开心
    2019-12-29 16:32
  • 签到天数: 58 天

    [LV.5]六品通判

    0

    主题

    105

    回帖

    129

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    129
    发表于 2019-4-30 11:23:25 | 显示全部楼层
    exFAT分区用的不多,但是还要顶一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-12-1 19:05
  • 签到天数: 87 天

    [LV.6]五品郎中

    7

    主题

    118

    回帖

    384

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    384
    发表于 2019-5-28 09:28:59 | 显示全部楼层
    好厉害呀 虽然我没看懂,,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-4-18 05:49
  • 签到天数: 41 天

    [LV.5]六品通判

    25

    主题

    460

    回帖

    794

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    794
    发表于 2020-3-26 13:27:25 | 显示全部楼层
    楼主,这个程序在哪下载呀。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表