Excel 二進制文件結(jié)構(gòu)分析 1_第1頁
Excel 二進制文件結(jié)構(gòu)分析 1_第2頁
Excel 二進制文件結(jié)構(gòu)分析 1_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Excel 二進制文件結(jié)構(gòu)分析 1Excel二進制文件結(jié)構(gòu)分析12010-07-11 08:36我對Excel文件結(jié)構(gòu)的學(xué)習(xí)研究,也是最近才開始。只是好奇,拿出改游戲的勁頭與手段,一點點的啃。發(fā)覺似乎有不少人也對該文件格式感興趣。只是很可惜,我找不到能力足夠、并且愿意一起共享心得體會、共同學(xué)習(xí)的同道。一人獨行,自然倍感寂寞,興趣的火花也就時燃時滅;再加上我人比較懶,工作忙,也難以抵御外界的種種誘惑,比如娛樂、游戲、小說等等,所以,火花也就滅的時候居多。這里就先請讀者原諒,打聲招呼,如果這篇文章寫得太慢,或者不能最終完成,千萬不要罵我。當然這是閑話了。另外,因為沒有正式的資料,既然是研究,下面的

2、內(nèi)容也可能全盤皆錯。有早知早覺的大俠,想批,請隨便拿磚頭砸吧!第一章前言一、前人的研究能夠找到的前人研究資料不多。MSDN online里有部分,可惜組織得很零散,微軟也刪除了重要內(nèi)容。有人說MS Office Develop附帶的MSDN Library中有介紹,可是我沒有這個東東,也無從知道講了什么東西。如果有人有這些東西,不知是否方便發(fā)給我看看。先謝謝了!不過,我還是按照我所知道的來寫吧!1996年,德國人martin Schwartz寫了一篇語焉不詳?shù)?quot;Hacking Guide",他研究了Word 6的存盤文件,文章里他叫這種文件結(jié)構(gòu)為Laola。他認為Laola

3、是一個文件系統(tǒng),包含子目錄與子文件。照搬到Excel中,根據(jù)這種思路,Excel里的workbook、或VBA,都應(yīng)該是一個子文件,微軟好象叫它們OLE2 Storage,也就是說,一個Excel文件,包含了一個目錄結(jié)構(gòu)和若干個子文件,每個子文件都是一個OLE2 Storage。我們下面就沿用martin Schwartz定義的Laola的概念。不過,martin Schwartz最大的貢獻是用Perl 4寫了一個Package(類似于VBA里的類),提供了讀取Laola文件系統(tǒng)的方法。(我正在用VBA重寫這個Package,并增加寫模塊,工作忙,斷斷續(xù)續(xù),所以還沒寫完)。1997年的Exce

4、l Digest里發(fā)表了一篇文章,作者是Guy Boertje,內(nèi)容是一個讀取Workbook里用戶定義數(shù)字格式的VBA。他用的辦法是直接在Excel文件里直接搜索Workbook BOF記錄(Beginning of File,標識是Hex 0809),找到文件的起始偏移。關(guān)于這樣的VBA程序,大家可以參考我的文章(讀取Excel工作表的背景圖片),發(fā)表在壇子里。因為當時還不知道Laola的概念,所以讀出來的圖片時對時錯。二、分析Excel文件二進制結(jié)構(gòu)的基本工具為了簡化,我們就使用三個基本工具,也大致夠用了。一個是UltraEdit 32,可以16進制的形式編輯二進制文件。另外一個工具是W

5、inHex,這個工具的主要特點是可以進行二進制比較,也可以直接編輯機器內(nèi)存中的二進制數(shù)據(jù),實在是改游戲、做memory dump的利器。再一個工具就是Windows中的計算器,我們可以用他來完成十進制-十六進制-和二進制的轉(zhuǎn)換。好,有了這些工具,我們就可以開始。另外,講三個基本常識:1、數(shù)字的表示方式:十進制:我們就用一般的表示方式,比如"1234"。十六進制:表示為"Hex 1234"或"0x1234"。二進制:表示為"Bin 1001"。2、數(shù)字的存放順序數(shù)字在Intel的機器,二進制文件中是順序存放的,比如H

6、ex 0809,就表示為0x09 0x08,高位在后,低位在前。3、基本數(shù)據(jù)類型我們主要涉及到三種數(shù)據(jù)類型,字節(jié)(Byte)、字(Word,占兩個字節(jié))和雙字(Dword,四個字節(jié)),Word和Dword就相當于無符號的整型和無符號長整型。第二章Laola結(jié)構(gòu)這第二章我們先研究Laola結(jié)構(gòu),第三章學(xué)習(xí)Workbook的結(jié)構(gòu),也就是xiaog貼出來的東西,第四章看看VBA,第五章就是Excel文件中根據(jù)Laola概念分解出來的,其它有趣的東東;第六章,應(yīng)用工具程序示例,我就想把一些讀取Excel的VBA程序、以及通過ADO方式的VBA程序和C+程序歸為這一章。如果沒意見,我們繼續(xù)。Excel文

7、件中的第一個512字節(jié)塊(0x200),是Laola的初始塊,從偏移0x00到0x1FF。我們先拿80字節(jié)出來學(xué)習(xí)一下。0x00000h:D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 0x00010h:00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 0x00020h:06 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0x00030h:19 00 00 00 00 00 00 00 00 10 00 00 FE FF FF FF 0x00040h:00

8、00 00 00 FE FF FF FF 00 00 00 00 18 00 00 00偏移00開始是Laola標識,"D0 CF 11 E0 A1 B1 1A E1",表示這是一個Laola文件系統(tǒng)。偏移0x18是Word,可能是小版本號,偏移0x1a是Word,可能是版本號,一般為3。偏移0x 1e是Word,表示塊的大小,固定為9,是2的冪次(29為512字節(jié))偏移0x 20表示小文件塊的大小,26為64字節(jié)。好,作了一個簡單的示例,我們再講講一些Laola中的概念。1、初始塊就是Excel文件中的前512個字節(jié)。這個塊中數(shù)據(jù)結(jié)構(gòu)的定義表我們放在本章末尾列出,在本章的

9、各個部分我們將逐步分析這個初始塊的含義。2、大文件塊文件表大文件塊文件表是存放文件塊索引號的,比如,0x 0003200:01 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 0x 0003210:FE FF FF FF 06 00 00 00 07 00 00 00 FE FF FF FF 0x 0003220:09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00 0x 0003230:0D 00 00 00 0E 00 00 00 0F 00 00 00 FE FF FF FF 0x 0003240:11

10、00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 0x 0003250:15 00 00 00 16 00 00 00 17 00 00 00 FE FF FF FF 0x 0003260:FD FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF索引號從0開始編號,一個DWORD表示一個索引。索引的取值范圍:0xFFFFFFFD:特別塊0xFFFFFFFE:索引鏈結(jié)束標志0xFFFFFFFF:未使用0文件塊總數(shù):索引鏈中的下一個元素大文件塊文件表中是按索引鏈的方式排列的,通過索引鏈我們可以將在Excel文件中若干個不連續(xù)排放的大文件塊,組織起來。比如,我們先建立一個空的大文件塊列表"",我們從偏移0x 0003200+0*4(0為索引)中取DWORD,值為1,所以把0和1放入大文件塊列表中,為0,1;偏

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論