Office文檔修復介紹之:laola文件格式介紹

Office文檔是目前應用最普遍的文檔格式,但不少人都沒有爲office文件創建完善的安全防禦措施,也沒有養成進行文件備份的良好習慣,因此一旦出現操做失誤、病毒破壞、系統故障等狀況,就有可能形成當前正在編輯的word、excel文檔和access數據庫等受到損壞,下次沒法打開。那麼一旦遇到這類文檔被破壞或者丟失咱們是否就一籌莫展了呢,固然不是,咱們能夠藉助專業知識和小工具進行受損文檔修復。linux

未公開的office文檔存儲格式祕密

Office文檔格式一直以來都是微軟公司的技術機密,至今不曾向外界公佈。那麼咱們如今要作的是修復受損的文檔,若是真的對office文件數據結構一無所知的話那麼最終也只能止步於「傻瓜式」的文檔修復工具水平。想要提升本身的文檔修復水平,在最大程度上挽救丟失的數據,那就必須對office文檔二進制格式有所瞭解,下面咱們以word文檔爲例子,給你們介紹word文件內部結構和office文檔格式的部分祕密。爲何說是部分呢,由於所有的office文檔格式可能只有微軟本身才知道了。算法

Laola的文件格式

Laola文件格式是微軟複合文檔結構的二進制格式。按照微軟的命名來講,這種文檔結構應該叫作「複合文檔二進制結構(Compound File Binary Format)」。但微軟官方並無公開關於這種文檔結構的相關內容,大量***經過對word、Excel文件的逆向分析以及辦公軟件的跟蹤,基本上破解了「複合文檔二進制結構」的組成和算法。但這些並非微軟的官方文檔,有存在差別的可能性,而且微軟有權隨時改變這一算法結構,所以人們有必要使用另外的名稱「laola」來描述這一結構。數據庫

複合文檔的起源

國內最先分析「複合文檔二進制結構」的是反宏病毒技術人員,但國際上在宏病毒沒出現前針對微軟複合文檔二進制結構的分析就已經開始了。進行這種分析的根本目的是爲了在其餘操做系統下(這裏主要指的是linux和其餘開源操做系統下)可以開發出可讀寫微軟辦公軟件使用的文檔。
「複合文檔」是微軟引入的一種在文件內部存放結構化信息的方法。例如:咱們寫一篇文章,若是這篇文章沒有任何格式信息和嵌入圖像,那麼使用沒有任何結構的文本格式就能夠了,可是一篇完善的文章裏可能包含段落、格式、字體、顏色、插圖等,這樣簡單的無格式文本就沒法知足須要了。因此須要在文件的內部存放不少結構,包括段落的文字、字體、甚至段落自己信息等。針對這種需求、以及電子數據表、演示製做等軟件的須要,微軟開發了一種「文件中的文件系統」,也就是「複合文檔」結構。安全

複合文檔結構介紹

在複合文檔中,能夠有不少目錄,在每一個目錄下能夠有子目錄,目錄和子目錄包含了「存儲」,一個存儲至關於磁盤上的一個文件,整個複合文檔就造成了一個相似於磁盤上的目錄和文件所組成的樹狀結構。若是在視窗環境下使用複合路徑,能夠利用操做系統提供的功能對複合文件進行讀寫。
與硬盤劃分扇區的方法相似,全部使用laola文件格式的文件由512 B的數據塊組成(有興趣的能夠驗證一下,全部的word、excel或其餘office文件大小都是512B的倍數),數據塊的序號從-1開始,以下圖所示。
Office文檔修復介紹之:laola文件格式介紹
序號爲-1的塊是整個文件的文件頭塊,存放了複合文件的一些總體信息,結構見下圖:
Office文檔修復介紹之:laola文件格式介紹
在512 B的數據塊基礎上,複合文件中包括了兩種最基本的結構:
第一種是由512 B的大塊鏈接起來的大塊鏈。若是對以文件分配表「FAT」爲基礎的文件系統熟悉的話,能夠很容易的理解大塊鏈的概念,只要知道一個大塊鏈的開始塊序號,經過大塊映像圖就能夠找到這一條大塊鏈的全部內容。一個典型的大塊映像圖以下圖所示:
Office文檔修復介紹之:laola文件格式介紹
從圖中能夠看到,若是一個大塊鏈的開始序號是0的話(該處的內容是5),那麼這個大塊鏈包括:序號爲0的數據塊、序號爲5的數據塊(該處的內容是7)、序號爲7的數據塊(該處的內容是9)、序號爲9的數據塊(該處的內容是0b)、序號爲0b的數據塊(該處的內容是-1,表示這是該鏈的最後一個數據塊)。
對於比較小的結構,若是以512 B爲單位的話會形成比較大的空間浪費,因此專門使用一個大塊鏈來存放比較小的數據塊,小於4096 B的數據結構使用小塊鏈來表示,小塊鏈的組成和尋址方式和大塊鏈很是相似,惟一不一樣的是小塊鏈裏面對小塊的尋址不是在整個複合文件範圍內的,而是在某一個特定的大塊鏈範圍內,這個大塊鏈的開始塊序號會在之後的更新中敘述。
目錄鏈:是複合文件最基本的數據鏈,描述了複合文件的目錄結構信息。目錄鏈的開始在頭塊中能夠找到。目錄鏈中包括了複合文件的目錄信息,每個目錄項的大小是128 B,因此 目錄鏈的一個塊能夠包括4個目錄項,第一個目錄項是根目錄項,名字叫「根入口(Root Entry)」,任何複合文件裏這都是第一個目錄項。一個典型的根目錄項以下圖所示:
Office文檔修復介紹之:laola文件格式介紹
下面是目錄項的結構說明:
Office文檔修復介紹之:laola文件格式介紹
因爲上面的數據結構並非來源於微軟的官方文檔,其中包含了不少猜想的成分,因此不少內容暫時沒法判斷其意義,有些結構說明可能與微軟原意不一樣,不過咱們利用這個結構對微軟的大量文檔進行分析,至今還沒有發現有明顯錯誤。
在基本的laola文件結構基礎上,字處理文檔、電子數據表文檔具備不一樣的內部目錄結構,下面介紹一個典型word文件內部目錄結構
a.doc
—1 Table:一些數據表
—CompObj:通用的對象
—ObjectPool:對象池,是一個目錄,包括word文檔中嵌入的圖像、聲音或者其餘對象
—WordDocument:實際的文字和格式化信息就存放在這裏
—SummaryInformation:摘要信息
—DocumentSummaryInformation:其餘的摘要信息數據結構

相關文章
相關標籤/搜索