首頁 > 關于效率源 > 新聞和事件 > 技術視界
【技術視界】Microsoft文檔文件損壞,怎么修復?
2019年12月20日


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等都是用這種格式存儲的。

復合文檔的原理就像一個文件系統(文件系統:如 FAT 與 NTFS )。復合文檔將數據分成許多流( Streams ),這些流又存儲在不同的倉庫( Storages )里。將復合文檔想象成你的 D 盤, D 盤用的是 NTFS ( NT File System )格式,流就相當于 D 盤里的文件,倉庫就相當于 D 盤里的文件夾。

流和倉庫的命名規則與文件系統相似,同一個倉庫下的流及倉庫不能重名,不同倉庫下可以有同名的流。每個復合文檔都有一個根倉庫( root storage )。如圖1所示:

圖1復合文檔倉庫和流結構的關系

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

圖2 復合文檔sectors結構

2.lDOC文檔結構

復合文檔以sectors為基本單位對文件數據進行管理,如圖2所示第一個數據扇區HEADER至關重要,其中存儲了管理文件扇區內容的配置表信息,以及文件相關屬性描述信息。整個文件的數據內容均是以HEADER數據扇區的內容為基礎進行存儲管理的。若該扇區被破壞,則會導致文件內容無法正常打開使用。而關于復合文檔基于結構的文件修復方案,也是基于HEADER數據扇區管理的所有扇區內容展開的。

在復合文檔中涉及多種扇區配置表的概念,其中包含三類扇區配置表:

一是主扇區配置表MSAT,管理文檔所有用來存放扇區配置表的扇區數。

二是短扇區配置表SSAT,管理文檔中小于指定流大小的短流扇區數。

三是扇區配置表SAT,管理所有用戶流(短流除外)和內部控制流的扇區數。在復合文檔中扇區數通過SID來表示,一個配置表就是一個SID鏈。

以doc文檔為例說明復合文檔基于結構的修復方案:

Doc文檔的存儲結構,如圖3所示:

圖3 doc文檔存儲結構

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

 

圖3中各部分存儲的內容介紹如表所示:

表3 doc文檔結構描述

3.復合文檔修復方案

圖4 復合文檔修復方案

復合文檔文件修復方案有兩種,一是基于扇區結構的修復方案,二是基于流數據的修復方案。

基于扇區結構的修復方案:

1、HEADER扇區受損

根據HEADER扇區的固定結構,對HEADER扇區中缺失或錯誤的字段內容進行修改處理,確保HEADER扇區的內容能夠與文檔的配置表信息、文檔屬性描述信息、文檔扇區大小等信息正確對應。

HEADER扇區的數據內容結構如圖5所示。

圖5 HEADER扇區

2、內部控制流扇區受損

內部控制流扇區一般指的是文檔的配置表扇區內容被破壞,包括SAT、SSAT、MSAT這三類配置表扇區內包含的SID值與文檔的實際情況不能一一的對應起來,則需要結合HEADER扇區和文檔實際扇區內容的情況,對文檔中所有的扇區進行解析,判斷每個扇區內數據結構對內部控制流扇區進行修改處理,從而重新生成修復完成后的復合文檔。

3、用戶數據流扇區受損

用戶數據流扇區一般指的是在生成文件時,因用戶對文檔的增刪改等操作而改變的文檔中存儲的數據流扇區被破壞的情況下,對這部分扇區內容進行修復處理。對于這部分數據,則需要結合圖3中描述的文件結構來確定文檔中存儲這些結構的扇區位置,然后判斷是其中的哪些結構錯誤或缺失造成文件被破壞,再針對被破壞結構結合其中存儲的固定信息內容進行修復處理。

基于流數據的修復方案:

對于基于流數據的修復方案,針對的是復合文檔中基本的扇區結構已經被完全破壞,不能通過文檔的扇區配置表以及目錄數據流對文檔的內容按照圖3的結構進行判斷處理的情況。

結合復合文檔的概念,因為復合文檔中存儲的內容可能有文字、圖片、視頻、聲音等類型的數據。而這些數據存儲在文檔中并沒有進行再壓縮操作,基于流數據的修復方案,就是利用這一點,針對文檔中可能存在的不同類型的數據,按照這些類型的數據本身具備的數據結構特點,對文檔進行逐字節解析判斷。

圖片、視頻、聲音這類的數據因其數據格式都有其固定的結構和標識,在對文檔內容進行解析判斷時,可結合這類型數據的結構特點進行分析判斷。若滿足這類數據的結構特點,則提取出來結合這類數據的結構重新保存生成新的文件;若不是,則判斷這部分數據是否為文檔的內部控制流數據或目錄數據流,若都不是,則這部分數據為復合文檔的文字數據,并將其提取出來保存為文本文件。

通過基于流數據修復方案修復完成的文檔,會將修復出來的數據內容,按照其存儲內容的數據類型進行分類保存。基于流數據的修復方案的流程圖,如圖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文件都包含一個<relationships>元素,每個元素都對應一個ID,包括目標部件的內容類型。

3.基于office Open XML標準壓縮文件修復方案


圖8 基于office Open XML標準壓縮文件修復方案

 

基于ZIP結構的修復方案

基于ZIP結構的修復方案,對因ZIP結構上的錯誤或缺失損壞造成的基于office Open XML標準壓縮文件無法正常使用的情況適用。對于該修復方案分為三步描述如下:

1)結合ZIP文件結構的特性,對基于office Open XML標準壓縮文件的文件內容進行解析。

2)通過解析ZIP文件特定的三部分壓縮源文件數據區、目錄區、目錄結束標志,對壓縮源文件數據區文件頭、壓縮源文件目錄區數據結構以及壓縮源文件目錄結束標志內容進行解析,從而判斷出造成基于office Open XML標準壓縮文件無法正常使用的原因。

3)對基于office Open XML標準壓縮文件中錯誤、缺失部分結合ZIP壓縮文件特定的結構,如數據壓縮校驗值,數據區、目錄區內容的偏移位置和字節長度,壓縮源文件目錄總數等問題進行解析、判斷、修復、完善,保存為新的文件。

基于壓縮數據流的修復方案

該方案針對因為壓縮數據流不完整造成的文件無法正常使用的情況,這里需要結合表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視頻真假鑒別等一系列電子數據取證實戰知識,歡迎查閱!


獲取途徑:

1、點擊效率源公眾號菜單欄【關于我們】,選擇【精選干貨】即可進入技術盛宴。

 

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

 

【推薦閱讀】