Microsoft文檔是Microsoft公司的一個文件處理程序生成的文件格式。Microsoft文檔在我們的工作生活中運用的非常廣泛,因為它屬于電子數據中的一類,所以也就具有電子數據的特性:無形性、多樣性、真實性、易破壞性。因為其具有易破壞性,所以針對Microsoft文檔文件的修復是本文所要論述的內容。
任何文檔文件的修復都需要先了解其文檔結構,針對Microsoft文檔的文件結構,我們分為兩類來討論:
◆其中一類是DOC/XLS/PPT ,是Microsoft office 2007及之前的版本使用的文件格式,它們是復合文檔,文件中包含文字、圖片、電子表格數據、聲音、視頻圖像以及其他信息。
◆另一類是DOCX/XLSX/PPTX ,它們是Microsoft office 2007之后版本使用的文件格式,是基于office Open XML標準的壓縮文件格式,其中也包含文字、圖片、電子表格數據、聲音、視頻圖像等復合信息,但是它與復合文檔不同之處在于,所有的文件信息都是基于XML文件進行存儲之后,再對于所有的文件數據進行壓縮處理。
復合文檔
(DOC/XLS/PPT)

1.復合文檔概述
復合文檔( Compound Document ) 是一種不僅包含文本而且包括圖形、電子表格數據、聲音、視頻圖象以及其它信息的文檔。可以把復合文檔想象成一個所有者,它裝著文本、圖形以及多媒體信息如聲音和圖象。目前建立復合文檔的趨勢是使用面向對象技術,在這里,非標準信息如圖像和聲音可以作為獨立的、自包含式對象包含在文檔中。Document、Excel、PowerPoint等都是用這種格式存儲的。
復合文檔的原理就像一個文件系統(tǒng)(文件系統(tǒng):如 FAT 與 NTFS )。復合文檔將數據分成許多流( Streams ),這些流又存儲在不同的倉庫( Storages )里。將復合文檔想象成你的 D 盤, D 盤用的是 NTFS ( NT File System )格式,流就相當于 D 盤里的文件,倉庫就相當于 D 盤里的文件夾。
流和倉庫的命名規(guī)則與文件系統(tǒng)相似,同一個倉庫下的流及倉庫不能重名,不同倉庫下可以有同名的流。每個復合文檔都有一個根倉庫( root storage )。如圖1所示:

圖1復合文檔倉庫和流結構的關系
復合文檔中所有的流又分成更小的數據塊,叫做數據扇區(qū)(sectors)。Sectors可能包含控制數據或用戶數據。整個文件由一個頭( Header )結構以及其后的所有 Sectors 組成。Sectors 的大小在頭中確定,且每個 Sectors 的大小都相同,如圖2所示:

圖2 復合文檔sectors結構
2.lDOC文檔結構
復合文檔以sectors為基本單位對文件數據進行管理,如圖2所示第一個數據扇區(qū)HEADER至關重要,其中存儲了管理文件扇區(qū)內容的配置表信息,以及文件相關屬性描述信息。整個文件的數據內容均是以HEADER數據扇區(qū)的內容為基礎進行存儲管理的。若該扇區(qū)被破壞,則會導致文件內容無法正常打開使用。而關于復合文檔基于結構的文件修復方案,也是基于HEADER數據扇區(qū)管理的所有扇區(qū)內容展開的。
在復合文檔中涉及多種扇區(qū)配置表的概念,其中包含三類扇區(qū)配置表:
一是主扇區(qū)配置表MSAT,管理文檔所有用來存放扇區(qū)配置表的扇區(qū)數。
二是短扇區(qū)配置表SSAT,管理文檔中小于指定流大小的短流扇區(qū)數。
三是扇區(qū)配置表SAT,管理所有用戶流(短流除外)和內部控制流的扇區(qū)數。在復合文檔中扇區(qū)數通過SID來表示,一個配置表就是一個SID鏈。
以doc文檔為例說明復合文檔基于結構的修復方案:
Doc文檔的存儲結構,如圖3所示:

圖3 doc文檔存儲結構
圖3中各部分結構在任一doc文檔中并不一定按照該順序存儲,如圖3中doc文檔包含各部分的存儲順序和數據扇區(qū)排列方式,是以Root Entry為入口,構建一個獨立的紅黑樹(red-black tree),而圖3中各部分在doc文檔中的存儲順序就是以紅黑樹中各部分的節(jié)點描述信息進行排列存儲的。
圖3中各部分存儲的內容介紹如表所示:
表3 doc文檔結構描述

3.復合文檔修復方案

圖4 復合文檔修復方案
復合文檔文件修復方案有兩種,一是基于扇區(qū)結構的修復方案,二是基于流數據的修復方案。
基于扇區(qū)結構的修復方案:
1、HEADER扇區(qū)受損
根據HEADER扇區(qū)的固定結構,對HEADER扇區(qū)中缺失或錯誤的字段內容進行修改處理,確保HEADER扇區(qū)的內容能夠與文檔的配置表信息、文檔屬性描述信息、文檔扇區(qū)大小等信息正確對應。
HEADER扇區(qū)的數據內容結構如圖5所示。

圖5 HEADER扇區(qū)
2、內部控制流扇區(qū)受損
內部控制流扇區(qū)一般指的是文檔的配置表扇區(qū)內容被破壞,包括SAT、SSAT、MSAT這三類配置表扇區(qū)內包含的SID值與文檔的實際情況不能一一的對應起來,則需要結合HEADER扇區(qū)和文檔實際扇區(qū)內容的情況,對文檔中所有的扇區(qū)進行解析,判斷每個扇區(qū)內數據結構對內部控制流扇區(qū)進行修改處理,從而重新生成修復完成后的復合文檔。
3、用戶數據流扇區(qū)受損
用戶數據流扇區(qū)一般指的是在生成文件時,因用戶對文檔的增刪改等操作而改變的文檔中存儲的數據流扇區(qū)被破壞的情況下,對這部分扇區(qū)內容進行修復處理。對于這部分數據,則需要結合圖3中描述的文件結構來確定文檔中存儲這些結構的扇區(qū)位置,然后判斷是其中的哪些結構錯誤或缺失造成文件被破壞,再針對被破壞結構結合其中存儲的固定信息內容進行修復處理。
基于流數據的修復方案:
對于基于流數據的修復方案,針對的是復合文檔中基本的扇區(qū)結構已經被完全破壞,不能通過文檔的扇區(qū)配置表以及目錄數據流對文檔的內容按照圖3的結構進行判斷處理的情況。
結合復合文檔的概念,因為復合文檔中存儲的內容可能有文字、圖片、視頻、聲音等類型的數據。而這些數據存儲在文檔中并沒有進行再壓縮操作,基于流數據的修復方案,就是利用這一點,針對文檔中可能存在的不同類型的數據,按照這些類型的數據本身具備的數據結構特點,對文檔進行逐字節(jié)解析判斷。
圖片、視頻、聲音這類的數據因其數據格式都有其固定的結構和標識,在對文檔內容進行解析判斷時,可結合這類型數據的結構特點進行分析判斷。若滿足這類數據的結構特點,則提取出來結合這類數據的結構重新保存生成新的文件;若不是,則判斷這部分數據是否為文檔的內部控制流數據或目錄數據流,若都不是,則這部分數據為復合文檔的文字數據,并將其提取出來保存為文本文件。
通過基于流數據修復方案修復完成的文檔,會將修復出來的數據內容,按照其存儲內容的數據類型進行分類保存?;诹鲾祿男迯头桨傅牧鞒虉D,如圖6所示:

圖6 基于流數據的修復方案流程圖
基于office Open XML標準壓縮文件
(DOCX/XLSX/PPTX)
1.基于office Open XML標準壓縮文件概念
基于office Open XML標準壓縮文件本質上是一個ZIP壓縮文件。它在結構上完全可以將其看做一個ZIP文件,但是它同時也具備特定的文件目錄結構。所以它與其他的ZIP文件不同之處在于,基于office Open XML標準壓縮文件解壓后包含的文件目錄結構具有特定的含義。
2.DOCX文檔結構
以DOCX文檔為例,DOCX有三個主要的組成部分:部件、內容類型和部件關系。針對這三個組成部分進行詳細介紹如下:
A、部件:對應于DOCX文檔解壓后的一個個文件。這些文件都是包中的文檔部件。
表2 Docx文檔部件

基于office Open XML標準壓縮文件(DOCX/XLSX/PPTX)使用單獨的文件(xml)來表示文檔中的每個部分以及附加的內容。它們需要依賴于各部件之間的正確關系保證文件的完整和有效性,如果可以準確保持部件之間的關系,那么文件結構可以任意更改。以DOCX文檔為例,它的open xml目錄結構如圖7所示:

圖7 DOCX文檔open xml的文件目錄結構
如圖7所示,一個文檔則是由一個文件夾(或者說容器),由內部的部件各自定義屬性和數據,并相互依賴而產生的。一個文件可能會包含這些目錄和組件,關于各個文件目錄的關系描述如表3所示:
表3 DOCX文檔open xml的文件目錄內容描述

B、內容類型
每個文檔部件都有一個特定的內容類型。一個部件的內容類型描述了這種文件類型的內容。例如,XML部件包含了Word XML格式定義的標記,而內容類型可以用來分析文檔的組成。
C、部件關系
部件關系記錄了文檔部件之間的邏輯連接,構建關系的方法是:每一個關系中都有一個源一個目的,源是關系命名的部件。例如,document.xml.rels中所有的關系都將document.xml作為它們的源。每個.rels文件都包含一個元素,每個元素都對應一個ID,包括目標部件的內容類型。
3.基于office Open XML標準壓縮文件修復方案

圖8 基于office Open XML標準壓縮文件修復方案
基于ZIP結構的修復方案
基于ZIP結構的修復方案,對因ZIP結構上的錯誤或缺失損壞造成的基于office Open XML標準壓縮文件無法正常使用的情況適用。對于該修復方案分為三步描述如下:
1) 結合ZIP文件結構的特性,對基于office Open XML標準壓縮文件的文件內容進行解析。
2) 通過解析ZIP文件特定的三部分壓縮源文件數據區(qū)、目錄區(qū)、目錄結束標志,對壓縮源文件數據區(qū)文件頭、壓縮源文件目錄區(qū)數據結構以及壓縮源文件目錄結束標志內容進行解析,從而判斷出造成基于office Open XML標準壓縮文件無法正常使用的原因。
3) 對基于office Open XML標準壓縮文件中錯誤、缺失部分結合ZIP壓縮文件特定的結構,如數據壓縮校驗值,數據區(qū)、目錄區(qū)內容的偏移位置和字節(jié)長度,壓縮源文件目錄總數等問題進行解析、判斷、修復、完善,保存為新的文件。
基于壓縮數據流的修復方案
該方案針對因為壓縮數據流不完整造成的文件無法正常使用的情況,這里需要結合表3中描述的各個文件目錄的作用對文件進行修復。這里分為兩種情況:一是word文件夾下文件內容丟失或損壞;二是其他文件目錄下XML文件數據丟失或損壞;
1)word文件夾下文件內容丟失或損壞
◆首先提取出為丟失部分文件數據,按照每個壓縮源文件對提取出的文件數據進行解壓縮算法實現,對未丟失數據進行解析提取保存到新文件。
◆然后解析出其他未丟失或損壞的XML文件,按照基于office Open XML標準壓縮文件三個組成部分,重新組合出新的文件目錄結構。
◆最后將重新組合生成的文件目錄進行ZIP壓縮,并對壓縮后的ZIP文件修改文件后綴名(DOCX/XLSX/PPTX)。
2)其他文件目錄下XML文件數據丟失或損壞
◆首先,提取出文件中未丟失的壓縮源文件數據內容。
◆其次,結合圖3中描述的基于office Open XML標準壓縮文件完整的文件目錄結構,對缺失的XML文件進行構造。
◆最后將重新組合生成的文件目錄進行ZIP壓縮,并對壓縮后的ZIP文件修改文件后綴名(DOCX/XLSX/PPTX)。
本文主要介紹了有關Microsoft文檔文件的不同文件格式的結構和修復方案,希望對您有一定的參考價值。
如對文中的操作、描述有任何疑問,或者有相關案件需要協助,歡迎撥打熱線電話028-85211099或直接在微信公眾號后臺給我們留言。
技術干貨,在線瀏覽
效率源在線技術干貨來啦!效率源微信公眾號定期精選近年最新最實用的技術文章30篇,內容涵蓋手機取證、數據庫取證、網絡取證、Windows取證、AI視頻真假鑒別等一系列電子數據取證實戰(zhàn)知識,歡迎查閱!
獲取途徑:
1、點擊效率源公眾號菜單欄【關于我們】,選擇【精選干貨】即可進入技術盛宴。

2、進入頁面,效率源精選干貨統(tǒng)統(tǒng)都在這里啦。

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!