残缺Word文件数据信息提取方法研究
2015-12-08徐国天
徐国天
(中国刑警学院 辽宁 沈阳 110035)
残缺Word文件数据信息提取方法研究
徐国天
(中国刑警学院辽宁沈阳110035)
从涉案计算机恢复出的大量残缺Word文件中,通常残留大量对案件办理有价值的文字、图像和表格数据,定位、提取出这些残留数据对公安机关的调查、取证工作有着重要的意义。基于此,研究了一种从残缺Word文件中手工提取残留文字、表格和图像数据的方法。通过实践证明,应用这种方法可以准确提取出残缺Word文件中残留的数据信息。
残缺Word数据提取恢复
Word是Office办公软件的一个重要组成部分,利用它可以完成文稿编辑、资料撰写等多种任务,可以说这款软件给人们的日常工作、生活带来了极大便利。Word文件中可以保存大量有价值的文字、图像和表格数据,犯罪分子为了逃避法律的制裁,会将某些重要的涉案Word文件删除。恢复这些被删除的Word文件,从中提取出有价值的数据信息对公安机关的调查、取证工作有重要的意义。
在实际办案中,我们经常遇到这样一种情况:电子数据检验人员使用数据恢复软件(如FinalData)从涉案计算机中恢复出大量Word文件,但是其中很多文件无法正常使用,双击打开时,系统提示这些文件已经损坏。通过分析,我们发现造成这种现象的原因是当文件被删除之后,存储在硬盘空间内的数据并没有真正消失,只是对应存储空间的状态变为空闲状态,表示这块存储空间可以被其他文件重新使用。如果此时进行数据恢复,那么得到的Word文件是可以正常使用的。但是随着涉案计算机的应用,被删除文件的部分存储空间很可能被其他文件覆盖,同时某些恢复数据所必须的关键信息(如MFT记录)也可能遭到破坏,这些因素将导致恢复出的文件内容残缺,无法正常使用。进一步使用Winhex分析这些残缺文件,我们发现在这些文件中通常残留了大量文字、图像和表格数据。目前,现有电子数据取证软件不能有效提取残缺Word文件中残留的数据信息,进而导致大量重要线索的遗失,甚至影响到案件的办理。本篇论文将深入研究通过手工方式从残缺Word文件中提取出残留的文字、图像和表格数据,希望能对公安机关的电子数据检验工作有所帮助。
1 Word文件内部数据流结构剖析
Word文件属于复合文档 (Compound Document),这类文件中不仅包含文本,而且可以包括图像、表格、声音甚至视频信息。可以把复合文档想象成一个所有者,它装着文本、图像以及多媒体信息。
图1 Word文件的内部数据流结构
复合文档的存储原理类似于FAT32文件系统。复合文档将数据分成许多流(Stream),这些流又存储在不同的仓库(Storage)里。将复合文档想象成计算机的E盘,E盘用的是FAT32文件系统,仓库就相当于E盘里的文件夹,流就相当于E盘里的文件。流和仓库的命名规则与FAT32文件系统相似,不同仓库下可以有同名的流,同一个仓库下的流及仓库不能重名。
一篇Word文件包含的数据流结构如图1所示,RootEntry为根结点,其下是由六个数据流组成的一棵二叉树结构。Word文件中的文字信息通常保存在WordDocument数据流中,图像数据保存在Data数据流中,各类文字信息的起始位置、长度和格式等信息保存在1Table数据流中,这三个数据流对残留数据信息的提取至关重要。
2 残缺Word文件残留数据信息提取流程
在一篇Word文件中,文字信息包括正文、页眉、页脚、脚注、批注、尾注、文档中文本框和文档中页眉文本框,共8种。这些文字信息依次存放在WordDocument数据流中,我们需要从残缺文件中定位出每类文字信息的起始位置和长度,进而完成信息提取。图2a展示的是从残缺Word文件中提取文字信息的操作流程。首先要确定残缺文件的缺损等级,这主要是通过判断主扇区配置表(MSAT)和扇区配置表(SAT)的破损程度来确定的。如果这两个表都完好,对应等级为1级,可以准确提取出每类文字数据的起始位置和长度,进而完成数据提取。如果MSAT表损坏,但可以通过搜索关键词方法定位到SAT表,对应第2等级,此时可以借助SAT表定位残留文字数据,完成信息提取。如果MSAT和SAT表均损坏,对应第3等级,这时残留文字的位置信息无法准确获得,只能到大多数情况下的默认文字数据起始位置进行提取。通过大量测试,我们发现文字数据的起始位置通常是固定在偏移地址0x0A00处。表格数据夹杂在文字数据中,使用关键词0x07000700进行分隔,可以通过该关键词定位到表格数据,进而绘制出相应的表格。
图2 残缺Word文件残留数据信息提取流程
图2b展示的是图片数据的提取流程。通常在Word文件中存储JPEG或PNG格式的图像,这两类图像没有经过压缩处理,直接存储在Word文件中。因此,在进行图像提取时,可以直接搜索这两类图像文件的头部和尾部特征值,将头尾之间的数据提取、合并成一个原始图像文件。
3 从残缺Word文件中提取出文字、表格和图像数据的方法实例
“13——~WRD3366.tmp”是使用FinalData软件恢复出的一个Word文件,但由于被部分覆盖,因此该文件无法正常打开查看。下面依次提取文件中残留的文字、表格和图像数据。
3.1确定WordDocument流的存储位置
Word文件中所有数据流均划分成大小相同的数据块,叫做数据扇区(sector)。扇区大小通常为512字节,可以包含用户数据或控制数据。整个文件由一个头结构(512字节)以及其后的多个扇区块组成。扇区编号从0开始,依次递增。这个编号(SID:sector identifier)是一个有符号的32位的整型数值。
如果一个SID的值为正数,表示这个扇区隶属于某个数据流;如果为负数,表示特殊的含义。下面是一些常见的取值:-1代表这是一个空闲扇区,可存在于文件中,但不是任何数据流的组成部分;-2代表这是一个SID链的结束标记;-3表示这个扇区用于存放扇区配置表(SAT);-4代表这个扇区用于存放主扇区配置表(MSAT)。
用于存储数据流的所有扇区组成一个扇区链,使用-2作为结束标记。例如:一个数据流的SID链为[2,10,3,-2],表示流数据依次存储在编号为2、10和3的扇区块中。WordDocument数据流中保存了所有的文字和表格数据,因此需要确定这个数据流的存放位置,即确定SID流链表。确定方法与Word文件的破损程度紧密相关。如果属于1级破损,则可以根据MSAT和SAT表来确定。
图3 MSAT和SAT表均完好,属于1级缺损
图3是某个破损较轻的Word文件信息。第一个扇区512字节是文件头部,图3a显示MSAT表总扇区个数为0,说明MSAT表没有使用附加扇区。其后的0x0000002A表示SAT表的第一个扇区编号是42,这个扇区在文件中的偏移地址 =42×512+512= 22016=0x5600。跳转到这个位置可以查看到图3-b所示结果。由于数据存在明显递增的特征,并且递增数据均以0xFEFFFFFF,即-2结尾,因此断定SAT表数据完好。从SAT表中可以提取8个数据流的SID链表,分别是:[0,1,2,3,4,5,6,7,8,-2];[9, 10, 11, 12, 13, 14, 15, 16, -2];[17,18,19,20,21,22,23,24,25,-2];[26, 27, 28, 29, 30, 31, 32, 33, -2];[34,35,36,37,38,39,40,41,-2];[43,44,-2];[45,-2];[46,-2]。从扇区 0开始的即是WordDocument数据流,即流数据依次存储在编号为0 8的扇区块中。
下面用同样的方法分析“13--~WRD3366.tmp”文件。图4a显示文件头部保存完好,SAT表的第一个扇区块为0x0BA5,跳转到这个位置查看到结果如图4b所示。由于数据没有明显递增的特征,而且数值均超出文件实际大小,因此断定SAT表已经损坏,定为3级缺损。
图4 MSAT表完好,SAT表损坏,3级缺损
3.2从WordDocument流提取出各类文字数据的长度
由于“13--~WRD3366.tmp”文件的SAT表遭到破坏,因此无法准确得知WordDocument数据流的SID链表。但通过大量实验分析,我们发现大多数Word文件的数据流是连续存放的,并且WordDocument数据流的起始扇区编号通常是0。
图5 从0扇区块中提取出的各类文字数据长度
各类文字数据长度均保存在偏移地址0x0240开始的48个字节中,如图5显示“13--~WRD3366. tmp”文件共有6983个双字节正文数据和37个双字节页眉数据,其他类型文字数据的长度为0。
3.3确定文字数据的起始位置,完成各类文字数据的提取
在一篇Word文件中,各类文字数据在WordDocument数据流中连续、依次存放,因此只要定位出文字数据的起始位置,再根据3.2节的计算结果,即可准确提取出每种文字数据。如果Word文件为1、2级缺损,则可以根据SAT链表重建1Table数据流,再从1Table数据流中提取出文字数据的起始位置。
由于“13--~WRD3366.tmp”文件为3级缺损,SAT表已经遭到破坏,因而无法重建1Table数据流,进而无法准确获得文字数据的起始位置。但经过大量测试,我们发现Word文件的正文数据默认从文件偏移0x0A00处开始存放,使用winhex跳转到该地址处,查看到如图6a所示的结果,可以在右侧ASCII码解析区域看到Unicode字符串“2011YYCXXJXY119”,同时在十六进制数据区域存在大量有规律性的段落结束标记0x0D00,这些都属于明显的文字特征,说明这段文本信息没有遭到破坏,可以进行恢复。
从0x0A00地址开始连续提取6983*2=13966字节。准备一个保存取出正文数据的Word文件(名为“提取汉字.doc”),初始内容至少包含20000个全角空格(空格是为了不影响提取数据的显示,全角是为了采用unicode保存空格,如使用半角空格则采用ascii保存,复制过来的数据不能正常显示)。
图6 提取出的部分正文数据
使用winhex打开“13——~WRD3366.tmp”,用鼠标选择从0x0A00~0x408E共13966字节数据,使用winhex打开“提取汉字.doc”,在偏移地址0x 0A 00处单击右键->edit->clipboard data->write。图6b是双击打开“提取汉字.doc”查看到的部分正文数据。
在正文数据之后存放的是页眉数据,使用winhex跳转到页眉数据的起始位置(即0x0A8E),从该地址开始连续选中74个字节,查看到图7所示结果。可以看到这组数据中没有明显的文字特征,因此断定这组页眉数据已经遭到破坏。
图7 已损坏的“页眉”数据,无明显文字特征
3.4提取表格数据
表格数据的分隔符为0x0700,或者0x0D00,参考资料显示与表格高度有关,表格数据包含在正文数据之中。图7为提取出包含在正文中的表数据,可见单元格之间用0x0700分隔,空单元格和表尾分隔符是0x07000700。
图8b为在“提取汉字.doc”查看到的表格数据,单元格之间的0x0700被解析为“·”。一种快速定位表格数据的方法,是在“提取汉字.doc”文件中搜索关键词“·”,再分析命中数据,排除误报,即可完成表格定位。根据上面信息可以画出一个三行六列的数据表,如下表所示。
图8 提取出包含在正文中的表数据
表 转换之后的数据表
3.5提取图片数据
Word文件中的图片通常为PNG和JPEG格式,其中通过截图形式保存在doc文件中的图片均为PNG格式。可以使用winhex在doc文件中搜索每种类型图片的头部和尾部特征值,进而定位对应的数据块,提取、保存相应的图片数据。PNG图片的头部特征值为0x89504E470D0A1A0A,尾部特征为0x49454E4 4AE426082;JPEG图片的头部特征值为0xFFD8FFE0 00104A46,尾部特征值为0xFFD9。
使用winhex打开“13--~WRD3366.tmp”,搜索0x89504E47,定位到一个PNG图片的开始地址,如图9a所示。从该位置开始向后搜索
0x 49454E44,定位到一个PNG图片的尾部特征值,如图9b所示。使用winhex将头、尾特征值之间的数据提取合并成一个图像文件,扩展名定为PNG,双击打开,可以查看到图9c所示结果。
图9 定位、恢复出一个残留的PNG图片
4 结论
本文研究了一种手工提取残缺Word文件中残留文字、表格和图像数据的方法。经过大量实践证明,应用这种方法可以准确提取出残缺Word文件中残留的数据信息,该方法可弥补公安机关残缺Word文件检验能力的不足。但是由于采用的是手工提取方式,因此在处理大量残缺Word文件时效率较低,因此作者计划根据手工恢复的思路设计一款残缺Word文件自动信息提取软件,实现残留数据信息的快速提取。
[1]戴士剑,涂彦晖.数据恢复技术[M].第2版.北京:电子工业出版社,2005.
[2]徐国天.电子商务平台的Oralce数据库系统文件恢复与检验软件的开发[J].信息网络安全,2010,(8).
[3]严蔚敏.数据结构(C语言版)[M].北京:清华大学出版社,2008.
[4]徐国天.NTFS系统下“小文件”取证软件的设计与实现[J].信息网络安全,2011,(8).
[5]徐国天.基于存储特征的Oracle数据文件恢复软件的设计[J].中国刑警学院学报,2012,(1).
(责任编辑:孟凡骞)
D918.2
A
2095-7939(2015)01-0045-04
2014-12-11
公安部技术研究计划项目(编号:2014JSYJB033);公安部应用创新计划课题(编号:2014YYCX XJXY055);辽宁省教育科学“十二五”规划立项课题(编号:JG14db440)。
徐国天(1978-),男,辽宁沈阳人,中国刑警学院网络犯罪侦查系副教授,硕士,主要从事网络安全与数据还原研究。