残缺Excel文件数据信息恢复方法研究
徐国天
中国刑事警察学院 辽宁网络安全执法协同创新中心 沈阳 110854

作者简介: 徐国天,副教授,硕士,研究方向为电子物证和网络安全。 E-mail: 459536384@qq.com

摘要

目的针对残缺Excel文件研究有效的残留文本数据的定位、提取、恢复方法。方法 针对NTFS文件系统上破损较轻的Office2003版本Excel文件设计了一种WorkBook流整体替换恢复方法:准备一个较大的Excel文件,将它的WorkBook流数据重置为0x00,使用Winhex从残缺Excel文件中完整提取出WorkBook流数据,并将其复制到目标Excel文件的WorkBook流位置。双击打开目标文件即可看到残缺Excel文件中的文本信息。针对破损严重的Excel文件设计了一种基于关键数据结构重组的文本恢复方法:准备一个较大的Excel文件,将它的WorkBook流数据重置为0x00,使用Winhex从破损文件中依次提取出WorkBook header、BoundSheet、语言和地区设置、SST共享字符串、Extended SST和每个Sheet的数据内容,并逐个复制到目标文件的WorkBook流位置,补充缺失的数据结构,调整BoundSheet和Extended SST的绝对地址引用,最后打开目标文件即可看到残缺Excel文件中的文本信息。结果 使用WorkBook流整体替换恢复方法得到的目标文件可以正常使用,可以恢复文本、格式设置、公式。基于关键数据结构重组的恢复方法得到的目标文件在打开时会提示出错信息,连续单击确定按钮之后,文本信息可以正常显示,但格式设置丢失。结论 应用本文提出的残缺Excel文件数据信息恢复方法可以有效提取残缺Excel文件中的文本数据。

关键词: 电子物证; 残缺Excel文件; 文本数据; WorkBook; 恢复
中图分类号:DF793.2 文献标志码:A 文章编号:1008-3650(2015)06-0440-05 doi: 10.16467/j.1008-3650.2015.06.003
Data Recovery from Incomplete Excel Files
XU Guotian
Liaoning Cyber Security and Investigation Innovation Center, National Police University of China, Shenyang 110854, China
Abstract

Objective In computer-related case investigations, Excel files from suspect’s computers are often damaged and unable to be analyzed. These incomplete Excel files usually store a lot of valuable text data, which are significant for the investigation. In this paper, we attempt to develop assays to recover these residues of text data. Methods A WorkBook stream exchange method towards slightly damaged Excel file is proposed. First, the target Excel file, a large one, is prepared, and its WorkBook stream data is set to 0x00. The WorkBook stream data of incomplete Excel file is then input to WorkBook stream of the target Excel file after being extracted with Winhex. The text information of incomplete Excel can be found when double-clicking the target Excel file. Another recovery method based on the reconstruction of the key data structure is also designed for severely damaged Excel files. A large target Excel file is firstly prepared with its WorkBook stream data set at 0x00. The WorkBook header, BoundSheet, Language and region, SST shared string, Extended SST and Sheet1 data of incomplete Excel file are extracted successively with Winhex, and then copied to WorkBook stream of the target file. When missing data structure is supplemented, absolute address references for BoundSheet and Extended SST are adjusted, text information of incomplete Excel will be found in the target Excel file. Results The target file dealt with the WorkBook stream exchange method can recover its texts, formatting and formulas. When open those managed with the key data structure reconstruction, an error message will pop out. But its text information can be displayed after continuously clicking OK button, though the formatting is unrecoverable. Conclusions The proposed methods in this paper can effectively extract the text data in the incomplete Excel file.

Keyword: digital forensics; incomplete Excel file; text data; WorkBook; restoration

Excel被广泛应用于财务统计、人员管理等诸多领域各类电子表格的制作。Excel文件中保存了大量有价值的文字、图像和表格数据。在计算机涉案调查取证中, 发现犯罪分子为了逃避法律的制裁, 常常将某些重要的涉案Excel文件删除。对于这些被删除的Excel文件, 虽然使用数据恢复软件(如FinalData)可从中恢复出大量Excel文件, 但是其中很多文件无法正常使用, 双击打开时, 系统提示这些文件已经损坏。进一步使用Winhex分析这些残缺文件, 发现在这些文件中通常残留了大量文字、图像和表格数据。由于目前现有电子数据取证软件不能有效提取残缺Excel文件中残留的数据信息, 进而导致大量重要线索的遗失, 甚至影响到案件的办理。本文对残缺Excel文件残留文本数据的提取方法进行研究, 希望能对公安机关的电子数据检验工作有所帮助。

1 残缺Excel文件形成原因
1.1 Excel文件在硬盘分区内常处于离散存储状态

当用户在硬盘内创建一个新的Excel文件或者向目标分区复制一个Excel文件时, 文件系统会将这个新产生的文件存放在一段连续的存储空间内。用户对Excel文件的每次编辑操作都会产生一个临时文件, 临时文件有自己的MFT记录和存储空间, 在编辑结束时临时文件的MFT记录更改为原始Excel文件的名称。通过大量实验分析, 发现Excel文件在编辑过程中其存储位置会不断变化, 且呈现不连续存放的特征。为了测试Excel文件离散存储特征, 将一个3.8 GBU盘格式化为NTFS文件系统, 在磁盘根目录下存放一个“ 11.xls” , 大小为105, 984 字节, 占用空间106, 496 字节。使用Winhex查看“ 11.xls” 文件的MFT记录如图1a所示。可见初始状态“ 11.xls” 从0x05E181簇开始存放, 占26个簇块。向“ 11.xls” 文件复制大量数据, 复制之后大小变为6, 299, 648 字节。编辑之后“ 11.xls” 文件的MFT记录如图1b所示。可见整个Excel文件被存储在两个不连续的数据分片中, 第1个分片占8个簇块, 第2个分片占1530个簇块。由此可见, 伴随着编辑操作, Excel文件的存储空间会发生迁移, 并呈现出离散存储的特征。

图 1 Excel文件离散存储特征测试Fig.1 Discrete memory testing of Excel file

1.2 MFT记录恢复方式导致残缺Excel文件

目前个人用户使用的计算机普遍采用NTFS格式的硬盘[1], 日常使用的U盘、移动硬盘也大多采用NTFS格式。NTFS文件系统的MFT元文件为硬盘分区内的每个文件分配了一条1024字节大小的MFT记录。在这条记录中保存了文件的名称、大小、建立、修改和访问时间, 最重要的是保存了文件数据在硬盘内的存储位置, 根据这些信息可以准确定位到磁盘上的文件数据。当一个文件被删除之后, 其MFT记录并没有消失, 只是其状态变化为“ 空闲” 状态, 代表这条记录可以被其它文件重新使用[2]。在这条MFT记录被覆盖之前, 可以利用它来恢复被删除的文件。知名数据恢复软件FinalData的快速扫描恢复功能正是基于这种方法。图2展示的是MFT记录恢复方式导致残缺Excel文件的整个过程。硬盘空间中带阴影的存储区域代表正在被其它文件使用的空间, 白色区域代表空闲、可以重新使用的存储空间。原始Excel文件被划分为3个数据块离散存储在硬盘空间内。当用户删除这个Excel文件之后, 这三块存储空间内的数据并没有消失, 只是其存储状态由“ 已占用” 变化为“ 空闲” 状态。随着计算机的使用, 第2块存储空间被其它文件重新使用, 即这块空间内原始Excel文件的数据被其它文件的数据覆盖, 导致这部分数据的丢失。但是由于被删除Excel文件残留MFT记录并没有消失, 因此FinalData软件利用这条记录准确定位到原始Excel文件离散存储的3个数据块, 并将它们提取、组合成一个Excel文件[3]。通过图2可以看到, 恢复出的Excel文件中夹杂了一块其它文件的数据, 因而这是一个残缺的文件, 如果关键数据遭到破坏, 将无法正常打开使用。

图 2 基于MFT记录的恢复方式导致的残缺Excel文件Fig.2 Incomplete Excel file based on MFT record

1.3 特征值恢复方式导致残缺Excel文件

由于大多数文件的头部或者尾部均有唯一的特征值[4], 例如Excel文件的头部特征值为0xD0CF11E0, PNG图片的头部特征值为0x89504E47。数据恢复软件扫描磁盘空闲空间, 根据文件头、尾特征值定位到某个被删除文件残留在硬盘分区内的头部和尾部数据块, 进而将头、尾数据块之间的所有数据提取、合并成一个原始文件。FinaData软件的完整扫描功能就是利用了这种恢复方法。但是这种方法比较适合连续存储的小容量文件, 而对离散存储的大容量文件效果不好, 极易导致残缺文件的发生。图3显示的是基于文件头、尾特征值的恢复方式导致的残缺Excel文件的整个过程。原始Excel文件被删除之后, 其残留的数据被离散存储在三个数据块内。数据恢复软件在第一块数据的头部识别出一个Excel文件的头部特征, 在第三块数据的尾部识别出一个Excel文件的尾部特征, 进而将头尾特征值之间的数据提取、合并成一个Excel文件。从图3可以看出, 虽然原始Excel文件的三块数据都被提取出来, 但是其中夹杂了两块其它文件的数据块, 因而这个新文件也是一个残缺文件, 无法正常使用。

图 3 基于文件签名的恢复方式导致的残缺Excel文件Fig.3 Incomplete Excel file based on file signature

2 从破损较轻Excel文件提取文本数据
2.1 WorkBook流内部绝对偏移地址

Excel文件由一系列512字节大小的数据块组成, 每个数据块称为1个block。若干个block又组成了Excel文件的5种内部数据流。表1显示了一个Excel文件的组成结构, 可见只有WorkBook数据流长度可变, 其它数据流的长度固定。

表 1 Excel文件的存储结构 Table 1 Storage structure of Excel file

WorkBook数据流通常从Excel文件的第2个block(即偏移地址0x0200处)开始存放, 其中存储了Excel文件的所有文本信息, 是数据恢复的重点研究对象。WorkBook数据流内部由一系列相互关联的数据结构依次连接组成。每个数据结构的构造为:“ 标识(2字节)+ 长度(2字节)+ 数据内容(变长)” , 如某条数据结构显示为0x0908 0200 0602, 那么0x0908代表这条记录的标识, 0x0200代表后面数据内容的长度为2字节, 而0x0602为实际的数据内容。数据结构之间使用绝对偏移地址进行相互引用。图4显示的是WorkBook流内部数据结构绝对地址引用举例。图4a是Sheet指针区数据结构, 标识为0x0085, N个Sheet就有N个0x0085, 这个数据结构包含每个Sheet的名称和Sheet数据内容在xls文件中的偏移位置。由图4a可知共3个Sheet, 名称分别为Sheet1、Sheet2、Sheet3。以Sheet1为例, 其数据相对于WorkBook流的起始位置偏移为0x0763, 因此其在Excel文件的绝对位置为0x0200 + 0x0763 = 0x0963。使用Winhex跳转到该位置查看到结果如图4b所示, 发现跳转到Sheet1的数据区域。用同样方法可以确定Sheet2的绝对位置为0x0200 + 0x098E = 0x0B8E, Sheet3的绝对位置为0x0200 + 0AA2 = 0x0CA2。这两个位置的查看结果如图4c和图4d所示。

图 4 WorkBook流内部数据结构绝对地址引用举例Fig.4 Absolute address reference example of internal data structure of WorkBook stream

2.2 WorkBook流整体替换恢复方法

使用FinalData的MFT记录快速扫描功能可以定位被删除Excel文件的数据簇块, 但是其中某些簇块可能被覆盖, 例如Excel文件的第1个簇块(4096字节)中包含了文件的header和WorkBook流的前7个block, 如该数据块被破坏将导致文件无法打开。但是用这种方法恢复的Excel文件, 其WorkBook流内部残留数据结构的偏移地址不需要进行调整。经过大量实验发现, WorkBook流内部由很多个数据结构依次连接组成, 除第一个数据结构之外, 中间某个或某些数据结构被破坏不会对显示数据造成影响, 只会弹出一些出错对话框。

针对使用FinalData的快速扫描功能恢复出的残缺Excel文件, 设计了WorkBook流整体替换恢复方法:因为Excel文件中只有WorkBook流是长度可变的, 这里的思路是准备一个较大的Excel文件(称为目标文件), 原则是要能够存储下提取出的WorkBook流数据。将它的WorkBook流内容重置为0x00, 而后从残缺Excel文件中提取出WorkBook流数据, 并将其存放到目标文件的WorkBook流位置。这样可以保证WorkBook流内部数据结构偏移地址值仍然正确, 不需要进行调整。如果个别关键数据结构丢失(如ROW表, Sheet的header等), 需要手工补齐, 并设置好偏移地址。注意这种方法不能应用于“ 根据文件头、尾特征值恢复出的残缺Excel文件” , 因为这类文件不能保证各个数据结构的偏移地址仍然正确。

2.3 WorkBook流整体替换恢复方法应用

首先说明WorkBook流存储区域的确定方法。Excel文件中所有数据流的存储位置都保存在SAT表中。使用Winhex打开目标Excel文件, 搜索关键词0xFEFFFFFF可以定位到SAT表, SAT表的特征是临近4字节整数递增排列。图5是利用关键字搜索定位到的数据块, 可以看到每四个字节为一个数值, 所有数值呈现递增的特征, 并且以0xFEFFFFFF作为结束。因此断定这是SAT表。从该表中提取出4条数据流的存储链表。第1条流:[0, 1, 2, 3, 4, 5, 6, 7, -2]; 第2条流:[8, 9, 10, 11, 12, 13, 14, 15, -2]; 第3条流:[16, 17, 18, 19, 20, 21, 22, 23, -2]; 第4条流:[25, -2]。因为WorkBook流默认从编号为0的block开始存放, 因此推断出第1条数据流为WorkBook流, 其在Excel文件中的偏移地址范围是0x0200~0x1000。实验过程描述如下:残缺Excel文件名为10.xls, 大小为13, 824字节。准备一个目标文件40.xls, 内容填充大量空格列, 目的是使其WorkBook流空间大小远大于10.xls。将40.xls的WorkBook流数据重置为0x00(防止产生混合影响), 然后将10.xls的WorkBook流数据复制到40.xls文件的0x0200位置, 即WorkBook流开始的地方。打开40.xls, 可以查看到10.xls的数据内容, 并且公式信息也一并恢复。

图 5 搜索定位的SAT表Fig.5 The SAT table searched and positioned

3 从破损严重Excel文件提取文本数据

利用文件头、尾特征值恢复方法得到的Excel文件经常会出现比较严重的破损, 如果这些文件的WorkBook流中某些关键数据结构遭到破坏, 将无法应用2.2节的方法提取文本数据。经过大量测试, 发现WorkBook流中以下数据结构对恢复至关重要:“ 0x0809 Workbook Header” 、“ 0x0085 BOUNDSHEET” 、“ 0x00FC SST内容” 、“ 0x00FF Extended SST内容” 和“ 0x0809 Sheet内容” 。以上5种数据结构是保证文本信息能够显示的最小集合。在其它数据结构遭到破坏, 而这五种数据结构完整的情况下, 打开文件时虽然会提示出错信息, 但连续单击确定按钮之后, 文本信息仍然可以正常显示。

3.1 基于关键数据结构重组的文本恢复方法

针对破损严重的Excel文件, 本文提出一种“ 基
于关键数据结构重组的文本恢复方法” 。首先准备一个较大的Excel文件(称为目标文件), 将它的WorkBook流数据重置为0x00, 而后使用Winhex从破损文件中依次提取出WorkBook header、BoundSheet、语言和地区设置、SST共享字符串、Extended SST和Sheet1的数据内容, 并逐个复制到目标文件的WorkBook流位置, 补充缺失的数据结构(注SST共享字符串和Sheet1的数据内容保存了Excel文件的所有文本信息, 因此不能缺失), 调整BoundSheet和Extended SST的绝对地址引用。由于提取出的BoundSheet和Extended SST数据结构中的绝对地址是相对于原始Excel文件的, 移植到目标文件之后各类数据结构之间的相对位置发生了变化, 因此这两种数据结构中的绝对地址也必须要进行相应的调整。

3.2 关键数据结构重组的文本恢复方法应用

实验过程如下:残缺Excel文件名为60.xls, 大小为14, 336字节。准备一个目标文件40.xls, 内容填充大量空格列, 目的是使其WorkBook流空间大小远大于60.xls。将40.xls的WorkBook流数据重置为0x00(防止产生混合影响), 然后使用Winhex从60.xls中依次提取出WorkBook header、BoundSheet、语言和地区设置、SST共享字符串、Extended SST和Sheet1的数据内容, 并逐个复制到40.xls的WorkBook流位置, 如图6所示。图6b显示的是BoundSheet数据结构, 其中保存了指向Sheet1~Sheet3数据内容的指针, 由于本例仅测试恢复Sheet1的数据内容, 因此指向Sheet2和Sheet3的指针不进行调整。指向Sheet1的指针原值为0x0000094A, 复制到目标文件之后, Sheet1的起始位置是0x00000440, 如图6f所示, 因此这个指针应调整为0x00000240。Excel文件中所有文本数据都保存在SST共享字符串表中, 从残缺Excel文件中提取出的SST共享字符串表如图6d所示。图6e显示的是Extended SST表, 每8个字符串被划归为1个区块, 每个区块都有一个指针指向这个区块的第一个字符串, 由于Extended SST表和SST共享字符串表的相对位置发生了变化, 因此每个区块中的指针都需要进行调整。本例的调整结果如图6e所示。

图 6 关键数据结构的提取和绝对地址调整Fig.6 Extraction and absolute address adjustment of key data structure

图7显示的是恢复出的文本信息和原始文本信息的比较结果。可以比较清晰地看到, 在恢复出的文本信息中原始文件设置的边框效果, 字体、字号、居中对齐方式等格式上的设置信息已经丢失, 但是最关键的文本信息得到了完好的保留。

图 7 恢复出的文本信息和原始文本信息的比较Fig.7 The comparison between the restored information and the original message

本篇论文针对破损的Excel文件设计了两种文本数据手工恢复方法, 应用这些方法可以提取残缺Excel文件中残留的文本数据。但是当残缺文件数量庞大时, 手工恢复方法就会存在效率低下的问题, 在今后的工作中, 作者计划研究残缺Excel文件程序化自动分析方法。

The authors have declared that no competing interests exist.

参考文献
[1] 徐国天. NTFS系统下“小文件”取证软件的设计与实现. 信息网络安全, 2011, 52(3): 36-42. [本文引用:1]
[2] 徐国天. NTFS格式存储设备数据恢复方法研究, 刑事技术, 2015, 40(1): 55-58. [本文引用:1]
[3] 徐国天. Office文件编辑过程痕迹提取研究, 警察技术, 2015(5): 38-41. [本文引用:1]
[4] 戴士剑, 涂彦晖. 数据恢复技术(第2版). 北京: 电子工业出版社, 2005. [本文引用:1]