手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 (2010-11-02 10:51:25)
標籤: 

複合文檔

 

文件頭

 

it

 

    最近學習了複合文檔的格式,在修復複合文檔頭方面做了不少實踐,有了一些心得,經過梳理,做了個例子,把思路和過程介紹給大家,希望能解決你的不時之需!

   例子中用的文件如下圖:名爲“實驗文檔”,是個空文檔,裏面沒有內容,看屬性,10,752字節,剛好21扇區,複合文檔的文件大小一定是512字節的整數倍,這跟複合文檔的設計有關係。EXCEL,PPT等文件也屬於複合文檔,也符合這樣的特點。

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

 

  後來我又想,可能有網友會對修復後的文件產生懷疑,沒有內容的文件可能說明不了問題,所以我在文件中輸入了很短的文本內容!如下圖:

 

 手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

  

    實驗文檔是一個正常的文件,另外我用Winhex把該文件的文件頭(前面512字節)全部寫成了0,最徹底的破壞,保存爲“損壞的實驗文檔”,大家可以用現有的修復軟件試一下,能不能修復,我用EasyRecovery Professional沒有修復成功!其它的軟件沒有試過!

 

   下面,就請大家跟我一起看,如何把“損壞的實驗文檔”修復成功!

   先介紹用到的工具軟件Winhex,功能很強大,可以用二進制的方式打開文件,並進行編輯,保存!該軟件不僅可以打開文件,還可以打開硬盤,對硬盤數據進行編輯,搜索功能什分強大,用起來非常方便,同時支持腳本,提供API函數。軟件界面如下圖:

 

 手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

    用該軟件打開“實驗文檔”和“損壞的實驗文檔”,可以對比一下前512字節,爲了便於操作,我們需要將文件解釋爲硬盤,讓軟件以扇區的方式顯示文件內容,看起來直觀些!

兩個文件的在軟件裏顯示如下圖:

 

 

 手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

    可見,“損壞的實驗文檔”前面的512字節全是0,文件頭被全部破壞,文件無法用office打開!

 

複合文檔文件頭的定義:

Offset   Size      Contents                                                 

0           8           複合文檔文件標識:D0H CFH 11H E0H A1H B1H 1AH E1H

8           16         此文件的唯一標識(不重要, 可全部爲0)

24         2           文件格式修訂號 (一般爲003EH)

26         2           文件格式版本號(一般爲0003H)

28         2           字節順序規則標識(見3.2)::FEH FFH = Little-Endian

FFH FEH = Big-Endian

30         2           複合文檔中sector的大小(ssz),以2的冪形式存儲, sector實際大小

爲s_size = 2ssz 字節(一般爲9即512字節, 最小值爲7即128字節)

32         2           short-sector的大小(見5.1),以2的冪形式存儲, short-sector實際大

              小爲s_s_size = 2sssz 字節(一般爲6即64字節,最大爲sector的大小)

34         10         Not used

44         4           用於存放扇區配置表(SAT)的sector總數

48         4           用於存放目錄流的第一個sector的SID (見6)

52         4           Not used

56         4           標準流的最小大小(一般爲4096 bytes), 小於此值的流即爲短流。

60         4           用於存放短扇區配置表(SSAT)的第一個sector的SID (見5.2),

或爲–2 (End Of Chain SID)如不存在。

64         4           用於存放短扇區配置表(SSAT)的sector總數

68         4           用於存放主扇區配置表(MSAT)的第一個sector的SID (見4.1),

或爲–2 (End Of Chain SID) 若無附加的sectors。

72         4           用於存放主扇區配置表(MSAT)的sector總數

76         436       存放主扇區配置表(MSAT)的第一部分,包含109個SID。

                                                                                 

 

看起來有些複雜!

修復文件頭的數據只需要計算並填寫幾項,一是扇區分配表(SAT)所佔的扇區數,

二是目錄起始扇區號,三是短流扇區分配表的起始扇區號及佔用扇區數,四是主扇區分配表的起始扇區號及中用扇區數,五是扇區分配表的扇區號,其它內容所有的複合文檔都是一樣的,從正常文件中拷過來就行。

   以上所說五項內容需要計算,現在介紹方法

一:確定目錄起始扇區號

打開“損壞的實驗文檔”,將文件解釋爲硬盤,搜索字符串“ROOT”(unicode)如圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

搜索到結果,軟件自動定位到字符串的位置,如圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

 

看狀態欄:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

該字符串位置是43扇區,第一個值確定了,目錄起始扇區是43,第一項完成。由於複合文檔在扇區編號時不包括文件頭,0扇區從512字節處開始,所以目錄起始扇區應該是42,下面就不再進行說明。

二:確定扇區分配表(SAT)

我們需要通過扇區的內容來確定某個扇區是不是扇區分配表(SAT)

該文件總共有47個扇區,文件頭佔一個扇區,剩下46扇區,所以,扇區分配表中的值應該大於0小於等於46,另外還有一些特殊的值,值FEFFFFFF表示扇區鏈結束,值FDFFFFFF表示該扇區被SAT佔用,值FFFFFFFF表示該扇區爲空閒。

看文件的1扇區:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

數據如下:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

該扇區是不是扇區分配表(SAT)呢?

分析裏面的數據(4個字節一個項,因爲扇區編號是用4個字節來存放的),第一項是ECA5C100,低位在前高位在後,換過來就是00C1A5EC,換成十進制爲12690924,文件最大爲46扇區,因此該扇區不可能是扇區分配表(SAT)。

看第2扇區,

 

 手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

第三項00007A03不滿足條件,因此不是扇區分配表。

重複該過程,1-41扇區均不符合條件,分析到42扇區,看該扇區數據:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

  第一項0100000,第二項02000000,第三項03000000,等等,該扇區內的所有項的值要麼小於46,要麼是FEFFFFFF,要麼是FDFFFFFF,要麼是FFFFFFFF,符合扇區分配表的特點!記下該扇區號。

繼續分析剩下的扇區,直到結束!在本例中,文件總共47扇區大小,而每個扇區512字節,4個字節放一個扇區編號,因此,一個扇區分配表可以存放128個扇區編號,所以說該文件只有一個扇區用來存放扇區分配表(SAT)。第二項完成。

第三:確定主扇區分配表(MSAT)的起始扇區號

主扇區分配表(MSAT)中存放的是扇區分配表(SAT)所在的扇區號,本例中,扇區分配表(SAT)只有一個,根據複合文檔的格式定義,文件頭中可以存放109項SAT值,也就是說,只要文件的扇區分配表不大於109個,就不需要主扇區分配表,嚴格的說是不需要額外的主扇區分配表,因爲文件頭就可以容納下了,主扇區分配表(MSAT)是在SAT多於109項時,剩下的值用指定的扇區來記錄!根據定義,無額外主扇區分配表(MSAT)時,主扇區分配表的起始扇區號爲-2,十六進制表示爲FEFFFFFF,它佔用的扇區數爲0,第三項完成

第四:確定短流扇區分配表的起始扇區號及佔用的扇區數

短流扇區分配表(SSAT)是複合文檔中的另一個概念,短流數據用短流扇區來存放,短流數據存放的位置通過短流扇區分配表來確定。一個文件有沒有短流數據可以查看目錄,如圖:

 手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

 

  根據複合文檔定義,目錄的第一表項0X74處的4個字節表示的是短流的起始扇區(十六進制2D000000值爲45),0X48處的4個字節爲短流的大小(十六進制800000值爲128)。而短流扇區分配表(SSAT)一般位於短流起始扇區的前一個扇區,所以短流扇區分配表的起始扇區爲45-1=44扇區,它只佔用一個扇區。44扇區的內容如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

第四項完成。

第五:確定文件頭中的扇區分配表編號

本例子只有一個扇區分配表(SAT),因此文件頭中只用填寫一個值。

 

到此,需要重建文件頭的所有值基本都確定了,下面的工作就是改寫文件頭。

定位到0X2C處,2C-2F爲扇區分配表(SAT)所佔用的扇區數,本例佔用1個扇區,轉換成十六進制爲(01000000,低位在前高位在後),操作完成後如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

定位到0X30處,4字節表示目錄所在的扇區編號,經前面的計算,目錄所在的扇區編號爲42,換成十六進制爲2A000000,把該值寫到此處,操作完成後如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

定位到0X3C處,4字節表示短流扇區分配表(SSAT)的起始扇區號,本例短流扇區爲44,十六進制值爲2C000000,改寫後,如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

定位到0X40,4字節表示短流扇區分配表佔用的扇區數,本例佔用1個扇區,應填寫01000000,操作完成後如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

定位到0X44處,4字節表示MSAT起始扇區編號,本例沒有MSAT,填寫-2,十六進制值爲FEFFFFFF,定位到0X48處,4字節表示MSAT佔用的扇區數,本例爲0,填寫00000000

操作完成後如下圖:

 

 手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

定位到0X4C處,此處後的每4個字節填寫一項SAT扇區編號,本例只有一個SAT,位置爲41,轉換成十六進制爲29000000,剩下的填寫成FFFFFFFF,或者不填寫也行!操作完成後如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

到此,所有艱苦的工作都完成了,但是文件頭的其它數據還沒有建立,不過這些數據都是固定的,比如,文件頭的前8個字節所有複合文檔都是一樣的,不一樣的只有前面所說的那些項,因此,這些數據可以從別的文件中拷過來!填寫完所有數據後,如下圖:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

 

保存對文件的修改:

手工重建複合文檔(.doc;xls,ppt)文件頭,修復文件全過程

 

打開“損壞的實驗文檔”,能夠正常打開,並且內容正確!

Office中的WORD,EXCEL,PPT都是複合文檔,都可以按這個方法操作

發佈了7 篇原創文章 · 獲贊 11 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章