法律状态公告日
法律状态信息
法律状态
2018-07-03
授权
授权
2016-08-10
实质审查的生效 IPC(主分类):G06F11/07 申请日:20160202
实质审查的生效
2016-07-13
公开
公开
技术领域
本发明属于计算机领域,具体涉及一种exFAT分区格式化之后,基于假设 验证的exFAT格式化恢复方法和装置。
背景技术
exFAT作为对FAT进行扩展的文件系统,是一种非常适合用在闪存上的文件 系统,被广泛用于移动存储介质上面。exFAT丢失数据的恢复一直是信息安全领 域里面关注的一个重点。exFAT数据丢失的原因主要可以分为两种,第一种是被 误删除或者恶意删除,第二种是被误格式化或者恶意格式化。针对第一种情况, 现有的恢复技术已经非常成熟,能够达到良好的恢复效果。针对第二种情况, 现有的恢复技术采用格式化之后的一些参数当作数据恢复过程中的参数,存在 着恢复数据不准确的情况。
文件内容的起始扇区计算方式如下:
FileDataStartSector=ClusterStartSector+FileDataStartCluser*CluserSize/SectorSize
其中,FileDataStartSector代表文件内容的起始扇区, ClusterStartSector表示簇起始扇区号,FileDataStartCluser表示文件内容 的起始簇号,CluserSize表示簇大小。此外,ClusterStartSector和CluserSize 会受到分区格式化的影响,FileDataStartCluser记录在文件记录 中,SectorSize为磁盘的扇区大小一般为512字节
exFAT文件系统被格式化时,大多数情况下只是重新分配了文件系统相关的 区域信息和结构信息,格式化之前的文件记录信息一般还会残留在磁盘中。因 此,通过全盘搜索残留的文件记录信息就能够恢复出格式化之前的数据。
参考专利文献CN102254048B公开了一种数据恢复的方法和系统,在exFAT 分区被格式化后,通过计算出2号簇所对应扇区号来标定扫描出的需要恢复的 文件,然后通过磁盘读操作从exFAT分区将文件数据恢复出来。
现有的exFAT格式恢复技术采用格式化之后分区的簇起始扇区号和簇大小 作为exFAT格式化恢复的参数,但由于格式化之后的簇大小和簇起始扇区号两 个参数很可能发生了变化,而恢复过程中对恢复文件内容的定位又依赖于这些 参数,所以直接采用格式化之后的参数进行恢复会出现恢复结果不准确的问题。 虽然能够恢复出文件名称/大小等属性信息,但是恢复出的文件内容却是错误 的。
发明内容
针对现有技术存在的不足之处,本发明提出了一种提出了一种基于假设验 证的exFAT格式化恢复方法和装置。该方法通过假设并反向验证计算出最有可 能的簇起始扇区号和簇大小作为恢复参数,最大程度上保证了恢复结果的准确 性。经实验验证,该方法的恢复效果比现有恢复软件的效果更好。
本发明采用如下技术方案:
一种基于假设验证的exFAT格式化恢复方法,它包括以下步骤,
S1,通过搜索格式化后的分区,获取簇起始扇区号ClusterStartSector'、 簇大小CluserSize'、扇区大小SectorSize;
S2,获取起始扇区号列表DirStartSectorList={DS1,DS2,DS3,…,DSn1},DSk为文件夹k的起始扇区号,k=1、2、3、…、n1,n1为文件夹起始扇区总数,起 始簇号列表DirStartCluserList={DC1,DCL2,DC3,…,DCn2},DCp为文件夹p 的起始簇号,p=1、2、3、…、n2,n2为文件夹起始簇号总数,信息列表 FileInfoList={FI1,FI2,FI3,…,FIn},FIi为文件或文件夹i信息,i=1、2、3、…、 n,n为文件和文件夹总数;
S3,设定簇大小CS={CS1,CS2,…,CSm},采用簇起始扇区号算法获取每一 个CSj对应的簇起始扇区号CSS={CSS1j,CSS2j,…,CSSaj},其中,a为簇大小CSj对应的簇起始扇区号总数,采用匹配度法则获取(CSj,CSSxj)对应的匹配度, 其中,x=1、2、3、…、a,选取匹配度最大的(CSj,CSSmaxj);
S4,从(CSj,CSSmaxj)中,j=1、2、3、…、m,选取匹配度最大的(CSmax, CSSmaxmax);
S5,步骤S3和步骤S4均执行成功,则簇大小CS=CSmax,簇起始扇区号 ClusterStartSector=CSSmaxmax,选取失败,则簇大小CS=CS',簇起始扇区号 ClusterStartSector=ClusterStartSector';
S6,将ClusterStartSector和CluserSize作为恢复参数并结合 FileInfoList恢复文件。
进一步的,步骤S2包括以下具体步骤,
S201,解析格式化后分区卷头信息,获取分区的总扇区数TotalSectors, 初始化当前扇区号CurrentSector=0;
S202,判断CurrentSector≧TotalSectors,如果是,则结束,如果否,则 转到步骤S203;
S203,读取CurrentSector扇区的数据,并根据文件夹数据判断法则判断 该扇区是否是文件夹的扇区,如果是,则转到步骤S204,如果否,则 CurrentSector=CurrentSector+1后转到步骤S202;
S204,将CurrentSector存入DirStartSectorList中,按照exFAT文件目 录项的结构从CurrentSector开始一直往下解析相应的文件或文件夹信息直到 遇到不符合结构特征的目录项才停止,这个扇区的扇区号为ValidSector,解析 到的文件/文件夹信息存入到FileInfoList中,同时如果是文件夹将相应的起 始簇号DC存入到DirStartCluserList中;
S205,判断CurrentSector是否等于ValidSector,如果是,则 CurrentSector=CurrentSector+1后转到步骤S202,如果否,则 CurrentSector=ValidSector后转到步骤S202。
更进一步的,步骤S203中文件夹数据判断法则为:
条件一:扇区的第1个字节为0x85且第16个字节为0xC0且第32个字节 为0xC1;
条件二:扇区的第1个字节为0x05且第16个字节为0x40且第32个字节 为0x41;
当该扇区的数据满足以上两个条件中的任何一个时,则该扇区为文件夹的 扇区,否则不是文件夹的扇区。
进一步的,步骤S3中簇起始扇区号算法为:
DirStartCluserList列表中的元素DCp和DirStartSectorList列表中的元 素DSk表示的是同一个文件夹,则计算公式为:
簇起始扇区号=DSk-DCp*CS/SectorSize。
进一步的,S3中匹配度法则包括以下步骤,
S301,获取簇大小为CSj及其对应的簇起始扇区号CSSxj;
S302,设定起始扇区号列表DirStartSectorList'={DS1',DS2',DS3',...., DSn2'},且h=1、2、3、…、n2,
DSh'=(DCp*CSj)/SectorSize+CSSxj;
S303,(CSj,CSSxj)的匹配度Match(CSj,CSSxj)等于DirStartSectorList' 和DirStartSectorList两个列表中相同元素的个数。
一种基于假设验证的exFAT格式化恢复装置,它包括,
解析单元,用于解析格式化分区卷头信息,获取簇起始扇区号 ClusterStartSector'、簇大小CluserSize'、扇区大小SectorSize和总扇区数 TotalSectors;
文件或文件夹信息获取单元,用于获取起始扇区号列表 DirStartSectorList={DS1,DS2,DS3,…,DSn1},DSk为文件夹k的起始扇区号, k=1、2、3、…、n1,n1为文件夹起始扇区总数,起始簇号列表 DirStartCluserList={DC1,DCL2,DC3,…,DCn2},DCp为文件夹p的起始簇号, p=1、2、3、…、n2,n2为文件夹起始簇号总数,信息列表FileInfoList={FI1, FI2,FI3,…,FIn},FIi为文件或文件夹i信息,i=1、2、3、…、n,n为文件和 文件夹总数;
恢复参数获取单元,用于根据设定簇大小CS={CS1,CS2,…,CSm},采用簇 起始扇区号算法获取每一个CSj对应的簇起始扇区号CSS={CSS1j,CSS2j,…, CSSaj},其中,a为簇大小CSj对应的簇起始扇区号总数,采用匹配度法则获取(CSj, CSSxj)对应的匹配度,其中,x=1、2、3、…、a,选取匹配度最大的(CSj,CSSmaxj), 从(CSj,CSSmaxj)中,j=1、2、3、…、m,选取匹配度最大的(CSmax,CSSmaxmax), 选取匹配度最大的(CSj,CSSmaxj)和(CSmax,CSSmaxmax)均执行成功,则簇大小CS= CSmax,簇起始扇区号ClusterStartSector=CSSmaxmax,选取失败,则簇大小CS=CS', 簇起始扇区号ClusterStartSector=ClusterStartSector';
恢复文件单元,用于将ClusterStartSector和CluserSize作为恢复参数 并结合FileInfoList恢复文件。
进一步的,文件或文件夹信息获取单元执行以下具体步骤,
S201,解析格式化后分区卷头信息,获取分区的总扇区数TotalSectors, 初始化当前扇区号CurrentSector=0;
S202,判断CurrentSector≧TotalSectors,如果是,则结束,如果否,则 转到步骤S203;
S203,读取CurrentSector扇区的数据,并根据文件夹数据判断法则判断 该扇区是否是文件夹的扇区,如果是,则转到步骤S204,如果否,则 CurrentSector=CurrentSector+1后转到步骤S202;
S204,将CurrentSector存入DirStartSectorList中,按照exFAT文件目 录项的结构从CurrentSector开始一直往下解析相应的文件或文件夹信息直到 遇到不符合结构特征的目录项才停止,这个扇区的扇区号为ValidSector,解析 到的文件/文件夹信息存入到FileInfoList中,同时如果是文件夹将相应的起 始簇号DC存入到DirStartCluserList中;
S205,判断CurrentSector是否等于ValidSector,如果是,则 CurrentSector=CurrentSector+1后转到步骤S202,如果否,则 CurrentSector=ValidSector后转到步骤S202。
更进一步的,步骤S203中文件夹数据判断法则为:
条件一:扇区的第1个字节为0x85且第16个字节为0xC0且第32个字节 为0xC1;
条件二:扇区的第1个字节为0x05且第16个字节为0x40且第32个字节 为0x41;
当该扇区的数据满足以上两个条件中的任何一个时,则该扇区为文件夹的 扇区,否则不是文件夹的扇区。
进一步的,恢复参数获取单元执行的簇起始扇区号算法为:
DirStartCluserList列表中的元素DCp和DirStartSectorList列表中的元 素DSk表示的是同一个文件夹,则计算公式为:
簇起始扇区号=DSk-DCp*CS/SectorSize。
进一步的,恢复参数获取单元采用的匹配度法则包括以下步骤,
S301,获取簇大小为CSj及其对应的最大簇起始扇区号CSSxj;
S302,设定起始扇区号列表DirStartSectorList'={DS1',DS2',DS3',...., DSn2'},且h=1、2、3、…、n2,
DSh'=(DCp*CSj)/SectorSize+CSSxj;
S303,(CSj,CSSxj)的匹配度Match(CSj,CSSxj)等于DirStartSectorList'和 DirStartSectorList两个列表中相同元素的个数。
现有的exFAT格式化恢复技术恢复的文件内容经常会出错,而传统基于文 件特征的恢复技术,恢复出的文件又没有文件名称/大小等信息。本发明在深入 了解exFAT文件系统结构的基础上,提出了一种基于假设验证的exFAT格式化 恢复方法。该方法通过假设并反向验证计算出最有可能的簇起始扇区号和簇大 小作为恢复参数,最大程度上保证了恢复结果的准确性。该方法解决现有exFAT 格式化恢复技术存在的缺陷,大大提高了恢复效果,是对exFAT丢失数据恢复 的一项重大的补充。
附图说明
图1是基于假设验证的exFAT格式化恢复方法的流程图;
图2是文件或文件夹相关信息获取流程图;
图3是格式化界面;
图4是匹配度法则流程图;
图5是格式化前用R-Studio加载的文件视图;
图6是格式化前用R-Studio加载的示意图;
图7是格式化后用R-Studio恢复的文件视图;
图8是格式化后用R-Studio恢复的示意图;
图9是格式化使用本发明恢复的示意图。
具体实施方式
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容 的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例 的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实 施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通 常用来表示类似的组件。
现结合附图和具体实施方式对本发明进一步说明。
参阅图1所示,为基于假设验证的exFAT格式化恢复方法的流程图,该方 法包括以下步骤:
S1,通过搜索格式化后的分区,获取簇起始扇区号ClusterStartSector'、 簇大小CluserSize'、扇区大小SectorSize。
exFAT文件系统被格式化之后,解析格式化之后分区的卷头信息,可以获得 簇起始扇区号ClusterStartSector'、簇大小CluserSize'、扇区大小 SectorSize。
S2,获取起始扇区号列表DirStartSectorList={DS1,DS2,DS3,…,DSn1},DSk为文件夹k的起始扇区号,k=1、2、3、…、n1,n1为文件夹起始扇区总数,起 始簇号列表DirStartCluserList={DC1,DCL2,DC3,…,DCn2},DCp为文件夹p 的起始簇号,p=1、2、3、…、n2,n2为文件夹起始簇号总数,信息列表 FileInfoList={FI1,FI2,FI3,…,FIn},FIi为文件或文件夹i信息,i=1、2、3、…、 n,n为文件和文件夹总数。
其中,DSk和DCp均为整型数值。FIi包含有4个属性值:FileName(文件名 称,是一个字符串)、FileTimeInfo(时间信息,包括创建时间、修改时间、 访问时间,每个时间信息都是一个整型)、FileSize(文件大小,是一个整型)、 FileDataStartCluser(文件夹的起始簇号,是一个整型)。
参阅图2所示,为本发明文件或文件夹相关信息获取流程图,即步骤S2具 体包括以下步骤,
S201,解析格式化后分区卷头信息,获取分区的总扇区数TotalSectors, 初始化当前扇区号CurrentSector=0。
S202,判断CurrentSector≧TotalSectors,如果是,则结束,如果否,则 转到步骤S203。
S203,读取CurrentSector扇区的数据,并根据文件或文件夹数据判断法 则判断该扇区是否是文件夹的扇区,如果是,则转到步骤S204,如果否,则当 CurrentSector=CurrentSector+1后,转到步骤S202。
其中,文件夹数据判断法则为:
条件一:扇区的第1个字节为0x85且第16个字节为0xC0且第32个字节 为0xC1;
条件二:扇区的第1个字节为0x05且第16个字节为0x40且第32个字节 为0x41;
当该扇区的数据满足以上两个条件中的任何一个时,则该扇区为文件夹的 扇区,否则不是文件夹的扇区。
S204,将CurrentSector存入DirStartSectorList中,按照exFAT文件目 录项的结构从CurrentSector开始一直往下解析相应的文件或文件夹信息直到 遇到不符合结构特征的目录项才停止,这个扇区的扇区号为ValidSector,解析 到的文件/文件夹信息存入到FileInfoList中,同时如果是文件夹将相应的起 始簇号DC存入到DirStartCluserList中。
文件夹A包括文件txt1、文件txt2和文件夹B,则CurrentSector为文件 夹A的起始扇区号,从该起始扇区一直往下解析,获取文件txt1、文件txt2和 文件夹B的信息,将文件txt1、文件txt2和文件夹B的信息存入到FileInfoList 中,并将获取的文件夹B的起始簇号DC存入到DirStartCluserList中。故 DirStartSectorList、DirStartCluserList、FileInfoList的长度不同。
S205,判断CurrentSector是否等于ValidSector,如果是,则 CurrentSector=CurrentSector+1后转到步骤S202,如果否,则 CurrentSector=ValidSector后转到步骤S202。
若扇区0内前部分为文件或文件夹信息,后部分不是,则CurrentSector=0, ValidSector=0,CurrentSector等于ValidSector,则 CurrentSector=CurrentSector+1后转到步骤S202。若在扇区CurrentSector=0, 解析到ValidSector=5为止,则CurrentSector不等于ValidSector, CurrentSector=5。
S3,设定簇大小CS={CS1,CS2,…,CSm},采用簇起始扇区号算法获取每一 个CSj对应的簇起始扇区号CSS={CSS1j,CSS2j,…,CSSaj},其中,a为簇大小CSj对应的簇起始扇区号总数,采用匹配度法则获取(CSj,CSSxj)对应的匹配度, 其中,x=1、2、3、…、a,选取匹配度最大的(CSj,CSSmaxj)。
参阅图3所示,为格式化界面,格式化时“分配单元大小”(即簇大小) 的是有一定的取值范围的。本发明CS={512,1024,2048,4096,8192,16384, 32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608, 16777216,33554432}表示簇大小可能的取值,共有17种可能的取值,即m=17。
针对每一个簇大小,计算出该簇大小对应的簇起始扇区号,以CS1=512为例, 簇起始扇区号算法为DirStartCluserList列表中的元素DCp和 DirStartSectorList列表中的元素DSk表示的是同一个文件夹,则计算公式为:
簇起始扇区号=DSk-DCp*CS1/SectorSize
通过以上公式,可以得到多个簇起始扇区号CSS={CSS1j,CSS2j,…,CSSaj},其 中,a为簇大小CSj对应的簇起始扇区号总数。
采用匹配度法则获取(CSj,CSSxj)对应的匹配度,其中,x=1、2、3、…、a, 选取匹配度最大的(CSj,CSSmaxj)。参阅图4所示,为匹配度法则流程图。它包 括以下步骤:
S301,获取簇大小为CSj及其对应的簇起始扇区号CSSxj;
S302,设定起始扇区号列表DirStartSectorList'={DS1',DS2',DS3',...., DSn2'},且h=1、2、3、…、n2,DirStartSectorList'和步骤S2中获取到 DirStartCluserList列表的元素个数一样,且DSh'满足以下条件:
DSh'=(DCp*CSj)/SectorSize+CSSxj;
S303,(CSj,CSSxj)的匹配度Match(CSj,CSSxj)等于DirStartSectorList' 和DirStartSectorList两个列表中相同元素的个数。
从所有的匹配度中选择Match(CSj,CSSxj)最大的(CSj,CSSmaxj),簇大小 CSj对应最大匹配度的簇起始扇区号为CSSmaxj,则相应的计算公式如下:
S4,从(CSj,CSSmaxj)中,j=1、2、3、…、m,选取匹配度最大的(CSmax, CSSmaxmax)。相应的计算公式为:
S5,选取成功,即步骤S3和步骤S4均执行成功,则簇大小CS=CSmax,簇起 始扇区号ClusterStartSector=CSSmaxmax;极端情况下DirStartCluserList或者 DirStartSectorList可能为空,导致选取失败,则簇大小CS=CS',簇起始扇区 号ClusterStartSector=ClusterStartSector'。
S6,将ClusterStartSector和CluserSize作为恢复参数并结合 FileInfoList恢复文件。
本发明还提出了一种基于假设验证的exFAT格式化恢复装置,它包括,
解析单元,用于解析格式化分区卷头信息,获取簇起始扇区号 ClusterStartSector'、簇大小CluserSize'、扇区大小SectorSize和总扇区数 TotalSectors;
文件或文件夹信息获取单元,用于获取起始扇区号列表 DirStartSectorList={DS1,DS2,DS3,…,DSn1},DSk为文件夹k的起始扇区号, k=1、2、3、…、n1,n1为文件夹起始扇区总数,起始簇号列表 DirStartCluserList={DC1,DCL2,DC3,…,DCn2},DCp为文件夹p的起始簇号, p=1、2、3、…、n2,n2为文件夹起始簇号总数,信息列表FileInfoList={FI1, FI2,FI3,…,FIn},FIi为文件或文件夹i信息,i=1、2、3、…、n,n为文件和 文件夹总数;
恢复参数获取单元,用于根据设定簇大小CS={CS1,CS2,…,CSm},采用簇 起始扇区号算法获取每一个CSj对应的簇起始扇区号CSS={CSS1j,CSS2j,…, CSSaj},其中,a为簇大小CSj对应的簇起始扇区号总数,采用匹配度法则获取(CSj, CSSxj)对应的匹配度,其中,x=1、2、3、…、a,选取匹配度最大的(CSj,CSSmaxj), 从(CSj,CSSmaxj)中,j=1、2、3、…、m,选取匹配度最大的(CSmax,CSSmaxmax), 选取匹配度最大的(CSj,CSSmaxj)和(CSmax,CSSmaxmax)均执行成功,则簇大小CS= CSmax,簇起始扇区号ClusterStartSector=CSSmaxmax,选取失败,则簇大小CS=CS', 簇起始扇区号ClusterStartSector=ClusterStartSector';
恢复文件单元,用于将ClusterStartSector和CluserSize作为恢复参数 并结合FileInfoList恢复文件。
其中,文件或文件夹信息获取单元包括以下具体步骤,
S201,解析格式化后分区卷头信息,获取分区的总扇区数TotalSectors, 初始化当前扇区号CurrentSector=0。
S202,判断CurrentSector≧TotalSectors,如果是,则结束,如果否,则 转到步骤S203。
S203,读取CurrentSector扇区的数据,并根据文件夹数据判断法则判断 该扇区是否是文件夹的扇区,如果是,则转到步骤S204,如果否,则 CurrentSector=CurrentSector+1后转到步骤S202。
文件夹数据判断法则为:
条件一:扇区的第1个字节为0x85且第16个字节为0xC0且第32个字节 为0xC1;
条件二:扇区的第1个字节为0x05且第16个字节为0x40且第32个字节 为0x41;
当该扇区的数据满足以上两个条件中的任何一个时,则该扇区为文件夹的 扇区,否则不是文件夹的扇区。
S204,将CurrentSector存入DirStartSectorList中,按照exFAT文件目 录项的结构从CurrentSector开始一直往下解析相应的文件或文件夹信息直到 遇到不符合结构特征的目录项才停止,这个扇区的扇区号为ValidSector,解析 到的文件/文件夹信息存入到FileInfoList中,同时如果是文件夹将相应的起 始簇号DC存入到DirStartCluserList中。
S205,判断CurrentSector是否等于ValidSector,如果是,则 CurrentSector=CurrentSector+1后转到步骤S202,如果否,则 CurrentSector=ValidSector后转到步骤S202。
需要说明的是,恢复参数获取单元中簇起始扇区号算法为:
DirStartCluserList列表中的元素DCp和DirStartSectorList列表中的元 素DSk表示的是同一个文件夹,则计算公式为:
簇起始扇区号=DSk-DCp*CS/SectorSize。
此外,恢复参数获取单元中匹配度法则包括以下步骤,
S301,获取簇大小为CSj及其对应的最大簇起始扇区号CSSxj;
S302,设定起始扇区号列表DirStartSectorList'={DS1',DS2',DS3',...., DSn2'},且h=1、2、3、…、n2,
DSh'=(DCp*CSj)/SectorSize+CSSxj;
S303,(CSj,CSSxj)的匹配度Match(CSj,CSSxj)等于DirStartSectorList' 和DirStartSectorList两个列表中相同元素的个数。
为了验证本发明,做了如下实验。实验过程为:
1)、创建一个exFAT格式的分区,往里面考入一些文档图片等文件;
2)、将该分区格式化成FAT32分区,分别采用R-Studio和本发明进行恢 复对比。
参阅图5和图6所示,为格式化前用R-Studio加载的文件视图和示意图, 从图中可以看出,一个exFAT分区中的图片文件在格式化前可以正常预览。参 阅图7和图8所示,为格式化后用R-Studio恢复的文件视图和示意图,格式化 之后采用R-Studio进行恢复时虽然恢复出了文件名称、大小等信息但是文件无 法预览,文件内容恢复出错。
参阅图9所示,为格式化使用本发明恢复的示意图。采用本发明对格式化 后的分区进行恢复不仅准确的恢复出了文件名称、大小等信息,文件内容也可 以正常预览。原因分析:exFAT被格式化后簇大小和簇起始扇区号发生了变化, 现有的恢复技术无法处理该情况。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员 应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式 上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
机译: 一种用于烟草加工业的制条机的格式化元件的生产方法,格式化元件以及具有该格式化元件的装饰装置
机译: 用于格式化基于编辑的数据的方法,计算机可读存储装置以及用于格式化基于编辑的数据的系统
机译: 格式化部分,例如盖条,一种用于烟草加工业的格式化装置制棒机的制造方法,涉及通过激光束产生成型零件,其中零件由基体构造