當(dāng)前位置:首頁 >  站長 >  編程技術(shù) >  正文

效率源技術(shù)視界-Microsoft文檔文件損壞,怎么修復(fù)?

 2019-12-23 15:24  來源: 互聯(lián)網(wǎng)   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

Microsoft文檔是Microsoft公司的一個文件處理程序生成的文件格式。Microsoft文檔在我們的工作生活中運用的非常廣泛,因為它屬于電子數(shù)據(jù)中的一類,所以也就具有電子數(shù)據(jù)的特性:無形性、多樣性、真實性、易破壞性。因為其具有易破壞性,所以針對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文件進行存儲之后,再對于所有的文件數(shù)據(jù)進行壓縮處理。

復(fù)合文檔

(DOC/XLS/PPT)

1.復(fù)合文檔概述

復(fù)合文檔( Compound Document ) 是一種不僅包含文本而且包括圖形、電子表格數(shù)據(jù)、聲音、視頻圖象以及其它信息的文檔。可以把復(fù)合文檔想象成一個所有者,它裝著文本、圖形以及多媒體信息如聲音和圖象。目前建立復(fù)合文檔的趨勢是使用面向?qū)ο蠹夹g(shù),在這里,非標(biāo)準(zhǔn)信息如圖像和聲音可以作為獨立的、自包含式對象包含在文檔中。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ù)進行管理,如圖2所示第一個數(shù)據(jù)扇區(qū)HEADER至關(guān)重要,其中存儲了管理文件扇區(qū)內(nèi)容的配置表信息,以及文件相關(guān)屬性描述信息。整個文件的數(shù)據(jù)內(nèi)容均是以HEADER數(shù)據(jù)扇區(qū)的內(nèi)容為基礎(chǔ)進行存儲管理的。若該扇區(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)建一個獨立的紅黑樹(red-black tree),而圖3中各部分在doc文檔中的存儲順序就是以紅黑樹中各部分的節(jié)點描述信息進行排列存儲的。

圖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)容進行修改處理,確保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值與文檔的實際情況不能一一的對應(yīng)起來,則需要結(jié)合HEADER扇區(qū)和文檔實際扇區(qū)內(nèi)容的情況,對文檔中所有的扇區(qū)進行解析,判斷每個扇區(qū)內(nèi)數(shù)據(jù)結(jié)構(gòu)對內(nèi)部控制流扇區(qū)進行修改處理,從而重新生成修復(fù)完成后的復(fù)合文檔。

3、用戶數(shù)據(jù)流扇區(qū)受損

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

基于流數(shù)據(jù)的修復(fù)方案:

對于基于流數(shù)據(jù)的修復(fù)方案,針對的是復(fù)合文檔中基本的扇區(qū)結(jié)構(gòu)已經(jīng)被完全破壞,不能通過文檔的扇區(qū)配置表以及目錄數(shù)據(jù)流對文檔的內(nèi)容按照圖3的結(jié)構(gòu)進行判斷處理的情況。

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

圖片、視頻、聲音這類的數(shù)據(jù)因其數(shù)據(jù)格式都有其固定的結(jié)構(gòu)和標(biāo)識,在對文檔內(nèi)容進行解析判斷時,可結(jié)合這類型數(shù)據(jù)的結(jié)構(gòu)特點進行分析判斷。若滿足這類數(shù)據(jù)的結(jié)構(gòu)特點,則提取出來結(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ù)類型進行分類保存。基于流數(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)系。針對這三個組成部分進行詳細(xì)介紹如下:

A、部件:對應(yīng)于DOCX文檔解壓后的一個個文件。這些文件都是包中的文檔部件。

表2 Docx文檔部件

基于office Open XML標(biāo)準(zhǔn)壓縮文件(DOCX/XLSX/PPTX)使用單獨的文件(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)容進行解析。

2) 通過解析ZIP文件特定的三部分壓縮源文件數(shù)據(jù)區(qū)、目錄區(qū)、目錄結(jié)束標(biāo)志,對壓縮源文件數(shù)據(jù)區(qū)文件頭、壓縮源文件目錄區(qū)數(shù)據(jù)結(jié)構(gòu)以及壓縮源文件目錄結(jié)束標(biāo)志內(nèi)容進行解析,從而判斷出造成基于office Open XML標(biāo)準(zhǔn)壓縮文件無法正常使用的原因。

3) 對基于office Open XML標(biāo)準(zhǔn)壓縮文件中錯誤、缺失部分結(jié)合ZIP壓縮文件特定的結(jié)構(gòu),如數(shù)據(jù)壓縮校驗值,數(shù)據(jù)區(qū)、目錄區(qū)內(nèi)容的偏移位置和字節(jié)長度,壓縮源文件目錄總數(shù)等問題進行解析、判斷、修復(fù)、完善,保存為新的文件。

基于壓縮數(shù)據(jù)流的修復(fù)方案

該方案針對因為壓縮數(shù)據(jù)流不完整造成的文件無法正常使用的情況,這里需要結(jié)合表3中描述的各個文件目錄的作用對文件進行修復(fù)。這里分為兩種情況:一是word文件夾下文件內(nèi)容丟失或損壞;二是其他文件目錄下XML文件數(shù)據(jù)丟失或損壞;

1)word文件夾下文件內(nèi)容丟失或損壞

◆首先提取出為丟失部分文件數(shù)據(jù),按照每個壓縮源文件對提取出的文件數(shù)據(jù)進行解壓縮算法實現(xiàn),對未丟失數(shù)據(jù)進行解析提取保存到新文件。

◆然后解析出其他未丟失或損壞的XML文件,按照基于office Open XML標(biāo)準(zhǔn)壓縮文件三個組成部分,重新組合出新的文件目錄結(jié)構(gòu)。

◆最后將重新組合生成的文件目錄進行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文件進行構(gòu)造。

◆最后將重新組合生成的文件目錄進行ZIP壓縮,并對壓縮后的ZIP文件修改文件后綴名(DOCX/XLSX/PPTX)。

本文主要介紹了有關(guān)Microsoft文檔文件的不同文件格式的結(jié)構(gòu)和修復(fù)方案,希望對您有一定的參考價值。

如對文中的操作、描述有任何疑問,或者有相關(guān)案件需要協(xié)助,歡迎撥打熱線電話028-85211099或直接在微信公眾號后臺給我們留言。

技術(shù)干貨,在線瀏覽

效率源在線技術(shù)干貨來啦!效率源微信公眾號定期精選近年最新最實用的技術(shù)文章30篇,內(nèi)容涵蓋手機取證、數(shù)據(jù)庫取證、網(wǎng)絡(luò)取證、Windows取證、AI視頻真假鑒別等一系列電子數(shù)據(jù)取證實戰(zhàn)知識,歡迎查閱!

獲取途徑:

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

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

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

相關(guān)標(biāo)簽
文檔
修復(fù)

相關(guān)文章

熱門排行

信息推薦