CN110175087A - 一种Office文件数据分片修复方法 - Google Patents
一种Office文件数据分片修复方法 Download PDFInfo
- Publication number
- CN110175087A CN110175087A CN201910418929.9A CN201910418929A CN110175087A CN 110175087 A CN110175087 A CN 110175087A CN 201910418929 A CN201910418929 A CN 201910418929A CN 110175087 A CN110175087 A CN 110175087A
- Authority
- CN
- China
- Prior art keywords
- fragment
- data
- data block
- block
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1064—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in cache or content addressable memories
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种Office文件数据分片修复方法属于数据处理技术领域,尤其涉及一种Office文件数据分片修复方法。本发明提供一种Office文件数据分片修复方法。本发明包括以下步骤:步骤1):第i个Office文件共有u个分片,设置整数变量p初值为0;步骤2):如果p<u‑1,则执行步骤3),否则,结束;步骤3):令FLEN=第p个分片内最后一个数据块长度值,SP1’=第p个分片内最后一个数据块的起始地址,down(SP1’)=第p个分片内最后一个数据块的起始地址向下到达的首个簇块边界地址,SP1=第p+1个分片内第一个数据块的起始地址。
Description
技术领域
本发明属于数据处理技术领域,尤其涉及一种Office文件数据分片修复方法。
背景技术
Office办公软件被广泛应用于各个领域,Office文件中存储了大量有价值的数据信息。为了逃避法律制裁,犯罪分子会将存储涉案信息的Office文件删除,甚至直接格式化存储设备。恢复这些被删除的涉案Office文档对公安机关的调查取证工作有重要意义。
Office文件在编辑过程中,存储在磁盘上的文件数据极易出现分片情况,即文件内容被分为多段,分别存放在几块非连续存储区域内。图1显示的是某个Office文件被分成6个分片,分别存放在磁盘的6块存储区域内,图中给出了每个分片在磁盘空间内的起始簇号、分片的逻辑次序及分片占用的簇块个数。以第1个分片为例,它的起始簇号是0XE0E6,共占用0X06个簇块。从图1可见,这6个分片并不是按照逻辑次序依次存放,而是按照3、4、5、1、2、6的顺序存放。当被删Office文件的MFT记录遭到覆盖时,现有数据恢复工具(如Encase、X-WAY)无法有效恢复这类分段存储的Office文档。
图2说明了Office文件数据分片识别、排序、重组方法的基本原理。图2-a显示了一个Office文件的基本存储结构,每个Office文件均由三部分组成,即数据块区、目录区和目录结束记录。数据块区包含若干个数据块,每个数据块由块首部和具体的块数据构成,图2-a所示Office文件共包含4个数据块,即obj1-obj4。目录区由若干个目录项构成,每个目录项指向一个特定的Office数据块,目录项个数与数据块总数相同。目录项存储了对应数据块在Office文件内的偏移地址,同时记录了数据块对象名、块数据压缩前后大小和块数据CRC32校验值(注意这个校验值是未压缩块数据的CRC32校验值),上述信息也同步存储在相应Office数据块首部。在Office文件重组阶段,可以从目录项中提取出上述四种信息,将这些信息作为特征值搜索相匹配的数据块,再按照目录项中给出的偏移地址重组数据块。由于每组特征值包括了数据块对象名、压缩前后块数据大小和块数据CRC32校验值,共四个特征点,可以有效避免误报现象的发生。
图2-b显示这个Office文件并未存储在一块连续的存储空间内,而是被分为三个分片存放在磁盘内,且这三个分片也不是按照逻辑顺序依次存放,而是按照分片2、分片3、分片1的次序存储。图2-c显示了Office数据分片的识别结果,采用的识别方法是根据ZIP标志位和修改时间字段在磁盘空闲空间内查找全部Office数据块,如果两个数据块首尾相接,说明它们隶属于同一个数据分片,否则说明出现了新的分片,分片计数值加一。共有三种类型Office数据块,标志位分别是0X 50 4B 01 02或0X 50 4B 03 04或0X 50 4B 0506;由于其它类型ZIP文件(如APK文件)也存在这些标志位,因此,如果只使用标志位作为关键词进行搜索,会存在大量误报现象。为了避免这一问题,增加修改时间字段作为第二组关键词,Office数据块的修改时间字段值固定为0X 00 00 21 00,即1980-01-01 00:00:00,而其它类型ZIP数据块这个字段存储的是数据块内容发生变化的实际时间,因此通过这个字段值可以识别出全部Office数据块,避免误报。通过Office数据块首部存储的标志位可以确定数据块的起始地址,通过数据块首部存储的长度值可以确定数据块的结束位置,如果两个数据块首尾相接,说明它们隶属于同一个数据分片,否则说明出现了新的分片,分片计数值加一。利用这种方法可以识别出磁盘空闲空间内的全部Office数据分片,图2-b所示存储空间内Office数据分片识别结果如图2-c所示。
从图2-c可以看到三个分片均存在识别误差,这是由于分片边界位置数据块识别错误导致的,原因分析如下:当一个Office文件在磁盘内分段存储时,位于分片边界位置的Office数据块被一分为二,包含首部的块数据存储在前一个分片末尾,包含尾部的块数据存储在后一个分片的起始位置。如图2-b所示,obj2数据块被分割为两部分,第一部分obj2-1存储在分片1尾部,第二部分obj2-2存储在分片2首部。obj4数据块也被分割为两部分,第一部分obj4-1存储在分片2尾部,第二部分obj4-2存储在分片3首部。obj2-2和obj4-2首部均没有标志位特征值,因此在进行数据块识别时,这两部分内容没有识别出来。同时,通过标志位识别出obj2-1和obj4-1存储的数据块首部之后,用块首部起始地址加上数据块长度计算出块结束地址,导致obj2和obj4数据块识别错误,将部分不属于Office文件的数据内容识别进来,在图中用error字符进行了标注,错误识别的数据长度与未识别的数据长度相等。
在Office文件数据分片排序、重组阶段,首先通过目录结束记录计算出Office文件总大小,计算公式如下:Office文件总大小 = 目录区偏移地址 + 目录区大小 + 目录结束记录长度,其中目录区在Office文件内的偏移地址恰好等于数据块区大小,因此三者之和等于Office文件总大小。之后创建一个新的Office文件,新文件大小等于待恢复的Office文件总大小。将目录区数据写入新建文件尾部,再根据目录项中存储的数据块对象名、压缩前后块数据大小和CRC32校验值等特征值定位相应的数据块,按照目录项中记录的偏移地址,将数据块写入新文件特定的偏移位置。图2-d为恢复结果,obj2和obj4数据块错误识别的数据内容也被写入新文件。如果此时双击打开新文件,通常会提示出错,部分致命错误(如document.xml受损)会造成文件无法正常显示,需要对这类识别误差进行修正。
下面以图2-c中obj4数据块的修复为例分析受损数据块的修复原理,修复过程如图3所示,这里指定簇块大小为4096字节。图3中SP1’为分片2内最后一个数据块首部起始地址,down( SP1’ )为分片2内最后一个数据块首部向下到达的第一个簇块边界位置,SP1为分片3内第一个数据块起始位置,UP( SP1 )为分片3内第一个数据块首部向上到达的首个簇块边界位置。利用obj4块首部数据计算出块长度值为FLEN,如长度值满足FLEN = down(SP1’) – SP1’ + n × 4096 + SP1 – up(SP1) ,则两个分片可以尝试配对修复。在图3所示例子中,FLEN = down(SP1’) – SP1’ + 2 × 4096 + SP1 – up(SP1),长度值满足配对条件,可以尝试进行修复。目前已知数据块第一个分段obj4-1的起始地址是SP1',第二个分段obj4-2的结束地址是SP1,只要能计算出第一个分段的结束位置(即分片2的结束位置)和第二个分段的起始位置(即分片3的起始位置),即可重组两个分段。需要注意的是,由于磁盘空间以簇块为分配单位,因此,分片起始或结束位置一定位于簇块边界。本发明基本思路是通过不断调整数据块两个分段的大小,来探测正确的分片位置,直至动态组建的数据块CRC32校验值与块首部存储的CRC32值相同。首先将第一个分段大小预设为可能达到的最大值,即down(SP1’) – SP1’ + n × 4096,第二个分段大小设置为可能达到的最小值,即SP1– up(SP1),将两个分段组合在一起后,计算组成数据块的CRC32校验值。如计算出的CRC32校验值与数据块首部存储的CRC32校验值相同,说明配对成功,否则,配对失败,将第一个分段缩小1个簇块,第二个分段扩充1个簇块,再次匹配。重复上述过程,直至CRC32校验值正确,或第一个分段大小达到可能的最小值down(SP1’) – SP1’,第二个分段大小达到可能的最大值n × 4096 + SP1 – up(SP1),如仍然无法通过CRC32验证,则当前数据块修复失败。在图3所示例子中,经过两次配对后,正确重组了第4个数据块。
发明内容
本发明就是针对上述问题,提供一种Office文件数据分片修复方法。
为实现上述目的,本发明采用如下技术方案,本发明包括以下步骤:
步骤1):第i个Office文件共有u个分片,设置整数变量p初值为0;
步骤2):如果p < u - 1,则执行步骤3),否则,结束;
步骤3):令FLEN = 第p个分片内最后一个数据块长度值,SP1’ = 第p个分片内最后一个数据块的起始地址,down( SP1’ ) =第p个分片内最后一个数据块的起始地址向下到达的首个簇块边界地址,SP1 = 第p + 1个分片内第一个数据块的起始地址,up( SP1 ) = 第p + 1个分片内第一个数据块的起始地址向上到达的首个簇块边界地址,CS = 磁盘簇块大小;如果( FLEN - down( SP1’ ) + SP1’ - SP1 + up( SP1 ) ) MOD CS = 0条件为真,则执行步骤4),否则执行步骤9);
步骤4):令整数变量n = ( FLEN - down( SP1’ ) + SP1’ - SP1 + up( SP1 ) ) /CS,设置整数变量j = n,
步骤5):如果j >= 0,则执行步骤6),否则执行步骤9);
步骤6):令Frag1_pos = SP1’,Frag1_size = down( SP1’ ) – SP1’ + j × CS,Frag2_pos = up( SP1 ) – ( n – j ) × CS,Frag2_size = ( n – j ) × CS + SP1 -up( SP1 ) ,从地址Frag1_pos开始,提取Frag1_size字节数据作为第一部分内容,从地址Frag2_pos开始,提取Frag2_size字节数据作为第二部分内容,将两部分内容组合成一个数据块;计算组成数据块的CRC32校验值,如该值与数据块首部存储的CRC32值相同,说明配对成功,执行步骤7),否则,配对失败,执行步骤8),将前一部分内容收缩1个簇块,后一部分内容扩展1个簇块,重新配对;
步骤7):根据特征值定位受损数据块在第i个新建立待修复Office文件中的逻辑偏移地址为OA,将步骤6)重组成功的数据块从磁盘内读出,从逻辑偏移地址OA开始,将读出数据依次写入第i个新建立待修复Office文件,之后,执行步骤9);
步骤8):令j = j - 1,执行步骤5);
步骤9):令p = p + 1,执行步骤2,开始修复下一个受损数据块。
本发明有益效果。
本发明修复第i个Office文件位于分片边界位置数据块的识别错误,修复第i个Office文件中因分段而受损的数据块。输入参数包括第i个Office文件的目录区数据,第i个Office文件每个分片在磁盘内的起始和结束地址,指向第i个新建立待修复Office文件的指针。
附图说明
下面结合附图和具体实施方式对本发明做进一步说明。本发明保护范围不仅局限于以下内容的表述。
图1 Office文件分段存储举例。
图2 Office文件数据分片识别、排序、重组方法原理图.
图3 受损数据块修复举例。
图4 Office数据分片识别、排序、重组实例。
图5 待修复数据块在两个分片中的存储情况。
图6基于目录项的Office文件重组方法。
图7 目录区发生分片时,无法有效恢复Office文档。
图8 目录区分片重组示例。
图9目录区域被分片实例。
图10 目录分片重组实例。
图11目录项拼接。
具体实施方式
如图所示,本发明Office文件数据分片修复方法可应用于Office文件数据分片识别、排序、重组方法,Office文件数据分片识别、排序、重组方法包括以下步骤:
步骤1:在磁盘空闲空间内,识别出全部Office数据分片;
步骤2:在全部Office分片中,根据0X 50 4B 05 06标志位,查找包含Office文件尾部目录结束记录的数据分片;令此类分片总个数为t,即待恢复的Office文件总个数为t;设置整数变量i初值为0;
步骤3:根据第i个Office文件目录项定位第i个文件的全部数据块;
步骤4:重组第i个Office文件;
步骤5:设置i = i + 1,如果i < t,则执行步骤3,否则,结束;
所述步骤1包括以下步骤:
步骤1):磁盘内共有n块空闲存储空间,设置整数变量i和j初值均为0;
步骤2):设置搜索起始地址SP为第i块磁盘空闲空间起始地址;
步骤3):在第i块磁盘空闲空间内,从起始地址SP开始,根据ZIP标志位和修改时间字段查找Office数据块,如查找成功,确定数据块的起始位置BP1和长度值BL1,同时记录分片起始位置为CP[j] = BP1,分片长度值CL[j] = BL1,设置SP = BP1+ BL1,执行步骤4);如查找失败;则执行步骤6);ZIP标志位值为0X 50 4B 01 02或0X 50 4B 03 04或0X 50 4B 0506,数据块的修改时间字段值为0X 00 00 21 00,即1980-01-01 00:00:00;
步骤4):在第i块磁盘空闲空间内,从起始位置SP开始,根据ZIP标志位和修改时间字段查找Office数据块,如查找成功,执行步骤5);否则,执行步骤6);
步骤5):确定步骤4)命中数据块的起始位置BP2和长度值BL2;如果BP1 + BL1 = BP2,即两个数据块首尾相接,则令CL[j] = CL[j] + BL2,SP = BP2+ BL2,BP1 = BP2,BL1 =BL2,执行步骤4);如果BP1 + BL1 ≠ BP2,则令j = j + 1,新识别分片起始位置为CP[j] =BP2,分片初始长度值CL[j] = BL2,设置SP = BP2+ BL2,BP1 = BP2,BL1 = BL2,执行步骤4);
步骤6):如果CP[j] ≠ 0,则令j = j + 1;令i = i + 1,如果i < n,则跳转到步骤2),否则,结束。
本发明Office文件数据分片识别方法是在磁盘空闲空间内查找全部Office数据分片。Office分片的判断方法是根据ZIP标志位和修改时间字段在磁盘空闲空间内查找全部Office数据块,如果两个数据块首尾相接,说明它们隶属于同一个数据分片,否则说明出现了新的分片,分片计数值加一。输入参数是磁盘空闲存储空间地址信息。
所述步骤3包括以下步骤:
步骤1):第i个Office文件的目录项总个数为m,定义整数变量j初值为0;
步骤2):如果j < m,则执行步骤3),否则,结束;
步骤3):在全部Office数据分片中,通过特征值匹配,查找第j个目录项所指向的第j个Office数据块,如查找成功,设置BSP[j] = 数据块起始地址,ESP[j] = 数据块结束地址,否则,将BSP[j]和ESP[j]设置为-1;之后,令j = j + 1,执行步骤2);特征值包括:数据块对象名、压缩前后块数据大小和CRC32校验值;
本发明根据目录项定位数据块的方法是计算第i个Office文件全部数据块在磁盘存储空间内的起始和结束地址。如某个数据块缺失,则相应的块起始和结束地址值设置为-1。输入参数包括全部Office数据分片位置信息和第i个Office文件的目录区域数据。
所述步骤4包括以下步骤:
步骤1):定义整数变量j初值为0,根据第i个Office文件的目录结束记录确定文件大小为r;文件大小r计算方法如下,r = 目录区域在Office文件中的偏移地址 + 目录区域大小+ 目录结束记录长度;创建一个大小为r的空文件,将第i个Office文件的目录区域数据写入新建文件尾部,执行步骤2);
步骤2):第i个Office文件的目录项个数为m,如果j < m,则执行步骤3,否则,结束;
步骤3):根据第j个目录项确定第j个数据块在Office文件中的逻辑偏移地址为OA[j],第j个数据块在磁盘内的物理起始地址为BSP[j],结束地址为ESP[j];如果BSP[j] > 0且ESP[j] > 0,则将第j个数据块从磁盘内读出,从逻辑偏移地址OA[j]开始,将读出数据依次写入新建文件;之后,令j = j + 1,执行步骤2);
本发明Office文件重组方法将第i个Office文件的全部数据块依次从磁盘存储空间内读出,再按照目录项中记录的每个数据块的偏移地址,将全部数据块依次写入新建文件的特定偏移位置,完成文件重组。输入参数包括全部Office数据分片位置信息,第i个Office文件的目录区域数据,第i个Office文件每个数据块在磁盘内的起始和结束地址。
本发明从磁盘空闲空间内识别出Office数据分片,再将这些分片排序、重组为完整的Office文件,输入参数是磁盘空闲空间地址信息。本发明适用于2007以上版本Office文件。
下面以图1为例,举例说明Office数据分片识别、排序、重组方法。图4-b是根据标志位0x504B0506定位到的目录结束记录,这条记录位于图1中的分片6,记录长度为0x14字节。根据目录结束记录可知,目录区共有0x1A个目录项、大小为0x06B2字节、在Office文件中的偏移地址为0x0447CEA3。通过上述数值可以计算出Office文件总大小= 0x0447CEA3 +0x06B2 + 0x14,即0x447D569字节。新建立一个大小为0x447D569字节的空文件,这个文件将用于存储恢复出的Office文件数据内容。
如图4-b所示,目录区在磁盘内的结束地址为0x079EF9568,由于目录未发生分片,根据目录区域总大小0x06C6,可以计算出目录的起始地址为0x079EF8EA3。将起始和结束地址之间的目录数据从磁盘读出,写入到新建文件尾部,即写入新建文件偏移地址0x0447CEA3至0x447D569区间,完成目录区域的恢复。接下来,根据目录项依次识别、恢复每个Office数据块。
图4-a是以word/document.xml对象为例分析Office数据块的识别、恢复方法。目录项的起始地址为0x079EF8F67,从目录项中提取出数据块对象名、压缩前后块数据长度和CRC32校验值,利用上述特征值在全部Office数据块中进行匹配查找。定位到Office数据块位于分片1,起始地址为0x00E0E69C0,数据块总长度 = 块首部长度0x2F + 压缩数据长度0x0F1F,即0x0F4E字节。从目录项中提取出数据块在Office文件中的偏移地址为0x09C0,从数据块起始地址0x00E0E69C0开始,提取0x0F4E个字节数据,写入新建Office文件偏移地址0x09C0处,完成数据块恢复。利用上述方法,根据目录项完成全部数据块的识别和恢复。
在所述步骤4与步骤5之间可设置以下步骤(即本发明Office文件数据分片修复方法):
修复第i个Office文件中因分段而受损的数据块。
修复第i个Office文件中因分段而受损的数据块包括以下步骤:
步骤1):第i个Office文件共有u个分片,设置整数变量p初值为0;
步骤2):如果p < u - 1,则执行步骤3),否则,结束;
步骤3):令FLEN = 第p个分片内最后一个数据块长度值,SP1’ = 第p个分片内最后一个数据块的起始地址,down( SP1’ ) =第p个分片内最后一个数据块的起始地址向下到达的首个簇块边界地址,SP1 = 第p + 1个分片内第一个数据块的起始地址,up( SP1 ) = 第p + 1个分片内第一个数据块的起始地址向上到达的首个簇块边界地址,CS = 磁盘簇块大小;如果( FLEN - down( SP1’ ) + SP1’ - SP1 + up( SP1 ) ) MOD CS = 0条件为真,则执行步骤4),否则执行步骤9);
步骤4):令整数变量n = ( FLEN - down( SP1’ ) + SP1’ - SP1 + up( SP1 ) ) /CS,设置整数变量j = n,
步骤5):如果j >= 0,则执行步骤6),否则执行步骤9);
步骤6):令Frag1_pos = SP1’,Frag1_size = down( SP1’ ) – SP1’ + j × CS,Frag2_pos = up( SP1 ) – ( n – j ) × CS,Frag2_size = ( n – j ) × CS + SP1 -up( SP1 ) ,从地址Frag1_pos开始,提取Frag1_size字节数据作为第一部分内容,从地址Frag2_pos开始,提取Frag2_size字节数据作为第二部分内容,将两部分内容组合成一个数据块;计算组成数据块的CRC32校验值,如该值与数据块首部存储的CRC32值相同,说明配对成功,执行步骤7),否则,配对失败,执行步骤8),将前一部分内容收缩1个簇块,后一部分内容扩展1个簇块,重新配对;
步骤7):根据特征值定位受损数据块在第i个新建立待修复Office文件中的逻辑偏移地址为OA,将步骤6)重组成功的数据块从磁盘内读出,从逻辑偏移地址OA开始,将读出数据依次写入第i个新建立待修复Office文件,之后,执行步骤9);
步骤8):令j = j - 1,执行步骤5);
步骤9):令p = p + 1,执行步骤2,开始修复下一个受损数据块。
本发明修复第i个Office文件位于分片边界位置数据块的识别错误。输入参数包括第i个Office文件的目录区数据,第i个Office文件每个分片在磁盘内的起始和结束地址,指向第i个新建立待修复Office文件的指针。
因分片而受损的Office数据块修复实例
以图1所示Office文件的分片1和分片2为例,分析Office数据块的修复过程。图5-a是根据特征值0x504B0304,在分片1中定位到的最后一个数据块首部。这个数据块的起始地址SP1'为0x0E0E7BC7,数据块首部存储的压缩后块数据大小为0x00035222,通过该值,可以计算出数据块大小FLEN = 数据块首部长度0x1E + 对象名长度0x16 + 压缩后块数据长度0x00035222,即FLEN = 0x00035256。数据恢复工具从SP1'地址开始,向下提取0x00035256个字节数据,写入到新建立文件中。由于数据块内容被一分为二,并未连续存放,因此,这种恢复方式将使部分不属于Office文件的数据内容被恢复到新建文件中,从而导致识别错误。
图5-b显示从SP1'向下到达的第一个簇块边界地址down(SP1') = 0x0E0E8000,可以计算出down(SP1') - SP1' = 0x439。图5-f是根据特征值0x504B0304,在分片2中定位到的第一个数据块首部。这个数据块的起始地址SP1 = 0x6EB52E1D,从SP1向上到达的第一个簇块边界地址up(SP1) = 0x6EB52000,可以计算出SP1 - up(SP1) = 0xE1D。从而计算出FLEN - (down(SP1') - SP1') - (SP1 - up(SP1)) = 0x34000 = 0x34 × 0x1000,这一计算结果恰好等于0x34个簇块大小,符合配对条件,下面开始进行配对验证。
首先将第一个分段大小设置为可能达到的最大值,即从SP1'开始,向下连续提取down(SP1') - SP1' + 0x34 × 0x1000个字节数据作为第一个分段内容。将第二个分段设置为可能达到的最小值,即从SP1开始,向上连续提取SP1 - up(SP1)个字节数据作为第二个分段内容。将两个分段数据组合成一个数据块,计算数据块的CRC32校验值,该值与图5-a所示块首部存储的CRC32值不同,配对失败。将第一个分段缩小一个簇块,即从SP1'开始,向下连续提取down(SP1') - SP1' + 0x33 × 0x1000个字节数据作为第一个分段内容。将第二个分段扩充一个簇块,即从SP1开始,向上连续提取SP1 - up(SP1) + 0x01 × 0x1000个字节数据作为第二个分段内容,将两个分段数据组合成一个数据块。新组建数据块仍未通过CRC32验证,继续缩小第一个分段,同时扩大第二个分段,进行验证。这一验证过程一直持续下去,直至从SP1'开始,向下连续提取down(SP1') - SP1' + 0x04 × 0x1000个字节数据作为第一个分段内容,从SP1开始,向上连续提取SP1 - up(SP1) + 0x30 × 0x1000个字节数据作为第二个分段内容时,CRC32验证成功。从而,计算出第一个分段的结束地址为down(SP1') + 0x04 × 0x1000,即0x0E0EC000,这一计算结果与图5-c所示分片1的实际结束地址相同。计算出第二个分段的起始地址为up(SP1) - 0x30 × 0x1000,即0x6EB22000,这一结果与图5-d所示分片2的实际起始地址相同。用正确重组的数据块替换待修复Office文件中受损的数据块,完成数据块修复。
在所述步骤2与步骤3之间可设置以下步骤:
重组第i个Office文件目录区。
Office文件中存储了大量对案件办理工作有价值的数据信息,恢复被删除的Office文档对公安机关的调查取证工作有重要意义。2007版以上Office文件采用Ooxml格式标准,Ooxml是Office Open Xml的简称,是由微软开发的一种以XML为基础并以ZIP格式压缩的电子文件规范,是微软新一***公软件文档格式标准。本发明重组第i个Office文件目录区的方法适用于2007以上版本Office文件。图6-a显示一个Office文件由三部分构成,即数据块区、目录区和目录结束记录。数据块区包括若干个数据块,每个数据块由块首部和具体的块数据组成。Office文件中存储的文字、图像、表格等数据信息就存储在数据块内。目录区由若干个目录项构成,每个目录项指向一个特定的数据块,目录项个数与数据块总数相同。目录项记录了对应数据块对象名、压缩前后块数据大小和块数据CRC32校验值,上述信息也同步存储在相应数据块首部,同时目录项还记录了数据块在Office文件中的偏移位置。目录结束记录存储了目录项总个数、目录区大小和目录区在Office文件中的偏移位置,根据上述信息可以计算出Office文件的总大小。
在Office文件编辑过程中,文件数据在磁盘内极易出现分片存储情况。图6-b显示Office文件被分为三个分片存储在三块存储区域内,同时文件数据不是按照逻辑次序依次存放,而是按照分片1、分片3、分片2的次序存储。这种分片存储的Office文件被删除后,在文件MFT记录被覆盖情况下,现有数据恢复工具(如Encase、X-Way)无法有效恢复被删数据。一种Office文件恢复方法是在磁盘空闲空间内定位包含目录结束记录的Office数据分片,再利用分片中存储的目录项在磁盘空间内搜索相应的数据块,然后按照目录项中记录的偏移地址将若干个数据块重组为完整的Office文件。采用的数据块搜索方法是从目录项中提取出数据块对象名、压缩前后块数据大小和块数据CRC32校验值,寻找与上述信息相匹配的数据块。图6-b说明了这种基于目录项的Office文件重组方法。
基于目录项的Office文件重组方法成功执行的前提条件是目录区未发生分片,但在实际情况中,尤其是在excel文件编辑过程中,文件容易出现两分片存储状态,且第二个分片大小为1簇,此时目录区域极易被分割为两段。如图7所示,某个Office文件被分为四个分片存储在磁盘内,此时目录区域被分为两段,分别存储在分片3和分片4内。如果根据目录结束记录所在分片4中的目录项进行数据恢复,会导致只有分片4目录项所指向的Office数据块可以恢复,而分片3目录项对应的数据块无法恢复,从而造成文件恢复失败。针对目录区分片问题,提出一种Office文件目录区分片重组方法,在进行数据恢复之前,先判断目录区域是否发生分片,将分为两段的目录区重组为完整目录后,再进行数据恢复。
图8通过一个示例对这种目录区分片重组方法进行了分析。首先根据标志位0x504B 05 06查找包含目录结束记录的Office数据分片,从目录结束记录中提取出总的目录项个数n,同时识别出当前分片实际包含的目录项个数m,由于n > m,判断出Office文件目录区域发生分片。
在全部Office数据分片中共有三个符合条件的候选分片,即这三个分片不包含目录结束记录,同时每个候选分片均包含n - m个目录项。其中,前n - m - 1个目录项是未受损的完整目录项,而第n - m个目录项通常发生分割,即第n - m个目录项被一分为二,分别保存在两个分片内,前一部分保存在第一个分片的末尾,后一部分保存在第二个分片的起始位置。
由于一个目录项的长度等于目录项基本首部长度与对象名称长度之和,基本首部长度为0x2E,对象名称长度共占用两个字节,长度值通常不超过512字节,即目录项的总长度不会超过一个簇块的大小。因此,如果目录项发生中断,那么从第一个分片中最后一个目录项起始位置开始,向下到簇块边界为止是目录项的第一部分内容;从第二个分片中第一个目录项起始位置开始,向上到簇块边界位置为止是目录项的第二部分;将这两部分内容提取、组合在一起,可以拼接成一个完整的目录项。
为了防止将两个不同的目录项错误地拼接在一起,还要对拼接好的记录进一步进行验证,排除错误拼接。验证方法如下:如果拼接正确,那么目录中存储的总长度值(即从拼接记录起始位置向后偏移0x20字节,从高位至低位连续提取4个字节数据)应该与两部分内容长度之和相同,即目录项的理论结束位置与实际结束位置应该相同,否则认定拼接错误,重新寻找匹配的分片进行组合。按照这一方法,可以判断出第一个和第三个候选分片与目录分片重组之后,得到的目录理论结束位置与实际结束位置不重合,因此排除这两个分片。相反,第二个候选分片符合上述判定条件,因此,将第二个候选分片与目录分片成功重组在一起。
重组第i个Office文件目录区的方法包括以下步骤:
步骤1:根据当前处理分片中的目录结束记录确定第i个Office文件共包含n个目录项,同时确定当前处理分片中实际包含m个目录项,如果n = m,说明目录区未发生分片,结束。如果n > m,说明目录发生分片,执行步骤2。
步骤2:搜索全部Office分片中,不包含目录结束记录,且目录项数量与n - m相同的分片。如果找到匹配分片,执行步骤3。否则,结束。
步骤3:计算步骤2命中分片最后一个目录项向下到磁盘簇块边界的距离p,计算当前处理分片中第一个目录项向上到磁盘簇块边界的距离q,判断p + q与目录项的总长度r是否相同。如果相同,则将两个分片内容首尾相接,重组第i个Office文件的完整目录,结束,否则,执行步骤2,寻找下一个候选分片。
本发明目录区分片重组方法当Office文件目录区域发生分片时,在已知目录结束记录所在数据分片的前提下,寻找另一块包含剩余目录项的数据分片,利用两块数据分片重新组合完整的目录区域。输入参数包括全部Office数据分片位置信息和第i个Office文件目录结束记录所在数据分片位置信息,这个分片作为当前处理分片。
重组第i个Office文件目录区的测试实例
如图9所示,某个excel文件在磁盘内处于两分片存储状态,第一个分片的起始簇号是0x0BEE87,占用0x7F个簇块,第二个分片起始簇号是0x26,占1个簇块。此时目录区域被分为两段,分别存储在两个分片内。下面以这个Excel文件为例,分析目录区分片的重组方法。
第一步:在全部分片中,根据标志位0x50 4B 05 06搜索Office文件尾部目录结束记录,定位结果如图10-c所示,通过目录结束记录可知这个Office文件共有50个目录项,目录区大小为0x0DE5字节,目录首部的偏移地址是0x07E7D5。利用上述数值可以计算出这个Office文件大小 = 0x07E7D5(目录区首部偏移)+ 0x0DE5(目录区大小)+ 0x14(目录结束记录大小),即0x07F5CE字节。当前数据分片实际包含了21个目录项,这说明目录区域发生了分割,另外29个目录项不包含在当前分片中。即全部50个目录项中的第30至第50个目录项保存在当前分片内,第1至第29个目录项保存在另一个分片内。同时,可以确定第29个目录项被分割为两段,后一段保存在当前分片首部,前一段保存在另一个分片尾部。
从目录结束记录向前搜索,定位到当前分片内第1个目录项,即总目录中的第30个目录项,起始地址为0x26028。从地址0x26028向前至当前簇块边界地址0x26000,共有0x28个字节数据,这部分数据属于完整目录中的第29个目录项。这个目录项被一分为二,分别存储在两个分片内,这0x28字节属于目录项的第二部分内容。接下来,需要寻找被分割目录项第一部分内容所在分片。
第二步,搜索全部Office分片中,不包含目录结束记录,且包含29个目录项的Office数据分片。
第三步,图3-a为命中分片的尾部存储区域,这个分片共包含29个目录项,其中第29个目录项的起始地址为0xBEF05FE7。从第29个目录项起始地址至当前簇块边界地址0xBEF05FFF共有0x19字节数据,将这部分数据与图10-b所示0x28字节残留数据内容进行拼接,形成图11所示结果,这条拼接记录总长度为0x41字节。
接下来,验证拼接记录是否为一条完整的目录项。验证方法如下,如果当前记录是一条完整记录,那么目录项首部长度与对象名长度之和应该等于拼接记录总长度,即目录项的理论长度值与实际长度值应该相同。如两个数值相同,说明两块残留数据可以拼接成一条完整记录,如果两者不相同,说明拼接失败。在当前例子中,从拼接记录起始位置向后偏移0x20字节,从高位至低位连续提取4个字节数据,组成数值为0x13,该值假定为文件名长度值。目录项首部长度值固定为0x2E,首部长度值与对象名长度值之和为0x41,恰好等于拼接记录总长度,从而将两个分片连接在一起,形成完整的目录结构。
可以理解的是,以上关于本发明的具体描述,仅用于说明本发明而并非受限于本发明实施例所描述的技术方案,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或等同替换,以达到相同的技术效果;只要满足使用需要,都在本发明的保护范围之内。
Claims (1)
1.一种Office文件数据分片修复方法,其特征在于包括以下步骤:
步骤1):第i个Office文件共有u个分片,设置整数变量p初值为0;
步骤2):如果p < u - 1,则执行步骤3),否则,结束;
步骤3):令FLEN = 第p个分片内最后一个数据块长度值,SP1’ = 第p个分片内最后一个数据块的起始地址,down( SP1’ ) =第p个分片内最后一个数据块的起始地址向下到达的首个簇块边界地址,SP1 = 第p + 1个分片内第一个数据块的起始地址,up( SP1 ) = 第p + 1个分片内第一个数据块的起始地址向上到达的首个簇块边界地址,CS = 磁盘簇块大小;如果( FLEN - down( SP1’ ) + SP1’ - SP1 + up( SP1 ) ) MOD CS = 0条件为真,则执行步骤4),否则执行步骤9);
步骤4):令整数变量n = ( FLEN - down( SP1’ ) + SP1’ - SP1 + up( SP1 ) ) /CS,设置整数变量j = n,
步骤5):如果j >= 0,则执行步骤6),否则执行步骤9);
步骤6):令Frag1_pos = SP1’,Frag1_size = down( SP1’ ) – SP1’ + j × CS,Frag2_pos = up( SP1 ) – ( n – j ) × CS,Frag2_size = ( n – j ) × CS + SP1 -up( SP1 ) ,从地址Frag1_pos开始,提取Frag1_size字节数据作为第一部分内容,从地址Frag2_pos开始,提取Frag2_size字节数据作为第二部分内容,将两部分内容组合成一个数据块;计算组成数据块的CRC32校验值,如该值与数据块首部存储的CRC32值相同,说明配对成功,执行步骤7),否则,配对失败,执行步骤8),将前一部分内容收缩1个簇块,后一部分内容扩展1个簇块,重新配对;
步骤7):根据特征值定位受损数据块在第i个新建立待修复Office文件中的逻辑偏移地址为OA,将步骤6)重组成功的数据块从磁盘内读出,从逻辑偏移地址OA开始,将读出数据依次写入第i个新建立待修复Office文件,之后,执行步骤9);
步骤8):令j = j - 1,执行步骤5);
步骤9):令p = p + 1,执行步骤2,开始修复下一个受损数据块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910418929.9A CN110175087B (zh) | 2019-05-20 | 2019-05-20 | 一种Office文件数据分片修复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910418929.9A CN110175087B (zh) | 2019-05-20 | 2019-05-20 | 一种Office文件数据分片修复方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110175087A true CN110175087A (zh) | 2019-08-27 |
CN110175087B CN110175087B (zh) | 2023-04-11 |
Family
ID=67691739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910418929.9A Active CN110175087B (zh) | 2019-05-20 | 2019-05-20 | 一种Office文件数据分片修复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110175087B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117950597A (zh) * | 2024-03-22 | 2024-04-30 | 浙江大华技术股份有限公司 | 数据修改写方法、数据修改写装置以及计算机存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009140842A1 (zh) * | 2008-05-21 | 2009-11-26 | 中兴通讯股份有限公司 | 一种文件下载的交互式纠错方法和*** |
CN102053880A (zh) * | 2011-01-07 | 2011-05-11 | 杭州电子科技大学 | 一种基于内容的Rar文件雕复方法 |
CN105159603A (zh) * | 2015-08-18 | 2015-12-16 | 福建省海峡信息技术有限公司 | 一种分布式数据存储***的修复方法 |
CN108536845A (zh) * | 2018-04-16 | 2018-09-14 | 中国刑事警察学院 | 残缺数据库文件检验方法 |
CN108874953A (zh) * | 2018-06-06 | 2018-11-23 | 中国刑事警察学院 | 一种Office文件内容增、删、改痕迹提取方法 |
-
2019
- 2019-05-20 CN CN201910418929.9A patent/CN110175087B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009140842A1 (zh) * | 2008-05-21 | 2009-11-26 | 中兴通讯股份有限公司 | 一种文件下载的交互式纠错方法和*** |
CN102053880A (zh) * | 2011-01-07 | 2011-05-11 | 杭州电子科技大学 | 一种基于内容的Rar文件雕复方法 |
CN105159603A (zh) * | 2015-08-18 | 2015-12-16 | 福建省海峡信息技术有限公司 | 一种分布式数据存储***的修复方法 |
CN108536845A (zh) * | 2018-04-16 | 2018-09-14 | 中国刑事警察学院 | 残缺数据库文件检验方法 |
CN108874953A (zh) * | 2018-06-06 | 2018-11-23 | 中国刑事警察学院 | 一种Office文件内容增、删、改痕迹提取方法 |
Non-Patent Citations (2)
Title |
---|
徐明等: "头部缺失的JPEG文件碎片恢复", 《中国图象图形学报》 * |
杨德明: "FAT32下有效数据快速恢复方法", 《计算机应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117950597A (zh) * | 2024-03-22 | 2024-04-30 | 浙江大华技术股份有限公司 | 数据修改写方法、数据修改写装置以及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110175087B (zh) | 2023-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147351A (zh) | 一种Office文件数据分片识别、排序、重组方法 | |
CN104331446B (zh) | 一种基于内存映射的海量数据预处理方法 | |
CN103473171B (zh) | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 | |
CN103810200B (zh) | 开放式蛋白质鉴定的数据库搜索方法及其*** | |
CN108932343A (zh) | 人脸图像数据库的数据集清洗方法与*** | |
CN102867134B (zh) | 一种对基因序列片段进行拼接的***和方法 | |
CN113239365B (zh) | 一种基于知识图谱的漏洞修复方法 | |
CN105446705A (zh) | 用于确定配置文件的特性的方法和装置 | |
CN109492081A (zh) | 文本信息搜索和信息交互方法、装置、设备及存储介质 | |
CN108319518A (zh) | 基于循环神经网络的文件碎片分类方法及装置 | |
CN107463711A (zh) | 一种数据的标签匹配方法及装置 | |
CN110175087A (zh) | 一种Office文件数据分片修复方法 | |
CN110825642B (zh) | 一种基于深度学习的软件代码行级缺陷检测方法 | |
CN111008625A (zh) | 一种地址校正方法、装置、设备及存储介质 | |
Tsai | Towards linking the Lakh and IMSLP datasets | |
CN107590233B (zh) | 一种文件管理方法及装置 | |
CN112667672B (zh) | 日志解析方法及解析装置 | |
CN110174999A (zh) | 一种Office文件目录区分片重组方法 | |
CN111524051A (zh) | 文物保护基于5g的遍历数据库契合考古修复***和方法 | |
CN106649214A (zh) | 互联网信息内容相似定义方法 | |
CN108021472B (zh) | ReFS文件***的格式化恢复方法及存储介质 | |
CN115906851A (zh) | 一种实体识别方法、装置、电子设备及存储介质 | |
CN111243679B (zh) | 微生物群落物种多样性数据的存储检索方法 | |
CN114595262A (zh) | 一种市政道路epc项目招标清单的快速生成方法及*** | |
CN107169065A (zh) | 一种特定内容的去除方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |