徐國天
(中國刑警學(xué)院 遼寧 沈陽 110035)
殘缺Word文件數(shù)據(jù)信息提取方法研究
徐國天
(中國刑警學(xué)院遼寧沈陽110035)
從涉案計算機(jī)恢復(fù)出的大量殘缺Word文件中,通常殘留大量對案件辦理有價值的文字、圖像和表格數(shù)據(jù),定位、提取出這些殘留數(shù)據(jù)對公安機(jī)關(guān)的調(diào)查、取證工作有著重要的意義?;诖耍芯苛艘环N從殘缺Word文件中手工提取殘留文字、表格和圖像數(shù)據(jù)的方法。通過實踐證明,應(yīng)用這種方法可以準(zhǔn)確提取出殘缺Word文件中殘留的數(shù)據(jù)信息。
殘缺Word數(shù)據(jù)提取恢復(fù)
Word是Office辦公軟件的一個重要組成部分,利用它可以完成文稿編輯、資料撰寫等多種任務(wù),可以說這款軟件給人們的日常工作、生活帶來了極大便利。Word文件中可以保存大量有價值的文字、圖像和表格數(shù)據(jù),犯罪分子為了逃避法律的制裁,會將某些重要的涉案Word文件刪除。恢復(fù)這些被刪除的Word文件,從中提取出有價值的數(shù)據(jù)信息對公安機(jī)關(guān)的調(diào)查、取證工作有重要的意義。
在實際辦案中,我們經(jīng)常遇到這樣一種情況:電子數(shù)據(jù)檢驗人員使用數(shù)據(jù)恢復(fù)軟件(如FinalData)從涉案計算機(jī)中恢復(fù)出大量Word文件,但是其中很多文件無法正常使用,雙擊打開時,系統(tǒng)提示這些文件已經(jīng)損壞。通過分析,我們發(fā)現(xiàn)造成這種現(xiàn)象的原因是當(dāng)文件被刪除之后,存儲在硬盤空間內(nèi)的數(shù)據(jù)并沒有真正消失,只是對應(yīng)存儲空間的狀態(tài)變?yōu)榭臻e狀態(tài),表示這塊存儲空間可以被其他文件重新使用。如果此時進(jìn)行數(shù)據(jù)恢復(fù),那么得到的Word文件是可以正常使用的。但是隨著涉案計算機(jī)的應(yīng)用,被刪除文件的部分存儲空間很可能被其他文件覆蓋,同時某些恢復(fù)數(shù)據(jù)所必須的關(guān)鍵信息(如MFT記錄)也可能遭到破壞,這些因素將導(dǎo)致恢復(fù)出的文件內(nèi)容殘缺,無法正常使用。進(jìn)一步使用Winhex分析這些殘缺文件,我們發(fā)現(xiàn)在這些文件中通常殘留了大量文字、圖像和表格數(shù)據(jù)。目前,現(xiàn)有電子數(shù)據(jù)取證軟件不能有效提取殘缺Word文件中殘留的數(shù)據(jù)信息,進(jìn)而導(dǎo)致大量重要線索的遺失,甚至影響到案件的辦理。本篇論文將深入研究通過手工方式從殘缺Word文件中提取出殘留的文字、圖像和表格數(shù)據(jù),希望能對公安機(jī)關(guān)的電子數(shù)據(jù)檢驗工作有所幫助。
Word文件屬于復(fù)合文檔 (Compound Document),這類文件中不僅包含文本,而且可以包括圖像、表格、聲音甚至視頻信息??梢园褟?fù)合文檔想象成一個所有者,它裝著文本、圖像以及多媒體信息。
圖1 Word文件的內(nèi)部數(shù)據(jù)流結(jié)構(gòu)
復(fù)合文檔的存儲原理類似于FAT32文件系統(tǒng)。復(fù)合文檔將數(shù)據(jù)分成許多流(Stream),這些流又存儲在不同的倉庫(Storage)里。將復(fù)合文檔想象成計算機(jī)的E盤,E盤用的是FAT32文件系統(tǒng),倉庫就相當(dāng)于E盤里的文件夾,流就相當(dāng)于E盤里的文件。流和倉庫的命名規(guī)則與FAT32文件系統(tǒng)相似,不同倉庫下可以有同名的流,同一個倉庫下的流及倉庫不能重名。
一篇Word文件包含的數(shù)據(jù)流結(jié)構(gòu)如圖1所示,RootEntry為根結(jié)點,其下是由六個數(shù)據(jù)流組成的一棵二叉樹結(jié)構(gòu)。Word文件中的文字信息通常保存在WordDocument數(shù)據(jù)流中,圖像數(shù)據(jù)保存在Data數(shù)據(jù)流中,各類文字信息的起始位置、長度和格式等信息保存在1Table數(shù)據(jù)流中,這三個數(shù)據(jù)流對殘留數(shù)據(jù)信息的提取至關(guān)重要。
在一篇Word文件中,文字信息包括正文、頁眉、頁腳、腳注、批注、尾注、文檔中文本框和文檔中頁眉文本框,共8種。這些文字信息依次存放在WordDocument數(shù)據(jù)流中,我們需要從殘缺文件中定位出每類文字信息的起始位置和長度,進(jìn)而完成信息提取。圖2a展示的是從殘缺Word文件中提取文字信息的操作流程。首先要確定殘缺文件的缺損等級,這主要是通過判斷主扇區(qū)配置表(MSAT)和扇區(qū)配置表(SAT)的破損程度來確定的。如果這兩個表都完好,對應(yīng)等級為1級,可以準(zhǔn)確提取出每類文字?jǐn)?shù)據(jù)的起始位置和長度,進(jìn)而完成數(shù)據(jù)提取。如果MSAT表損壞,但可以通過搜索關(guān)鍵詞方法定位到SAT表,對應(yīng)第2等級,此時可以借助SAT表定位殘留文字?jǐn)?shù)據(jù),完成信息提取。如果MSAT和SAT表均損壞,對應(yīng)第3等級,這時殘留文字的位置信息無法準(zhǔn)確獲得,只能到大多數(shù)情況下的默認(rèn)文字?jǐn)?shù)據(jù)起始位置進(jìn)行提取。通過大量測試,我們發(fā)現(xiàn)文字?jǐn)?shù)據(jù)的起始位置通常是固定在偏移地址0x0A00處。表格數(shù)據(jù)夾雜在文字?jǐn)?shù)據(jù)中,使用關(guān)鍵詞0x07000700進(jìn)行分隔,可以通過該關(guān)鍵詞定位到表格數(shù)據(jù),進(jìn)而繪制出相應(yīng)的表格。
圖2 殘缺Word文件殘留數(shù)據(jù)信息提取流程
圖2b展示的是圖片數(shù)據(jù)的提取流程。通常在Word文件中存儲JPEG或PNG格式的圖像,這兩類圖像沒有經(jīng)過壓縮處理,直接存儲在Word文件中。因此,在進(jìn)行圖像提取時,可以直接搜索這兩類圖像文件的頭部和尾部特征值,將頭尾之間的數(shù)據(jù)提取、合并成一個原始圖像文件。
“13——~WRD3366.tmp”是使用FinalData軟件恢復(fù)出的一個Word文件,但由于被部分覆蓋,因此該文件無法正常打開查看。下面依次提取文件中殘留的文字、表格和圖像數(shù)據(jù)。
3.1確定WordDocument流的存儲位置
Word文件中所有數(shù)據(jù)流均劃分成大小相同的數(shù)據(jù)塊,叫做數(shù)據(jù)扇區(qū)(sector)。扇區(qū)大小通常為512字節(jié),可以包含用戶數(shù)據(jù)或控制數(shù)據(jù)。整個文件由一個頭結(jié)構(gòu)(512字節(jié))以及其后的多個扇區(qū)塊組成。扇區(qū)編號從0開始,依次遞增。這個編號(SID:sector identifier)是一個有符號的32位的整型數(shù)值。
如果一個SID的值為正數(shù),表示這個扇區(qū)隸屬于某個數(shù)據(jù)流;如果為負(fù)數(shù),表示特殊的含義。下面是一些常見的取值:-1代表這是一個空閑扇區(qū),可存在于文件中,但不是任何數(shù)據(jù)流的組成部分;-2代表這是一個SID鏈的結(jié)束標(biāo)記;-3表示這個扇區(qū)用于存放扇區(qū)配置表(SAT);-4代表這個扇區(qū)用于存放主扇區(qū)配置表(MSAT)。
用于存儲數(shù)據(jù)流的所有扇區(qū)組成一個扇區(qū)鏈,使用-2作為結(jié)束標(biāo)記。例如:一個數(shù)據(jù)流的SID鏈為[2,10,3,-2],表示流數(shù)據(jù)依次存儲在編號為2、10和3的扇區(qū)塊中。WordDocument數(shù)據(jù)流中保存了所有的文字和表格數(shù)據(jù),因此需要確定這個數(shù)據(jù)流的存放位置,即確定SID流鏈表。確定方法與Word文件的破損程度緊密相關(guān)。如果屬于1級破損,則可以根據(jù)MSAT和SAT表來確定。
圖3 MSAT和SAT表均完好,屬于1級缺損
圖3是某個破損較輕的Word文件信息。第一個扇區(qū)512字節(jié)是文件頭部,圖3a顯示MSAT表總扇區(qū)個數(shù)為0,說明MSAT表沒有使用附加扇區(qū)。其后的0x0000002A表示SAT表的第一個扇區(qū)編號是42,這個扇區(qū)在文件中的偏移地址 =42×512+512= 22016=0x5600。跳轉(zhuǎn)到這個位置可以查看到圖3-b所示結(jié)果。由于數(shù)據(jù)存在明顯遞增的特征,并且遞增數(shù)據(jù)均以0xFEFFFFFF,即-2結(jié)尾,因此斷定SAT表數(shù)據(jù)完好。從SAT表中可以提取8個數(shù)據(jù)流的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]。從扇區(qū) 0開始的即是WordDocument數(shù)據(jù)流,即流數(shù)據(jù)依次存儲在編號為0 8的扇區(qū)塊中。
下面用同樣的方法分析“13--~WRD3366.tmp”文件。圖4a顯示文件頭部保存完好,SAT表的第一個扇區(qū)塊為0x0BA5,跳轉(zhuǎn)到這個位置查看到結(jié)果如圖4b所示。由于數(shù)據(jù)沒有明顯遞增的特征,而且數(shù)值均超出文件實際大小,因此斷定SAT表已經(jīng)損壞,定為3級缺損。
圖4 MSAT表完好,SAT表損壞,3級缺損
3.2從WordDocument流提取出各類文字?jǐn)?shù)據(jù)的長度
由于“13--~WRD3366.tmp”文件的SAT表遭到破壞,因此無法準(zhǔn)確得知WordDocument數(shù)據(jù)流的SID鏈表。但通過大量實驗分析,我們發(fā)現(xiàn)大多數(shù)Word文件的數(shù)據(jù)流是連續(xù)存放的,并且WordDocument數(shù)據(jù)流的起始扇區(qū)編號通常是0。
圖5 從0扇區(qū)塊中提取出的各類文字?jǐn)?shù)據(jù)長度
各類文字?jǐn)?shù)據(jù)長度均保存在偏移地址0x0240開始的48個字節(jié)中,如圖5顯示“13--~WRD3366. tmp”文件共有6983個雙字節(jié)正文數(shù)據(jù)和37個雙字節(jié)頁眉數(shù)據(jù),其他類型文字?jǐn)?shù)據(jù)的長度為0。
3.3確定文字?jǐn)?shù)據(jù)的起始位置,完成各類文字?jǐn)?shù)據(jù)的提取
在一篇Word文件中,各類文字?jǐn)?shù)據(jù)在WordDocument數(shù)據(jù)流中連續(xù)、依次存放,因此只要定位出文字?jǐn)?shù)據(jù)的起始位置,再根據(jù)3.2節(jié)的計算結(jié)果,即可準(zhǔn)確提取出每種文字?jǐn)?shù)據(jù)。如果Word文件為1、2級缺損,則可以根據(jù)SAT鏈表重建1Table數(shù)據(jù)流,再從1Table數(shù)據(jù)流中提取出文字?jǐn)?shù)據(jù)的起始位置。
由于“13--~WRD3366.tmp”文件為3級缺損,SAT表已經(jīng)遭到破壞,因而無法重建1Table數(shù)據(jù)流,進(jìn)而無法準(zhǔn)確獲得文字?jǐn)?shù)據(jù)的起始位置。但經(jīng)過大量測試,我們發(fā)現(xiàn)Word文件的正文數(shù)據(jù)默認(rèn)從文件偏移0x0A00處開始存放,使用winhex跳轉(zhuǎn)到該地址處,查看到如圖6a所示的結(jié)果,可以在右側(cè)ASCII碼解析區(qū)域看到Unicode字符串“2011YYCXXJXY119”,同時在十六進(jìn)制數(shù)據(jù)區(qū)域存在大量有規(guī)律性的段落結(jié)束標(biāo)記0x0D00,這些都屬于明顯的文字特征,說明這段文本信息沒有遭到破壞,可以進(jìn)行恢復(fù)。
從0x0A00地址開始連續(xù)提取6983*2=13966字節(jié)。準(zhǔn)備一個保存取出正文數(shù)據(jù)的Word文件(名為“提取漢字.doc”),初始內(nèi)容至少包含20000個全角空格(空格是為了不影響提取數(shù)據(jù)的顯示,全角是為了采用unicode保存空格,如使用半角空格則采用ascii保存,復(fù)制過來的數(shù)據(jù)不能正常顯示)。
圖6 提取出的部分正文數(shù)據(jù)
使用winhex打開“13——~WRD3366.tmp”,用鼠標(biāo)選擇從0x0A00~0x408E共13966字節(jié)數(shù)據(jù),使用winhex打開“提取漢字.doc”,在偏移地址0x 0A 00處單擊右鍵->edit->clipboard data->write。圖6b是雙擊打開“提取漢字.doc”查看到的部分正文數(shù)據(jù)。
在正文數(shù)據(jù)之后存放的是頁眉數(shù)據(jù),使用winhex跳轉(zhuǎn)到頁眉數(shù)據(jù)的起始位置(即0x0A8E),從該地址開始連續(xù)選中74個字節(jié),查看到圖7所示結(jié)果??梢钥吹竭@組數(shù)據(jù)中沒有明顯的文字特征,因此斷定這組頁眉數(shù)據(jù)已經(jīng)遭到破壞。
圖7 已損壞的“頁眉”數(shù)據(jù),無明顯文字特征
3.4提取表格數(shù)據(jù)
表格數(shù)據(jù)的分隔符為0x0700,或者0x0D00,參考資料顯示與表格高度有關(guān),表格數(shù)據(jù)包含在正文數(shù)據(jù)之中。圖7為提取出包含在正文中的表數(shù)據(jù),可見單元格之間用0x0700分隔,空單元格和表尾分隔符是0x07000700。
圖8b為在“提取漢字.doc”查看到的表格數(shù)據(jù),單元格之間的0x0700被解析為“·”。一種快速定位表格數(shù)據(jù)的方法,是在“提取漢字.doc”文件中搜索關(guān)鍵詞“·”,再分析命中數(shù)據(jù),排除誤報,即可完成表格定位。根據(jù)上面信息可以畫出一個三行六列的數(shù)據(jù)表,如下表所示。
圖8 提取出包含在正文中的表數(shù)據(jù)
表 轉(zhuǎn)換之后的數(shù)據(jù)表
3.5提取圖片數(shù)據(jù)
Word文件中的圖片通常為PNG和JPEG格式,其中通過截圖形式保存在doc文件中的圖片均為PNG格式??梢允褂脀inhex在doc文件中搜索每種類型圖片的頭部和尾部特征值,進(jìn)而定位對應(yīng)的數(shù)據(jù)塊,提取、保存相應(yīng)的圖片數(shù)據(jù)。PNG圖片的頭部特征值為0x89504E470D0A1A0A,尾部特征為0x49454E4 4AE426082;JPEG圖片的頭部特征值為0xFFD8FFE0 00104A46,尾部特征值為0xFFD9。
使用winhex打開“13--~WRD3366.tmp”,搜索0x89504E47,定位到一個PNG圖片的開始地址,如圖9a所示。從該位置開始向后搜索
0x 49454E44,定位到一個PNG圖片的尾部特征值,如圖9b所示。使用winhex將頭、尾特征值之間的數(shù)據(jù)提取合并成一個圖像文件,擴(kuò)展名定為PNG,雙擊打開,可以查看到圖9c所示結(jié)果。
圖9 定位、恢復(fù)出一個殘留的PNG圖片
本文研究了一種手工提取殘缺Word文件中殘留文字、表格和圖像數(shù)據(jù)的方法。經(jīng)過大量實踐證明,應(yīng)用這種方法可以準(zhǔn)確提取出殘缺Word文件中殘留的數(shù)據(jù)信息,該方法可彌補公安機(jī)關(guān)殘缺Word文件檢驗?zāi)芰Φ牟蛔?。但是由于采用的是手工提取方式,因此在處理大量殘缺Word文件時效率較低,因此作者計劃根據(jù)手工恢復(fù)的思路設(shè)計一款殘缺Word文件自動信息提取軟件,實現(xiàn)殘留數(shù)據(jù)信息的快速提取。
[1]戴士劍,涂彥暉.?dāng)?shù)據(jù)恢復(fù)技術(shù)[M].第2版.北京:電子工業(yè)出版社,2005.
[2]徐國天.電子商務(wù)平臺的Oralce數(shù)據(jù)庫系統(tǒng)文件恢復(fù)與檢驗軟件的開發(fā)[J].信息網(wǎng)絡(luò)安全,2010,(8).
[3]嚴(yán)蔚敏.?dāng)?shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2008.
[4]徐國天.NTFS系統(tǒng)下“小文件”取證軟件的設(shè)計與實現(xiàn)[J].信息網(wǎng)絡(luò)安全,2011,(8).
[5]徐國天.基于存儲特征的Oracle數(shù)據(jù)文件恢復(fù)軟件的設(shè)計[J].中國刑警學(xué)院學(xué)報,2012,(1).
(責(zé)任編輯:孟凡騫)
D918.2
A
2095-7939(2015)01-0045-04
2014-12-11
公安部技術(shù)研究計劃項目(編號:2014JSYJB033);公安部應(yīng)用創(chuàng)新計劃課題(編號:2014YYCX XJXY055);遼寧省教育科學(xué)“十二五”規(guī)劃立項課題(編號:JG14db440)。
徐國天(1978-),男,遼寧沈陽人,中國刑警學(xué)院網(wǎng)絡(luò)犯罪偵查系副教授,碩士,主要從事網(wǎng)絡(luò)安全與數(shù)據(jù)還原研究。