Microsoft文檔是Microsoft公司的一個文件處理程序生成的文件格式。Microsoft文檔在我們的工作生活中運(yùn)用的非常廣泛,因?yàn)樗鼘儆陔娮訑?shù)據(jù)中的一類,所以也就具有電子數(shù)據(jù)的特性:無形性、多樣性、真實(shí)性、易破壞性。因?yàn)槠渚哂幸灼茐男?,所以針對Microsoft文檔文件的修復(fù)是本文所要論述的內(nèi)容。
任何文檔文件的修復(fù)都需要先了解其文檔結(jié)構(gòu),針對Microsoft文檔的文件結(jié)構(gòu),我們分為兩類來討論:
◆其中一類是DOC/XLS/PPT ,是Microsoft office 2007及之前的版本使用的文件格式,它們是復(fù)合文檔,文件中包含文字、圖片、電子表格數(shù)據(jù)、聲音、視頻圖像以及其他信息。
◆另一類是DOCX/XLSX/PPTX ,它們是Microsoft office 2007之后版本使用的文件格式,是基于office Open XML標(biāo)準(zhǔn)的壓縮文件格式,其中也包含文字、圖片、電子表格數(shù)據(jù)、聲音、視頻圖像等復(fù)合信息,但是它與復(fù)合文檔不同之處在于,所有的文件信息都是基于XML文件進(jìn)行存儲之后,再對于所有的文件數(shù)據(jù)進(jìn)行壓縮處理。
復(fù)合文檔
(DOC/XLS/PPT)
1.復(fù)合文檔概述
復(fù)合文檔( Compound Document ) 是一種不僅包含文本而且包括圖形、電子表格數(shù)據(jù)、聲音、視頻圖象以及其它信息的文檔??梢园褟?fù)合文檔想象成一個所有者,它裝著文本、圖形以及多媒體信息如聲音和圖象。目前建立復(fù)合文檔的趨勢是使用面向?qū)ο蠹夹g(shù),在這里,非標(biāo)準(zhǔn)信息如圖像和聲音可以作為獨(dú)立的、自包含式對象包含在文檔中。Document、Excel、PowerPoint等都是用這種格式存儲的。
復(fù)合文檔的原理就像一個文件系統(tǒng)(文件系統(tǒng):如 FAT 與 NTFS )。復(fù)合文檔將數(shù)據(jù)分成許多流( Streams ),這些流又存儲在不同的倉庫( Storages )里。將復(fù)合文檔想象成你的 D 盤, D 盤用的是 NTFS ( NT File System )格式,流就相當(dāng)于 D 盤里的文件,倉庫就相當(dāng)于 D 盤里的文件夾。
流和倉庫的命名規(guī)則與文件系統(tǒng)相似,同一個倉庫下的流及倉庫不能重名,不同倉庫下可以有同名的流。每個復(fù)合文檔都有一個根倉庫( root storage )。如圖1所示:
圖1復(fù)合文檔倉庫和流結(jié)構(gòu)的關(guān)系
復(fù)合文檔中所有的流又分成更小的數(shù)據(jù)塊,叫做數(shù)據(jù)扇區(qū)(sectors)。Sectors可能包含控制數(shù)據(jù)或用戶數(shù)據(jù)。整個文件由一個頭( Header )結(jié)構(gòu)以及其后的所有 Sectors 組成。Sectors 的大小在頭中確定,且每個 Sectors 的大小都相同,如圖2所示:
圖2 復(fù)合文檔sectors結(jié)構(gòu)
2.lDOC文檔結(jié)構(gòu)
復(fù)合文檔以sectors為基本單位對文件數(shù)據(jù)進(jìn)行管理,如圖2所示第一個數(shù)據(jù)扇區(qū)HEADER至關(guān)重要,其中存儲了管理文件扇區(qū)內(nèi)容的配置表信息,以及文件相關(guān)屬性描述信息。整個文件的數(shù)據(jù)內(nèi)容均是以HEADER數(shù)據(jù)扇區(qū)的內(nèi)容為基礎(chǔ)進(jìn)行存儲管理的。若該扇區(qū)被破壞,則會導(dǎo)致文件內(nèi)容無法正常打開使用。而關(guān)于復(fù)合文檔基于結(jié)構(gòu)的文件修復(fù)方案,也是基于HEADER數(shù)據(jù)扇區(qū)管理的所有扇區(qū)內(nèi)容展開的。
在復(fù)合文檔中涉及多種扇區(qū)配置表的概念,其中包含三類扇區(qū)配置表:
一是主扇區(qū)配置表MSAT,管理文檔所有用來存放扇區(qū)配置表的扇區(qū)數(shù)。
二是短扇區(qū)配置表SSAT,管理文檔中小于指定流大小的短流扇區(qū)數(shù)。
三是扇區(qū)配置表SAT,管理所有用戶流(短流除外)和內(nèi)部控制流的扇區(qū)數(shù)。在復(fù)合文檔中扇區(qū)數(shù)通過SID來表示,一個配置表就是一個SID鏈。
以doc文檔為例說明復(fù)合文檔基于結(jié)構(gòu)的修復(fù)方案:
Doc文檔的存儲結(jié)構(gòu),如圖3所示:
圖3 doc文檔存儲結(jié)構(gòu)
圖3中各部分結(jié)構(gòu)在任一doc文檔中并不一定按照該順序存儲,如圖3中doc文檔包含各部分的存儲順序和數(shù)據(jù)扇區(qū)排列方式,是以Root Entry為入口,構(gòu)建一個獨(dú)立的紅黑樹(red-black tree),而圖3中各部分在doc文檔中的存儲順序就是以紅黑樹中各部分的節(jié)點(diǎn)描述信息進(jìn)行排列存儲的。
圖3中各部分存儲的內(nèi)容介紹如表所示:
表3 doc文檔結(jié)構(gòu)描述
3.復(fù)合文檔修復(fù)方案
圖4 復(fù)合文檔修復(fù)方案
復(fù)合文檔文件修復(fù)方案有兩種,一是基于扇區(qū)結(jié)構(gòu)的修復(fù)方案,二是基于流數(shù)據(jù)的修復(fù)方案。
基于扇區(qū)結(jié)構(gòu)的修復(fù)方案:
1、HEADER扇區(qū)受損
根據(jù)HEADER扇區(qū)的固定結(jié)構(gòu),對HEADER扇區(qū)中缺失或錯誤的字段內(nèi)容進(jìn)行修改處理,確保HEADER扇區(qū)的內(nèi)容能夠與文檔的配置表信息、文檔屬性描述信息、文檔扇區(qū)大小等信息正確對應(yīng)。
HEADER扇區(qū)的數(shù)據(jù)內(nèi)容結(jié)構(gòu)如圖5所示。
圖5 HEADER扇區(qū)
2、內(nèi)部控制流扇區(qū)受損
內(nèi)部控制流扇區(qū)一般指的是文檔的配置表扇區(qū)內(nèi)容被破壞,包括SAT、SSAT、MSAT這三類配置表扇區(qū)內(nèi)包含的SID值與文檔的實(shí)際情況不能一一的對應(yīng)起來,則需要結(jié)合HEADER扇區(qū)和文檔實(shí)際扇區(qū)內(nèi)容的情況,對文檔中所有的扇區(qū)進(jìn)行解析,判斷每個扇區(qū)內(nèi)數(shù)據(jù)結(jié)構(gòu)對內(nèi)部控制流扇區(qū)進(jìn)行修改處理,從而重新生成修復(fù)完成后的復(fù)合文檔。
3、用戶數(shù)據(jù)流扇區(qū)受損
用戶數(shù)據(jù)流扇區(qū)一般指的是在生成文件時,因用戶對文檔的增刪改等操作而改變的文檔中存儲的數(shù)據(jù)流扇區(qū)被破壞的情況下,對這部分扇區(qū)內(nèi)容進(jìn)行修復(fù)處理。對于這部分?jǐn)?shù)據(jù),則需要結(jié)合圖3中描述的文件結(jié)構(gòu)來確定文檔中存儲這些結(jié)構(gòu)的扇區(qū)位置,然后判斷是其中的哪些結(jié)構(gòu)錯誤或缺失造成文件被破壞,再針對被破壞結(jié)構(gòu)結(jié)合其中存儲的固定信息內(nèi)容進(jìn)行修復(fù)處理。
基于流數(shù)據(jù)的修復(fù)方案:
對于基于流數(shù)據(jù)的修復(fù)方案,針對的是復(fù)合文檔中基本的扇區(qū)結(jié)構(gòu)已經(jīng)被完全破壞,不能通過文檔的扇區(qū)配置表以及目錄數(shù)據(jù)流對文檔的內(nèi)容按照圖3的結(jié)構(gòu)進(jìn)行判斷處理的情況。
結(jié)合復(fù)合文檔的概念,因?yàn)閺?fù)合文檔中存儲的內(nèi)容可能有文字、圖片、視頻、聲音等類型的數(shù)據(jù)。而這些數(shù)據(jù)存儲在文檔中并沒有進(jìn)行再壓縮操作,基于流數(shù)據(jù)的修復(fù)方案,就是利用這一點(diǎn),針對文檔中可能存在的不同類型的數(shù)據(jù),按照這些類型的數(shù)據(jù)本身具備的數(shù)據(jù)結(jié)構(gòu)特點(diǎn),對文檔進(jìn)行逐字節(jié)解析判斷。
圖片、視頻、聲音這類的數(shù)據(jù)因其數(shù)據(jù)格式都有其固定的結(jié)構(gòu)和標(biāo)識,在對文檔內(nèi)容進(jìn)行解析判斷時,可結(jié)合這類型數(shù)據(jù)的結(jié)構(gòu)特點(diǎn)進(jìn)行分析判斷。若滿足這類數(shù)據(jù)的結(jié)構(gòu)特點(diǎn),則提取出來結(jié)合這類數(shù)據(jù)的結(jié)構(gòu)重新保存生成新的文件;若不是,則判斷這部分?jǐn)?shù)據(jù)是否為文檔的內(nèi)部控制流數(shù)據(jù)或目錄數(shù)據(jù)流,若都不是,則這部分?jǐn)?shù)據(jù)為復(fù)合文檔的文字?jǐn)?shù)據(jù),并將其提取出來保存為文本文件。
通過基于流數(shù)據(jù)修復(fù)方案修復(fù)完成的文檔,會將修復(fù)出來的數(shù)據(jù)內(nèi)容,按照其存儲內(nèi)容的數(shù)據(jù)類型進(jìn)行分類保存?;诹鲾?shù)據(jù)的修復(fù)方案的流程圖,如圖6所示:
圖6 基于流數(shù)據(jù)的修復(fù)方案流程圖
基于office Open XML標(biāo)準(zhǔn)壓縮文件
(DOCX/XLSX/PPTX)
1.基于office Open XML標(biāo)準(zhǔn)壓縮文件概念
基于office Open XML標(biāo)準(zhǔn)壓縮文件本質(zhì)上是一個ZIP壓縮文件。它在結(jié)構(gòu)上完全可以將其看做一個ZIP文件,但是它同時也具備特定的文件目錄結(jié)構(gòu)。所以它與其他的ZIP文件不同之處在于,基于office Open XML標(biāo)準(zhǔn)壓縮文件解壓后包含的文件目錄結(jié)構(gòu)具有特定的含義。
2.DOCX文檔結(jié)構(gòu)
以DOCX文檔為例,DOCX有三個主要的組成部分:部件、內(nèi)容類型和部件關(guān)系。針對這三個組成部分進(jìn)行詳細(xì)介紹如下:
A、部件:對應(yīng)于DOCX文檔解壓后的一個個文件。這些文件都是包中的文檔部件。
表2 Docx文檔部件
基于office Open XML標(biāo)準(zhǔn)壓縮文件(DOCX/XLSX/PPTX)使用單獨(dú)的文件(xml)來表示文檔中的每個部分以及附加的內(nèi)容。它們需要依賴于各部件之間的正確關(guān)系保證文件的完整和有效性,如果可以準(zhǔn)確保持部件之間的關(guān)系,那么文件結(jié)構(gòu)可以任意更改。以DOCX文檔為例,它的open xml目錄結(jié)構(gòu)如圖7所示:
圖7 DOCX文檔open xml的文件目錄結(jié)構(gòu)
如圖7所示,一個文檔則是由一個文件夾(或者說容器),由內(nèi)部的部件各自定義屬性和數(shù)據(jù),并相互依賴而產(chǎn)生的。一個文件可能會包含這些目錄和組件,關(guān)于各個文件目錄的關(guān)系描述如表3所示:
表3 DOCX文檔open xml的文件目錄內(nèi)容描述
B、內(nèi)容類型
每個文檔部件都有一個特定的內(nèi)容類型。一個部件的內(nèi)容類型描述了這種文件類型的內(nèi)容。例如,XML部件包含了Word XML格式定義的標(biāo)記,而內(nèi)容類型可以用來分析文檔的組成。
C、部件關(guān)系
部件關(guān)系記錄了文檔部件之間的邏輯連接,構(gòu)建關(guān)系的方法是:每一個關(guān)系中都有一個源一個目的,源是關(guān)系命名的部件。例如,document.xml.rels中所有的關(guān)系都將document.xml作為它們的源。每個.rels文件都包含一個元素,每個元素都對應(yīng)一個ID,包括目標(biāo)部件的內(nèi)容類型。
3.基于office Open XML標(biāo)準(zhǔn)壓縮文件修復(fù)方案
圖8 基于office Open XML標(biāo)準(zhǔn)壓縮文件修復(fù)方案
基于ZIP結(jié)構(gòu)的修復(fù)方案
基于ZIP結(jié)構(gòu)的修復(fù)方案,對因ZIP結(jié)構(gòu)上的錯誤或缺失損壞造成的基于office Open XML標(biāo)準(zhǔn)壓縮文件無法正常使用的情況適用。對于該修復(fù)方案分為三步描述如下:
1) 結(jié)合ZIP文件結(jié)構(gòu)的特性,對基于office Open XML標(biāo)準(zhǔn)壓縮文件的文件內(nèi)容進(jìn)行解析。
2) 通過解析ZIP文件特定的三部分壓縮源文件數(shù)據(jù)區(qū)、目錄區(qū)、目錄結(jié)束標(biāo)志,對壓縮源文件數(shù)據(jù)區(qū)文件頭、壓縮源文件目錄區(qū)數(shù)據(jù)結(jié)構(gòu)以及壓縮源文件目錄結(jié)束標(biāo)志內(nèi)容進(jìn)行解析,從而判斷出造成基于office Open XML標(biāo)準(zhǔn)壓縮文件無法正常使用的原因。
3) 對基于office Open XML標(biāo)準(zhǔn)壓縮文件中錯誤、缺失部分結(jié)合ZIP壓縮文件特定的結(jié)構(gòu),如數(shù)據(jù)壓縮校驗(yàn)值,數(shù)據(jù)區(qū)、目錄區(qū)內(nèi)容的偏移位置和字節(jié)長度,壓縮源文件目錄總數(shù)等問題進(jìn)行解析、判斷、修復(fù)、完善,保存為新的文件。
基于壓縮數(shù)據(jù)流的修復(fù)方案
該方案針對因?yàn)閴嚎s數(shù)據(jù)流不完整造成的文件無法正常使用的情況,這里需要結(jié)合表3中描述的各個文件目錄的作用對文件進(jìn)行修復(fù)。這里分為兩種情況:一是word文件夾下文件內(nèi)容丟失或損壞;二是其他文件目錄下XML文件數(shù)據(jù)丟失或損壞;
1)word文件夾下文件內(nèi)容丟失或損壞
◆首先提取出為丟失部分文件數(shù)據(jù),按照每個壓縮源文件對提取出的文件數(shù)據(jù)進(jìn)行解壓縮算法實(shí)現(xiàn),對未丟失數(shù)據(jù)進(jìn)行解析提取保存到新文件。
◆然后解析出其他未丟失或損壞的XML文件,按照基于office Open XML標(biāo)準(zhǔn)壓縮文件三個組成部分,重新組合出新的文件目錄結(jié)構(gòu)。
◆最后將重新組合生成的文件目錄進(jìn)行ZIP壓縮,并對壓縮后的ZIP文件修改文件后綴名(DOCX/XLSX/PPTX)。
2)其他文件目錄下XML文件數(shù)據(jù)丟失或損壞
◆首先,提取出文件中未丟失的壓縮源文件數(shù)據(jù)內(nèi)容。
◆其次,結(jié)合圖3中描述的基于office Open XML標(biāo)準(zhǔn)壓縮文件完整的文件目錄結(jié)構(gòu),對缺失的XML文件進(jìn)行構(gòu)造。
◆最后將重新組合生成的文件目錄進(jìn)行ZIP壓縮,并對壓縮后的ZIP文件修改文件后綴名(DOCX/XLSX/PPTX)。
本文主要介紹了有關(guān)Microsoft文檔文件的不同文件格式的結(jié)構(gòu)和修復(fù)方案,希望對您有一定的參考價值。
如對文中的操作、描述有任何疑問,或者有相關(guān)案件需要協(xié)助,歡迎撥打熱線電話028-85211099或直接在微信公眾號后臺給我們留言。
技術(shù)干貨,在線瀏覽
效率源在線技術(shù)干貨來啦!效率源微信公眾號定期精選近年最新最實(shí)用的技術(shù)文章30篇,內(nèi)容涵蓋手機(jī)取證、數(shù)據(jù)庫取證、網(wǎng)絡(luò)取證、Windows取證、AI視頻真假鑒別等一系列電子數(shù)據(jù)取證實(shí)戰(zhàn)知識,歡迎查閱!
獲取途徑:
1、點(diǎn)擊效率源公眾號菜單欄【關(guān)于我們】,選擇【精選干貨】即可進(jìn)入技術(shù)盛宴。
2、進(jìn)入頁面,效率源精選干貨統(tǒng)統(tǒng)都在這里啦。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!