耿浩然
摘 要 隨著科學技術和信息技術不斷發展,復合文檔廣泛應用于我們的工作生活中,其在給我們帶來便利的同時,也經常碰到文件損壞的問題,甚至造成重要數據丟失。本文以微軟復合文檔作為研究對象,針對其文件格式不同的損壞形式進行分析,并提出物理修復、邏輯修復、內容修復等方法,經實驗驗證本文提出的方法能在一定程度上有效地修復出關鍵數據。
【關鍵詞】復合文檔 文件格式 數據修復 存儲
1 復合文檔的文件格式
文件格式是指計算機中存儲文件的特殊編碼方式,用于計算機操作系統識別不同的文件類型,比如程序、文字、圖片、視頻等文件,每一種文件格式通常會關聯一個或多個擴展名,但也可能不關聯固定的擴展名。微軟復合文檔(以下簡稱復合文檔)是微軟公司制定的文件格式, 廣泛應用于Word、Excel、PowerPoint等辦公文檔中,單一的復合文檔可以包含多個文本、圖形、聲音、視頻、電子表格數據等各種多媒體信息。
復合文檔的物理結構由文件頭和扇區組成,文件頭就是復合文檔最前面的512字節,描述了復合文檔的文件簽名標識、扇區大小等結構信息,是整個文檔最關鍵的部分;復合文檔的其余部分被劃分為大小相等的存儲空間,每一個存儲空間叫做一個扇區(通常為512字節)。復合文檔的扇區分配表相當于FAT32文件系統中的FAT表,用于對分配使用的所有扇區進行編號和標識;每一個數據流都可以在扇區分配表中按照順序找到其存儲位置。扇區分配表的前109個扇區編號存放在文件頭中,當扇區分配表多于109個扇區,需要附加主扇區分配表存儲,文件頭中已經標識了主扇區分配表的第一個扇區編號和扇區總數。
復合文檔的邏輯結構類似一個小型的文件系統,其由目錄和數據流組成;數據流相當于文件系統中的文件,數據流存儲在目錄中;目錄和數據流都有名字,一個目錄可以有多個子目錄和多個數據流,同一目錄下的子目錄和數據流不能重名;每個復合文檔都有一個叫做“Root Entry”的根目錄。每一個目錄和數據流都有一個索引,這些索引存儲在一個單獨的流中,這個流就叫做全局索引流。全局索引流由一系列的索引節點組成。每一個索引節點表示一個目錄或數據流;索引節點固定為128個字節,每個扇區可以包含4個索引結構。
當一個數據流的大小小于指定值(通常為4096字節),就叫做短流,短流具有特殊的尋址方式,所有的短流存儲在一個大的數據流中,其存儲空間被劃分為更小的扇區(通常為64字節),由短流扇區分配表進行編號和標識。
2 復合文檔的數據修復
根據復合文檔的文件格式,針對其不同的損壞方式,數據修復一般分為物理修復、邏輯修復和內容修復。
2.1 物理修復
文件頭修復。當復合文檔的文件頭損壞時,復合文檔無法正常使用。文件頭結構體中大多數內容比較容易修復,比如扇區大小、短流大小、標準流最小值等,比較難修復的是扇區總數、短扇區總數、目錄流的首扇區編號、扇區分配表的前109個扇區編號等,單純的文件頭損壞,可以根據復合文檔后面的完整部分計算并修復文件頭結構體。
扇區分配表修復。扇區分配表損壞對復合文檔的結構完整性破壞最大,其修復難度也是最大的。最簡單的修復方法就是先判斷損壞的扇區,然后將損壞的扇區修復為-1,即標識為未分配的扇區。判斷依據就是扇區分配表中的扇區編號(每4個字節組成的有符號32位整數),其取值范圍必須小于扇區總數,或者大于-4。
2.2 邏輯修復
邏輯修復主要針對全局索引流,根據全局索引流扇區鏈和索引節點的損壞可以分為兩種情況。當全局索引流扇區鏈損壞而索引節點完整時,修復原理同上,可以掃描出所有的索引節點所在的扇區,再根據其編號構造扇區鏈。當索引節點損壞而全局索引流扇區鏈完整時,可以參照正常的復合文檔修復目錄,因為在所有的Word、Excel、PowerPoint文件中,這些目錄的索引節點都是相對固定的;但是當索引節點是數據流時,其扇區鏈首扇區編號和大小是最關鍵的信息,直接影響修復內容的正確率,可以通過掃描扇區分配表識別所有的數據流,再根據經驗嘗試所有的可能性。
2.3 數據流內容修復
復合文檔的數據流內容和短流內容損壞,并沒有破壞復合文檔結構的完整性,一般都可以正常打開,但是復合文檔的內容已經破壞。以Word2003創建的Word文件為例,其中數據流“Data”中存儲圖片、視頻等數據,數據流“1Table”中存儲表格,數據流“CompObj”中存儲對象數據,數據流“WordDocument”中存儲文字內容,數據流“SummaryInformation”中存儲Word文檔的摘要信息,數據流“DocumentSummaryInformation”中存儲Word文檔的屬性信息。“Data”數據流存儲所有的圖片,每個圖片存儲在一個圖片結構體中,圖片結構體的前4個字節表示結構體大小,圖片結構體頭部偏移d1H處,就是該圖片實體文件的文件頭。假如word文件中有部分圖片文件損壞,可以按照這種方法導出所有的圖片文件,并對損壞的圖片文件進行進一步修復。
3 復合文檔數據修復下一步研究方向
對于文件格式和結構化數據的研究一直都是數據修復技術的重要發展方向之一,本文在國外有關開源項目研究的基礎上,對復合文檔的數據修復技術進行了探討,并利用該技術實現了復合文檔的物理修復、邏輯修復和內容修復。本文的研究還處于復合文檔數據修復技術研究的初步階段,下一步的研究重點是復合文檔的自動受損評估和修復機制。
參考文獻
[1]https://baike.baidu.com/item/復合文檔.
[2]http://sc.openoffice.org/compdocfileformat.pdf.
作者單位
徐州擷秀中學高三(3)班 江蘇省徐州市 221000