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