掌桥专利:专业的专利平台
掌桥专利
首页

基于BPB关键参数的exFAT数据恢复方法及系统

文献发布时间:2023-06-19 10:41:48


基于BPB关键参数的exFAT数据恢复方法及系统

技术领域

本发明涉及计算机技术领域,尤其公开了一种基于BPB关键参数计算的exFAT数据恢复方法及系统,它主要应用于windows对文件系统的操作。

背景技术

exFAT是Microsoft推出的最新文件系统,尤其适用于外部设备,如存储卡,拇指驱动器,外部硬盘驱动器等。用户可以轻松地在不同操作系统之间互操作这些设备。因此,此文件系统与所有其他文件系统兼容,与NTFS不同,用户可以将exFAT用于所有其他操作系统。此外,exFAT提供超过4GB的存储空间,从而消除了在外部存储设备上使用FAT而不是exFAT分区的可能性。尽管其具有用于数据存储和组织的高级功能,但在某些不可避免的情况下(例如exFAT分区数据删除、格式化或病毒破坏)也容易丢失数据。有时,在处理这些exFAT分区时,由于某些未知原因,用户可能会丢失数据。

参考专利文献CN105760244B公开了一种基于假设验证的exFAT格式化恢复方法和装置,具体涉及一种exFAT分区格式化之后,基于假设验证的exFAT格式化恢复方法和装置。该方法通过假设并反向验证计算出最有可能的簇起始扇区号和簇大小作为恢复参数,最大程度上保证了恢复结果的准确性。该方法解决了现有exFAT格式化恢复技术存在的缺陷,提高了恢复效果,是对exFAT丢失数据恢复的一项重大的补充。但是这种恢复方法存在以下缺点:

1、簇的大小和首簇起始扇区号FCS计算复杂度高,如果分区中文件夹数量多,会导致临时首簇起始扇区号IFCS的情况非常多,从而计算量大,计算复杂度为O(n

2、只研究了格式化数据恢复的方法,对其它的数据破坏(如病毒破坏等)未进行研究。

因此,现有exFAT格式化恢复方法中存在的上述缺陷,是一件亟待解决的技术问题。

发明内容

本发明提供了一种基于BPB关键参数计算的exFAT数据恢复方法及系统,旨在解决现有exFAT格式化恢复方法中存在的上述缺陷的技术问题。

本发明的一方面涉及一种基于BPB关键参数计算的exFAT数据恢复方法,包括以下步骤:

假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号;

将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数;

利用计算得到的BPB关键参数,实现exFAT数据的恢复;

BPB关键参数包括实际首簇起始扇区号、FAT扇区数和根目录首簇号,将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数的步骤包括:

根据第一假设判定法则式,通过目录块起始扇区号初次验证假设的FAT起始扇区号和簇的大小,根据第二假设判定法则式,通过目录块起始簇号和文件夹起始簇号列表验证FAT起始扇区号和簇的大小的正确性并统计得出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,若匹配度大于或等于预设的目标匹配阈值时,则表明假设验证成功,此时实际的FAT起始扇区号等于假设的FAT起始扇区号的初始值,实际的簇的大小等于假设的簇的大小的初始值;若匹配度小于预设的目标匹配阈值时,则表明假设验证失败;

若假设验证失败,且当假设的簇的大小的假设值为假设的簇的大小的初始值一半时,继续内循环进行假设验证,若验证成功,则直接退出整个循环,若失败则继续循环,直至当假设的簇的大小的假设值小于每簇扇区的最小值时,则跳出内循环,进行外循环;若假设的FAT起始扇区号的假设值为假设的FAT起始扇区号的初始值的二倍时,不断循环,直至当假设的FAT起始扇区号的假设值大于FAT起始扇区号的最大值时,则假设验证失败,提示用户阈值设置太大,并将阈值改小,进行全新一轮的假设;若阈值设置足够小但仍然假设验证失败,则说明未找到任何有用线索,此时将实际的FAT起始扇区号和实际的簇的大小均取默认值;

根据扫描得出的临时首簇起始扇区号,利用第一假设判定法则式和第二假设判定法则式计算所有目录块的匹配度,并和阈值进行比较,确定是否假设验证成功;

第一假设判定法则式为:

第二假设判定法则式为:

若DBClu∈SCL,则该目录块匹配成功,匹配值PZ=PZ++;

PD=(float)PZ/(float)n1*100%

若PD≥设定的阈值,则假设验证成功;

其中,SS表示目录块的起始扇区,FCS表示临时首簇起始扇区号;CS表示簇大小;DBClu表示目录块所在的起始簇号,PZ表示匹配值,初始值为0,SCL表示目录块文件夹起始簇号列表,n1表示目录块数量,PD表示所有目录块的匹配度;

根据计算单元验证成功的FAT起始扇区号和簇的大小,计算得出首簇起始扇区号和根目录首簇号;

根据目录块实际占用的扇区数列表RNL,求出最大的目录块占用的扇区数,记为TMSPC;根据簇的大小≥TMSPC,并且簇的大小符合2

进一步地,假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号的步骤包括:

扫描可搜索到的每个目录块的起始扇区列表DSL、文件和文件夹属性列表FAL、文件夹起始簇号列表SCL和目录块实际占用的扇区数列表RNL;

根据FAT起始扇区和簇的大小规律,假设FAT起始扇区号和簇大小;

以假设的FAT起始扇区号作为外循环,以假设的簇的大小作为内循环,计算出临时首簇起始扇区号。

进一步地,利用得到的BPB关键参数,实现exFAT数据的恢复的步骤包括:

利用得到的BPB关键参数和FAL中各个目录项的属性值,进行exFAT数据的恢复。

进一步地,临时首簇起始扇区号由以下公式计算得出:

其中,IFCS表示临时首簇起始扇区号,ISC表示理想总簇数,FS表示假设的FAT起始扇区号,⌊ ⌋表示向下取整;

其中,表示总扇区数;表示簇大小。

进一步地,FAT扇区数由以下公式计算得出:

其中,FSN表示FAT扇区数,ISC表示理想总簇数,CS表示簇大小,⌊ ⌋表示向下取整;

其中,TSP表示总扇区数;CS表示簇大小。

进一步地,实际首簇起始扇区号由以下公式计算得出:

其中, FCS表示实际首簇起始扇区号,ISC表示理想总簇数;FS表示FAT起始扇区号,⌊ ⌋表示向下取整;

其中, ISC表示理想总簇数,TSP表示总扇区数,CS表示簇大小,⌊ ⌋表示向下取整;

进一步地,根目录首簇号由以下公式计算得出:

其中,RFC表示根目录首簇号,RSC表示实际总簇数,CS表示簇大小,⌊ ⌋表示向下取整;

其中,RSC表示实际总簇数,表示总扇区数,FCS表示首簇起始扇区号,CS表示簇大小,⌊ ⌋表示向下取整。

本发明的另一方面涉及一种基于BPB关键参数计算的exFAT数据恢复系统,包括:

假设模块,用于假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号;

验证模块,用于将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数;

恢复模块,用于利用计算得到的BPB关键参数,实现exFAT数据的恢复;

验证模块首先假设FAT起始扇区号初始值为2048,假设簇的大小初始值为65536,它包括:

第一验证单元,用于根据第一假设判定法则式,通过目录块起始扇区号初次验证假设的FAT起始扇区号和簇的大小,根据第二假设判定法则式,通过计算得到的目录块起始簇号和文件夹起始簇号列表二次验证FAT起始扇区号和簇的大小的正确性,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,若匹配度大于或等于预设的目标匹配阈值时,则表明假设验证成功,此时实际的FAT起始扇区号等于假设的FAT起始扇区号的初始值,实际的簇的大小等于假设的簇的大小的初始值;若匹配度小于预设的目标匹配阈值时,则表明假设验证失败;

第二验证单元,用于若假设验证失败,且当假设的簇的大小的假设值为假设的簇的大小的初始值一半时,继续内循环进行第一验证单元,若验证成功,则跳出整个循环,;若验证成失败,则继续整个循环,直至当假设的簇的大小的假设值小于每簇扇区的最小值时,则跳出内循环,进行外循环;若假设的FAT起始扇区号的假设值为假设的FAT起始扇区号的初始值的二倍时,继续外循环,直至当假设的FAT起始扇区号的假设值大于FAT起始扇区号的最大值时,则假设验证失败,提示用户阈值设置太大,并将阈值改小,进行全新一轮的假设;若阈值设置足够小但仍然假设验证失败,则说明未找到有用线索,此时将实际的FAT起始扇区号和实际的簇的大小均取默认值;

第二计算单元,用于根据扫描得出的临时首簇起始扇区号,利用第一、第二假设判定法则式计算所有目录块的匹配度,并和阈值进行比较,确定是否假设验证成功。

所述第一假设判定法则式为:

所述第二假设判定法则式为:

若DBClu∈SCL,则该目录块匹配成功,匹配值PZ=PZ++;

PD=(float)PZ/(float)n1*100%

若PD≥设定的阈值,则假设验证成功;

其中,SS表示目录块的起始扇区,IFCS表示临时首簇起始扇区号;CS表示假设的簇大小;DBClu表示目录块所在的起始簇号,PZ表示匹配值,初始值为0,SCL表示文件夹起始簇号列表,n1表示目录块数量,PD表示所有目录块的匹配度;

第三计算单元用于根据第二计算单元验证成功的FAT起始扇区号和簇的大小,计算得出首簇起始扇区号和根目录首簇号;

首簇起始扇区号由以下公式计算得出:

其中,FCS表示首簇起始扇区号,ISC表示理想总簇数,表示假设的FAT起始扇区号,⌊ ⌋表示向下取整;

其中, TSP表示总扇区数;CS表示假设的簇大小,⌊ ⌋表示向下取整。

根目录首簇号由以下公式计算得出:

其中,RFC表示根目录首簇号,RSC表示实际总簇数,CS表示簇大小,⌊ ⌋表示向下取整;

其中,RSC表示实际总簇数,TSP表示总扇区数,FCS表示首簇起始扇区号,CS表示簇大小,⌊ ⌋表示向下取整;

第四计算单元,用于根据目录块实际占用的扇区数列表RNL,求出最大的目录块占用的扇区数,记为TMSPC;根据簇的大小≥TMSPC,并且簇的大小符合2

进一步地,假设模块包括:

扫描单元,用于扫描可搜索到的每个目录块的起始扇区列表DSL、文件和文件夹属性列表FAL、文件夹起始簇号列表SCL和目录块实际占用的扇区数列表RNL;

假设单元,用于根据FAT起始扇区和簇的大小规律,假设FAT起始扇区号和簇大小;

第一计算单元,用于以假设的FAT起始扇区号作为外循环,以假设的簇的大小作为内循环,计算出临时首簇起始扇区号。

临时首簇起始扇区号由以下公式计算得出:

其中,IFCS表示临时首簇起始扇区号,ISC表示理想总簇数,FS表示假设的FAT起始扇区号,⌊ ⌋表示向下取整;

其中,TSP表示总扇区数;CS表示假设的簇大小,⌊ ⌋表示向下取整。

进一步地,恢复模块包括:

恢复单元,用于利用得到的BPB关键参数和FAL中各个目录项的属性值,进行exFAT数据的恢复。

本发明所取得的有益效果为:

本发明提供的基于BPB关键参数计算的exFAT数据恢复方法及系统,通过假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号;将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数,所述BPB关键参数包括实际首簇起始扇区号、FAT扇区数和根目录首簇号;利用计算得到的所述BPB关键参数,实现exFAT数据的恢复。本发明提供的基于BPB关键参数计算的exFAT数据恢复方法及系统,簇的大小和FCS计算复杂度大大降低;适应格式化、病毒破坏等的数据恢复,具有广泛的适应性。

附图说明

图1为本发明提供的基于BPB关键参数计算的exFAT数据恢复方法一实施例的流程示意图;

图2为图1中所示的假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号步骤一实施例细化流程示意图;

图3为图1中所示的将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数的步骤一实施例细化流程示意图;

图4为本发明提供的基于BPB关键参数计算的exFAT数据恢复系统一实施例的功能框图;

图5为图4中所示的假设模块一实施例的功能模块示意图;

图6为图4中所示的验证模块一实施例的功能模块示意图;

图7为图4中所示的恢复模块一实施例的功能模块示意图。

附图标号说明:

10、假设模块;20、验证模块;30、恢复模块;11、扫描单元、12、假设单元;13、第一计算单元;21、第一验证单元;22、第二验证单元;23、第二计算单元;24、第三计算单元;25、第四计算单元;31、恢复单元。

具体实施方式

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案做详细的说明。

本发明一方面提出一种基于BPB关键参数计算的exFAT数据恢复方法,实施例如图1所示,包括以下步骤:

步骤S100、假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号。

exFAT分区时,FAT扇区数的计算是以“理想总簇数”为基础,并且考虑0号和1号特殊的FAT项,通过以下公式(1)和公式(2)可以出FAT扇区。

利用公式(1)得出:

公式(1)中,ISC表示理想总簇数,TSP表示总扇区数,CS表示簇大小,⌊ ⌋表示向下取整。

利用公式(2)得出:

公式(2)中,FSN表示FAT扇区数,ISC表示理想总簇数,CS表示簇大小,⌊ ⌋表示向下取整。

exFAT分区时,首簇起始扇区号的计算也是以“理想总簇数”为基础,并且考虑0号和1号特殊的FAT项,通过公式(3)可以得出临时首簇起始扇区号:

公式(3)中,IFCS表示临时首簇起始扇区号,ISC表示理想总簇数,表示假设的FAT起始扇区号,⌊ ⌋表示向下取整。

步骤S200、将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数。

根目录首簇号、簇的大小精确计算和定位直接决定了数据恢复的成功和失败。而根据公式(4)根目录首簇号直接由首簇起始扇区号和簇大小决定。

所述根目录首簇号由以下公式计算得出:

公式(4)中,RFC表示根目录首簇号,RSC表示实际总簇数,表示簇大小,⌊ ⌋表示向下取整。

又根据公式(3)首簇起始扇区号直接由FAT起始扇区号和簇的大小决定。

所以FAT起始扇区号和簇的大小间接决定了数据恢复的成功和失败。而FAT起始扇区号是有规律的,默认值是2048,并且是2048的倍数,最大可能达到65536,而簇的大小也是有规律的,它是[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536]17个数据中的一个,根据目录块实际占用的扇区数列表RNL,求出最大的目录块占用的扇区数,记为TMSPC,根据簇的大小≥TMSPC,并且簇的大小符合2

研究发现,每个目录块的起始扇区实际上是目录块所在簇的起始扇区,簇的起始扇区又是由簇的大小、簇号和首簇起始扇区决定,由此可得第一假设判定法则式和第二假设判定法则式,第一假设判定法则式为:

公式(5)中,SS表示目录块的起始扇区,FCS表示临时首簇起始扇区号;CS表示簇大小。

第二假设判定法则式为:

若DBClu∈SCL,则该目录块匹配成功,匹配值PZ=PZ++;

PD=(float)PZ(float)/n1*100%

若PD≥设定的阈值,则假设验证成功; (6)

公式(6)中,表示目录块的起始扇区,表示临时首簇起始扇区号;表示簇大小;DBClu表示目录块所在的起始簇号,PZ表示匹配值,初始值为0,SCL表示目录块文件夹起始簇号列表,n1表示目录块数量,PD表示所有目录块的匹配度。

研究发现,每个目录块的起始扇区是有规律的,每个目录块(根目录除外)的0字节必定是0X85或0X05(当文件或文件夹删除时),32字节必定是0XC0或0X40(当文件或文件夹删除时),64字节必定是0XC1或0X41(当文件或文件夹删除时),根目录块的0字节必定是0X83或0X03,32字节必定是0X81,64字节必定是0X82,并且每个目录块的开始也必定是一个簇的开始,通过扫描可搜索到每个目录块的起始扇区列表DSL和目录块的数量,并根据目录块中目录项的特点,可得到目录块实际占用的扇区数列表RNL[i],然后求出最大的目录块占用的扇区数,记为TSPC,根据簇的大小≥TSPC,并且簇的大小符合2

在假设验证过程中,首先通过假设FAT起始扇区和簇的大小,根据公式(1)、公式(2)和公式(3)得出临时首簇起始扇区号,然后用每个目录块的起始扇区列表DSL,根据公式(5)初次验证假设的正确性,根据公式(6)二次验证假设的正确性并统计所有目录块的匹配值,匹配值除以目录块数量得到匹配度,若匹配度≥阈值(阈值用于数据恢复成功率的参考,可以由用户决定),则假设验证成功,从而确定FAT起始扇区和簇的大小。再根据式公式(1)、公式(2)、公式(3)和公式(4)求出FAT扇区数、首簇起始扇区号和根目录首簇号等。

步骤S300、利用计算得到的BPB关键参数,实现exFAT数据的恢复。

利用求出的FAT扇区数、首簇起始扇区号和根目录首簇号等、以及目录块中各个目录项的属性值,进行exFAT数据的恢复。

请见图2,图2为图1中所示的步骤S100一实施例细化流程示意图,步骤S100包括:

步骤S110、扫描可搜索到的每个目录块的起始扇区列表DSL、文件和文件夹属性列表FAL、文件夹起始簇号列表SCL和目录块实际占用的扇区数列表RNL。

根据目录块的特点,通过扫描可搜索到的每个目录块的起始扇区列表DSL、文件和文件夹属性列表FAL、文件夹起始簇号列表SCL和目录块实际占用的扇区数列表RNL。

步骤S120、根据FAT起始扇区和簇的大小规律,假设FAT起始扇区号和簇大小。

根据FAT起始扇区号的规律,FAT起始扇区号是2048的倍数,最大是65536,再根据簇的大小的规律,簇的大小是[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536]17个数据中的一个,根据计算的MSPC,确定簇的大小的范围[MSPC,65536]。

步骤S130、以假设的FAT起始扇区号作为外循环,以假设的簇的大小作为内循环,计算出临时首簇起始扇区号。

假设的FAT起始扇区号为,初始值FS=2048,作为外循环;在假设FAT起始扇区的过程中,再假定簇大小为CS,初始值CS=65536,作为内循环,根据公式(3)计算出临时首簇起始扇区号IFCS。

请见图3,图3为图1中所示步骤200一实施例细化流程示意图,在本实施例中,BPB关键参数包括实际首簇起始扇区号、FAT扇区数和根目录首簇号,步骤200包括:

步骤210、根据第一假设判定法则式,通过目录块起始扇区号初次验证假设的FAT起始扇区号和簇的大小,根据第二假设判定法则式,通过目录块起始簇号和文件夹起始簇号列表验证FAT起始扇区号和簇的大小的正确性并统计出所有目录块的匹配值,匹配值除以目录块数量得到匹配度,若匹配度大于或等于预设的目标匹配阈值时,则表明假设验证成功,此时实际的FAT起始扇区号等于假设的FAT起始扇区号,实际的簇的大小等于假设的簇的大小;若统计出的目录块中的匹配度小于预设的目标匹配阈值时,则表明假设验证失败。

目标匹配阈值代表数据恢复的最低成功率,可以由用户决定,Windows系统进行格式化时,默认簇的大小是根据分区大小的变化而变化,分区越大,默认簇的大小就越大,随着存储容量的不断扩大,可支持的分区就越大;随着计算机系统和软件系统越来越庞大,大文件处理变得越来越频繁,而更大簇的大小可以使得系统对大文件的处理变得高效,这也是默认簇的大小变得越来越大的主要原因。分区大小和默认簇的大小关系表1所示:

表1 分区大小和默认簇的大小的关系

目前,Windows默认分区大小的最小单位为MB,表明分区的最小分配粒度(以下简称为粒度)为1MB,即2048个扇区(以下扇区用s表示)。DBR是分区中的0扇区,FAT是跟在DBR之后,FAT起始扇区的具体位置是根据分区的最小分配单元或簇的大小来决定,当粒度≥簇的大小时,FAT起始扇区号=粒度的大小,DBR与FAT之间相距1个粒度;当粒度<簇的大小时,FAT起始扇区号=簇的大小,DBR与FAT之间相距1个簇,它们之间的相互关系如表2所示:

表2 FAT起始扇区和分区大小、默认簇的大小的关系

步骤S210包括:

步骤S211、根据破坏后的分区,获取总扇区数TSP。

步骤S212、遍历分区,得到每一个目录块的起始扇区DSL[p],其中,p=1、2、3、…、n1,n1为目录块总数,得到每一个文件夹的起始簇号SCL[q],q=1、2、3、…、n2,n2为文件夹起始簇号总数,得到每个文件和文件夹属性FAL[r],r=1、2、3、…n3,n3为文件和文件夹总数,根据目录块实际占用扇区数的判定法则,得到每个目录块实际占用扇区数RNL[s],s=1、2、3、…、n1,n1为目录块总数。

步骤S2121、目录块实际占用扇区数的判定法则:以32字节为单位确定目录块中的属性块的数量,一个扇区能容纳16个属性块,属性块用1_Atribute_block,2_Atribute_block……count_Atribute_block表示,根据属性块数量判定法则求出AtributeCount,目录块实际占用扇区数=((count-1)*32)/512+1。

步骤S21211、根目录属性块数量AtributeCount判定法则,从第四个属性块开始,考虑第一组的属性块,从85属性块中获取附属目录项数记为num1,num1=num1-1,C0属性的个数为num1,依次判定85属性块,C0属性块,每个C1属性块是否满足条件,判定法则为:G1_85_Atribute_block==0x85||0X05,G1_C0_Atribute_block==0xC0||0X40,G1_1_C1_Atribute_block ==0xC1||0X41,G1_2_C1_Atribute_block ==0xC11||0X41……G1_num1_C1_Atribute_block==0xC11||0X41,第一组G1的85,C0,C1判定完成再判定第二组G2,依次类推,直到不满足条件为止,得到GCount(组的数量)值,根据GCount的数量,以及每组num的数量,求出属性块的数量AtributeCount=(num1+2+num2+2+……numGCoun+2)+3。

步骤S21212、其它属性块数量AtributeCount判定法则,从第一个属性块开始,考虑第一组的属性块,从85属性块中获取附属目录项数num1,num1=num1-1,C0属性的个数为num1,依次判定85属性块、C0属性块、每个C1属性块是否满足条件,判定法则为:G1_85_Atribute_block==0x85||0X05,G1_C0_Atribute_block==0xC0||0X40,G1_1_C1_Atribute_block ==0xC1||0X40,G1_2_C1_Atribute_block ==0xC1||0X41……G1_num1_C1_Atribute_block ==0xC1,第一组85,C0,C1判定完成再判定第二组G2,依次类推,直到不满足条件为止,得到GCount(组的数量)值,根据GCount的数量,以及每组num的数量,求出属性块的数量count=(num1+2+num2+2+……numGCount+2)。

步骤S220、若假设验证失败,且当假设的簇的大小的假设值为假设的簇的大小的初始值一半时,继续内循环,直至当假设的簇的大小的假设值小于每簇扇区的最小值时,则跳出内循环,进行外循环;若假设的FAT起始扇区号的假设值为假设的FAT起始扇区号的初始值的二倍时,不断循环,直至当假设的FAT起始扇区号的假设值大于FAT起始扇区号的最大值时,则假设验证失败,提示用户阈值设置太大,并将阈值改小,进行全新一轮的假设;若阈值设置足够小但仍然假设验证失败,则说明未找到有用线索,此时将实际的FAT起始扇区号和实际的簇的大小均取默认值。

步骤S220包括:

步骤S221、从RNL [i]中得出最大实际占用扇区数的目录块,该目录块实际占用扇区数记为TSPC,因为簇的大小≥TSPC,并且簇的大小符合2

步骤S222、假定外循环FAT起始扇区号为FS,初始值FS=2048;则每次外循环完成FS=FS*2。

步骤S223、假定内循环簇的大小为CS,初始值CS=65536,匹配度为PZ,初始值PZ=0,则每次内循环完成CS=CS/2。

步骤S224、首先进行第一个目录块的验证,通过该目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证FAT起始扇区号和簇大小,若验证通过,则匹配值PZ=PZ++;若所有目录块未验证完成,则继续进行下一个目录块的验证,若所有目录块验证完成,则算出匹配度PD=PZ/n1,若匹配度PD大于或等于预设的目标匹配阈值时,表明假设验证成功,则验证结束,退出整个循环;此时实际的FAT起始扇区号等于假设的FAT起始扇区号,实际的簇的大小等于假设的簇的大小;若统计出的目录块中的匹配度小于预设的目标匹配阈值时,则表明此次假设验证失败;继续循环进行假设,直到验证成功为止,若所有假设验证都失败,则FAT起始扇区号等于默认值,实际的簇的大小等于默认值。

步骤S224具体包括:

步骤S2241、根据分区簇的大小正确性判定法则:假设分区簇的大小是CS,PZ是匹配值,用来统计符合簇的大小和FAT起始扇区号的目录块的数量,初始值PZ=0,其中,i代表目录块号,初始值i=0,代表从第0号目录块开始计算匹配值。

步骤S2242、利用公式(1)

步骤S2243、取出i号目录块的起始扇区号SS,若

步骤S2244、判断i是否≥n1,若不满足,则跳转至步骤S242;若满足,跳转至步骤S2245。

步骤S2245、若识别到(float)PZ/(float)n1≥90%(表示阈值,根据用户的需求确定),则实际FAT起始扇区号=FS,实际每簇扇区数=CS。

步骤S2245、若识别到(float)PZ/(float)n1<90%(表示阈值,根据用户的需求确定),则假设每簇扇区号的值折半,CS=CS/2;若CS≥MinSecPerClus,则跳转至步骤S2241,继续根据判定法则式验证CS和FS的正确性。

步骤S2246、若识别到CS

步骤S2247,若识别到FS≤65536,则从簇的大小的最大值65536开始假设该分区簇的大小并记为CS,初始化时假设该分区簇的大小CS=65536;跳转至S2241继续根据判定法则式继续验证CS和FS的正确性。

步骤S2247,若识别到FS>65536,则表示整个假设验证失败,则根据分区大小,将默认值(如表1所示)分别赋给实际FAT起始扇区号和实际每簇扇区数。

步骤S230,根据扫描得出的临时首簇起始扇区号,利用第一假设判定法则式和第二假设判定法则式计算所有目录块的匹配度,并和阈值进行比较,确定是否假设验证成功。

步骤S240、根据验证成功的FAT起始扇区号和簇的大小,计算得出首簇起始扇区号和根目录首簇号。

利用公式(1)得到理想总簇数。再利用如下公式得到FAT扇区数:

公式(7)中,表示FAT扇区数,ISC表示理想总簇数,CS表示簇大小,⌊ ⌋表示向下取整;

公式(8)中,TSP表示总扇区数;CS表示簇大小。

利用下式得到实际首簇起始扇区号,实际首簇起始扇区号为:

公式(9)中,FCS表示实际首簇起始扇区号,ISC表示理想总簇数;FS表示FAT起始扇区号,⌊ ⌋表示向下取整。

利用下式得到实际总簇数,实际总簇数为:

公式(10)中,RSC表示实际总簇数,表示总扇区数,FCS表示首簇起始扇区号,CS表示簇大小,⌊ ⌋表示向下取整。

利用下式得到根目录首簇号,根目录首簇号为:

公式(11)中,RFC表示根目录首簇号,RSC表示实际总簇数,CS表示簇大小,⌊ ⌋表示向下取整。

步骤S250、根据目录块实际占用的扇区数列表RNL,求出最大的目录块占用的扇区数,记为TMSPC;根据簇的大小≥TMSPC,并且簇的大小符合2

本发明另一方面提出一种基于BPB关键参数计算的exFAT数据恢复系统,实施例的功能框图如图4所示,基于BPB关键参数计算的exFAT数据恢复系统包括假设模块10、验证模块20和恢复模块30,其中,

假设模块10,用于假设FAT起始扇区号和簇的大小,计算得出临时首簇起始扇区号;

验证模块20,用于将计算得出的临时首簇起始扇区号作为恢复参数,首先通过目录块起始扇区号初次验证,再通过目录块起始簇号和文件夹起始簇号列表二次验证,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,根据匹配度和目标匹配阈值进行比较,最终验证FAT起始扇区号和簇大小,通过FAT起始扇区号和簇大小,计算得到BPB关键参数;

恢复模块30,用于利用计算得到的BPB关键参数,实现exFAT数据的恢复。

验证模块请见图6,图6为图4中所示的验证模块一实施例的功能模块示意图,在本实施例中,验证模块20首先假设FAT起始扇区号初始值为2048,假设簇的大小初始值为65536,它包括第一验证单元21、第二验证单元22和第二计算单元23,第三计算单元24,第四计算单元25,其中,

第一验证单元21,用于根据第一假设判定法则式,通过目录块起始扇区号初次验证假设的FAT起始扇区号和簇的大小,根据第二假设判定法则式,通过计算得到的目录块起始簇号和文件夹起始簇号列表二次验证FAT起始扇区号和簇的大小的正确性,并统计出所有目录块的匹配值,用匹配值除以目录块数量得到匹配度,若匹配度大于或等于预设的目标匹配阈值时,则表明假设验证成功,此时实际的FAT起始扇区号等于假设的FAT起始扇区号的初始值,实际的簇的大小等于假设的簇的大小的初始值;若匹配度小于预设的目标匹配阈值时,则表明假设验证失败。

第二验证单元22,用于若假设验证失败,且当假设的簇的大小的假设值为假设的簇的大小的初始值一半时,继续内循环进行第一验证单元,若验证成功,则跳出整个循环,;若验证成失败,则继续整个循环,直至当假设的簇的大小的假设值小于每簇扇区的最小值时,则跳出内循环,进行外循环;若假设的FAT起始扇区号的假设值为假设的FAT起始扇区号的初始值的二倍时,继续外循环,直至当假设的FAT起始扇区号的假设值大于FAT起始扇区号的最大值时,则假设验证失败,提示用户阈值设置太大,并将阈值改小,进行全新一轮的假设;若阈值设置足够小但仍然假设验证失败,则说明未找到有用线索,此时将实际的FAT起始扇区号和实际的簇的大小均取默认值。

第二计算单元23,用于根据扫描得出的临时首簇起始扇区号,利用第一、第二假设判定法则式计算所有目录块的匹配度,并和阈值进行比较,确定是否假设验证成功。

研究发现,每个目录块的起始扇区实际上是目录块所在簇的起始扇区,簇的起始扇区又是由簇的大小、簇号和首簇起始扇区决定,目录块中每个文件夹目录项又记录了目录块的起始簇号,由此可得第一假设判定法则式和第二假设判定法则式。

所述第一假设判定法则式为:

所述第二假设判定法则式为:

若DBClu∈SCL,则该目录块匹配成功,匹配值PZ=PZ++;

PD=(float)PZ/(float)n1*100%

若PD≥设定的阈值,则假设验证成功;

其中,SS表示目录块的起始扇区,IFCS表示临时首簇起始扇区号;CS表示假设的簇大小;DBClu表示目录块所在的起始簇号,PZ表示匹配值,初始值为0,SCL表示文件夹起始簇号列表,n1表示目录块数量,PD表示所有目录块的匹配度;

第三计算单元24:用于根据第二计算单元23验证成功的FAT起始扇区号和簇的大小,进一步计算得出首簇起始扇区号,根目录首簇号。

首簇起始扇区号由以下公式计算得出:

其中,FCS表示首簇起始扇区号,ISC表示理想总簇数,FS表示假设的FAT起始扇区号,⌊ ⌋表示向下取整;

其中,TSP表示总扇区数;CS表示假设的簇大小,⌊ ⌋表示向下取整。

根目录首簇号由以下公式计算得出:

其中,RFC表示根目录首簇号,RSC表示实际总簇数,CS表示簇大小,⌊ ⌋表示向下取整;

其中, RSC表示实际总簇数, TSP表示总扇区数, FCS表示首簇起始扇区号,CS表示簇大小,⌊ ⌋表示向下取整。

第四计算单元25,用于根据目录块实际占用的扇区数列表RNL,求出最大的目录块占用的扇区数,记为TMSPC;根据簇的大小≥TMSPC,并且簇的大小符合2

进一步地,请见图5,图5为图4中所示的假设模块一实施例的功能模块示意图,在本实施例中,假设模块包括扫描单元11、假设单元12和第一计算单元13,其中,

扫描单元11,用于扫描可搜索到的每个目录块的起始扇区列表DSL、文件和文件夹属性列表FAL、文件夹起始簇号列表SCL和目录块实际占用的扇区数列表RNL。

假设单元12,用于根据FAT起始扇区和簇的大小规律,假设FAT起始扇区号和簇大小。FAT起始扇区号是2048或者2048的倍数,最大是65536,根据簇的大小的规律,簇的大小是[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536]17个数据中的一个。再根据第四计算单元25簇的大小的范围[MinSPC,65536]假设簇的大小。

第一计算单元13,用于以假设的FAT起始扇区号作为外循环,以假设的簇的大小作为内循环,计算出临时首簇起始扇区号。

临时首簇起始扇区号由以下公式计算得出:

其中,IFCS表示临时首簇起始扇区号,ISC表示理想总簇数,FS表示假设的FAT起始扇区号,⌊ ⌋表示向下取整;

其中,TSP表示总扇区数;CS表示假设的簇大小,⌊ ⌋表示向下取整。

优选地,参见图7,图7为图4中所示的恢复模块一实施例的功能模块示意图,恢复模块30包括恢复单元31,其中,

恢复单元31利用求出的FAT扇区数、首簇起始扇区号和根目录首簇号等、以及目录块中各个目录项的属性值,进行exFAT数据的恢复。

本实施例提供的基于BPB关键参数计算的exFAT数据恢复方法及系统,相比于现有技术,通过假设FAT起始扇区号和簇的大小,得出临时的首簇起始扇区号;将得出的临时首簇起始扇区号FCS作为恢复参数,根据第一假设判定法则式,通过目录块起始扇区号初次验证假设的FAT起始扇区号和簇的大小,根据第二假设判定法则式,通过目录块起始簇号和文件夹起始簇号列表验证FAT起始扇区号和簇的大小的正确性并统计出所有目录块的匹配值,匹配值除以目录块数量得到匹配度,若匹配度大于或等于预设的目标匹配阈值(阈值用于数据恢复成功率的参考,可以由用户决定)时,则表明假设验证成功,此时实际的FAT起始扇区号等于假设的FAT起始扇区号,实际的簇的大小等于假设的簇的大小,再通过计算得到BPB关键参数,BPB关键参数包括实际首簇起始扇区号、FAT扇区数和根目录首簇号;利用计算得到的BPB关键参数,实现exFAT数据的恢复。本实施例提供的基于BPB关键参数计算的exFAT数据恢复方法及系统,CS和FCS计算复大大降低;适应格式化、病毒破坏等的数据恢复,具有广泛的适应性。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

相关技术
  • 基于BPB关键参数的exFAT数据恢复方法及系统
  • 基于BPB关键参数的exFAT数据恢复方法及系统
技术分类

06120112641126