王 赟
(山西職業(yè)技術學院,山西 太原 030006)
復合文檔結構分析及文件頭重建
王 赟
(山西職業(yè)技術學院,山西 太原 030006)
復合文檔的數(shù)據(jù)恢復已成為現(xiàn)在數(shù)據(jù)恢復領域中一項重要內容,尤其以文件頭故障最為普遍。本文通過研究復合文檔的二進制結構,解決由于文件頭被破壞導致的文檔無法正常打開、無法使用等數(shù)據(jù)丟失問題,該方法在實際解決此類問題中效果良好,具有普遍應用價值。
復合文檔;文件頭;數(shù)據(jù)恢復
復合文檔是一種多元化的文檔,不僅包含傳統(tǒng)意義上的文本,還可包括聲音、圖片、表格、影音資料及其他內容[1]。它的廣泛應用極大地滿足了人們現(xiàn)代化辦公的需求。同時復合文檔故障及數(shù)據(jù)恢復成為普遍現(xiàn)象,也已逐漸成為數(shù)據(jù)恢復領域的一項重要內容。復合文檔故障中多數(shù)以文件頭故障最為主。解決復合文檔此類故障對復合文檔的數(shù)據(jù)恢復有著重要意義。
復合文檔的原理其實并不復雜,它與傳統(tǒng)的FAT 32文件存儲系統(tǒng)相似[2]。首先,它將數(shù)據(jù)信息劃分為許多小子集,即流(Streams)。而系統(tǒng)中的倉庫(Storages)就是儲存這些數(shù)據(jù)流的場所。在命名規(guī)則上,文件系統(tǒng)的命名規(guī)則與上述的流或倉庫類似,如果流的名字相同,那么只能存儲在不同的倉庫下。對于每一個復合文檔,都會有一個存儲的根倉庫(root storage)[1]。
1.2.1 扇區(qū)與扇區(qū)標識
如果將所有的數(shù)據(jù)信息子集(流)進一步劃分,可劃分為更小的子集,這些小的數(shù)據(jù)塊叫做數(shù)據(jù)的扇區(qū)(sectors)[3]。在這些數(shù)據(jù)扇區(qū)中可能涵蓋用戶的數(shù)據(jù)和控制數(shù)據(jù)信息。
1.2.2 扇區(qū)鏈與扇區(qū)標識鏈
1.3.1 復合文檔頭的內容
復合文檔頭的大小是512字節(jié),一般在文檔頭的位置。該結構如圖1所示。
圖1 復合文檔頭結構
1.3.2 字節(jié)順序(Byte Order)
文件數(shù)據(jù)的存儲方式一般為二進制存儲,目前主流方法主要有兩種,即Little-Endian和Big-Endian[5]。實際應用過程中一般僅采用前者:即依據(jù)地址的高低位分別存放文件的低位8字節(jié)和高位8字節(jié)。
1.3.3 扇區(qū)偏移量
根據(jù)復合文檔頭的信息可計算扇區(qū)偏移量(sector offset)[3],計算方法為sec_pos(SID)=512+SID·s_size=512+ SID·2 ssz。
扇區(qū)配置中最主要的內容是主扇區(qū)配置表(MSAT:master sector allocation table)[3]。主扇區(qū)配置表其實就是記錄所有用于存放扇區(qū)的信息列表,其本質上是一個SID數(shù)組。一般會在復合文檔頭指明MSAT的大小,又叫SID個數(shù),數(shù)值是等于存放扇區(qū)配置表的扇區(qū)數(shù)。扇區(qū)配置表(SAT:sector allocation table)主要內容包括內部控制流以及用戶流,特別需要注意的是,這個用戶流不包括短流,本質上SAT也是一個SID數(shù)組。一般SAT的大小與文檔中扇區(qū)的個數(shù)所一致。
1.5.1 短流存放流
?Katharina Boele - Woelki,Bente Braat and Ian Curry - Sumner(ed.),European Family Law in Action:Parental Responsibilities,Intersentia Publishers,2005,p.351.
當一個流的大小小于指定的值,常被叫做短流[1]。其實直接使用扇區(qū)存放數(shù)據(jù)的并不是短流,而是借由一種特殊的形式,即通過短流存放流(short-stream container stream)來存放數(shù)據(jù)[6]。該形式的存放流象與一般的用戶流類似:首先使用第一個扇區(qū),該扇區(qū)隸屬于目錄中的根倉庫入口(root storage entry)。接下來該數(shù)據(jù)流將占用的扇區(qū)分成不同的短扇區(qū),進一步存儲短流。短流存放流的SID鏈一般從扇區(qū)配置表中獲取。計算公式為:short_s_pos(SID) = SID·short_s_size = SID·2 sssz[1]。
1.5.2 短扇區(qū)配置表
類似于主扇區(qū)配置表,所有短流的SID鏈構成了一個SID數(shù)組,這個數(shù)組就是短扇區(qū)配置表(SSAT:short-sector allocation table)[5]。一般用于存放短扇區(qū)配置表的第一個扇區(qū)的SID在復合文件頭中指定,剩下的SID鏈均來源于SAT。
短扇區(qū)配置表的用法與扇區(qū)配置表是類似的,主要區(qū)別在于前者的SID鏈使用的是短扇區(qū)(short-sector)[3]。
目錄(directory)的構成部分是所有的目錄入口(directory entry),本質上是一種內部控制流。復合文檔的數(shù)據(jù)流和存儲的storage關聯(lián)著這些目錄入口。
復合文檔的文件頭就好比文件系統(tǒng)的DBR。DBR損壞分區(qū)無法打開,但真實數(shù)據(jù)還仍然存在,復合文檔也是這樣。簡單的復合文檔結構只有少量的SID鏈,并且連續(xù),修復難度也較低。復雜點的可能會有多個不連續(xù)的SID鏈,或者多個MSAT表,只要我們找到它的規(guī)律,順著它的SID鏈推斷下去就可以重建它的索引。下面我們以案例.doc文檔為例來簡述復合文檔頭重建過程。首先我們來解析案例文檔的文件頭(如圖2)。用winhex打開后將頁轉換成扇區(qū)進行分析,發(fā)現(xiàn)復合文檔的0號扇區(qū)就是第一個MSAT表,它除了記錄SAT項還記錄了SSAT的大小開始、目錄區(qū)域的開始以及指向下一個MSAT的索引。而之后的MSAT就只負責記錄SAT項了。
圖2 案例.DOC文件頭
其中文件頭的前兩行半是微軟設置的固定值。具體偏移量的含義見表1。
表1 復合文檔頭偏移位置解析
我們把這個文檔的文件頭清空,復制一個新文件頭過來然后手動填寫文件頭,主要涉及修改與計算幾個關鍵值的有:
1)SAT配置表的個數(shù);2)目錄的開始位置;3)SSAT的開始和大??;4)MSAT的開始和大??;5)依次寫SID的占用情況。
首先寫目錄的開始位置,向下搜索(ROOT)52 00 6F 00,偏移位置512=0。
如圖3所示,在47扇區(qū)找到了目錄的位置。
圖3 目錄區(qū)
接著找短流(SSAT),短流可以從根目錄中直接找到,如圖3中的31 00 00 00,就是短流的開始了。大小就是后面的80 00 00 00,等于128/64=2,只有兩項就是占用一個扇區(qū)。大小就是01了。然后我們再找標準流(SAT)搜索01 00 00 00,偏移位置512=0,向下搜索,在46扇區(qū)找到了標準扇區(qū)配置表。如圖4所示??吹竭@個扇區(qū)中有一個FD FF FF FF,可以確定這就是SAT了。在復合文檔中,-1,-2,-3,-4都有特定的含義。 如表2。
表2 特定值的含義
圖4 SAT配置表
最后一項SAT配置表中會有FD FF FF FF的值,表示這是一個SAT配置表的結束。并且有幾個FD FF FF FF就代表有幾個SAT配置表。在最后一個FD FF FF FF的后面就是根目錄的位置(此處根目錄就是2F 00 00 00)。本案例中只有一個FD FF FF FF,那就是只有一項SAT配置表。0號扇區(qū)可以存放109個SAT配置表(也就是SID),現(xiàn)在只有一個足夠存放,就不需要再分配MSAT了,所以MSAT的開始FE FF FF FF,大小00 00 00 00。
關鍵值都計算出來后總結一下算好的值,我們就可以手動填寫文件頭信息。
1)SAT配置表的個數(shù)(1);2)目錄的開始位置(47-1=46);3)SSAT的開始(49-1=48)和大小(1);4)MSAT的開始(MSAT主扇區(qū)配置表只有一個寫FEFFFFFF)和大小(0);5)依次寫SID的占用情況(SAT配置表只有一個,在46扇區(qū)填寫46-1=45),修復后文件頭如圖5所示,保存文件,修復完成。
圖5 修復后文件頭
本文通過分析復合文檔的二進制結構,提出了手動計算與修復文件頭的方法,此方法對解決由文件頭被破壞導致的文檔無法正常打開、無法使用等問題有效果良好,具有普遍應用價值。
[1] 沙晶,錢偉.微軟復合文檔結構分析及文件恢復[J].中國司法鑒定,2011(6):59-61.
[2] 楊德明.FAT32下有效數(shù)據(jù)快速恢復方法[J].計算機應用,2012,32(9):2500-2503.
[3] RENTZ DANIEL. Microsoft Compound Document File Format[M].2004.
[4] 王維雄.基于介質存儲結構的數(shù)據(jù)恢復技術研究[D].西安:西安電子科技大學,2010.
[5] 劉偉.數(shù)據(jù)恢復技術深度揭秘[M].北京:電子工業(yè)出版社,2010.
[6] 趙振洲,趙永峰.Word文檔結構分析及恢復[J].安徽電子信息職業(yè)技術學院學報,2013(2):1-3.
CompositeDocumentStructureAnalysisandFileHeadReconstruction
Wang Yun
(ShanxiPolytechnicCollege,TaiyuanShanxi030006,China)
Data recovery of complex documents has become an important content in the field of data recovery, especially the file head fault is the most common. This paper, through the binary structures of composite document, solves the problem of data loss, such as the document cannot be opened normally and the data cannot be used because of the destruction of the file head. The method to solve the problem in the actual effect is good and has the widespread application value.
compound document;file header;data recovery
2017-10-25
王 赟(1982- ),男,山西太原人,講師,碩士,主要研究方向:計算機應用、數(shù)據(jù)安全及數(shù)據(jù)恢復。
1674- 4578(2017)06- 0041- 03
TP309.3
A