其中先要將word文檔解析成xml文檔,這裏需要base64方法,具體介紹如下:
Base64是一種基於64個可打印字符來表示二進制數據的表示方法。由於2的6次方等於64,所以每6個位元爲一個單元,對應某個可打印字符。三個字節有24個位元,對應於4個Base64單元,即3個字節需要用4個可打印字符來表示。它可用來作爲電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數字0-9 ,這樣共有62個字符,此外兩個可打印符號在不同的系統中而不同。
Base64常用於在通常處理文本數據的場合,表示、傳輸、存儲一些二進制數據。包括MIME的email,email via MIME, 在XML中存儲複雜數據.
然後需要一個xml解析庫:
SAX接口解析XML文件的基本原理爲:首先獲得一個實現了SAX接口的解析器,這個解析器通常是由第三方軟件公司提供的;然後自己寫一個符合SAX標準的處理器類,並且把這個類註冊到剛剛做好的解析器;解析XML文件;解析器會把XML文件作爲一個文件流讀出來,然後再把文件流轉換成一個事件流,這個事件流中的內容包括“文檔開始”、“文檔結束”、“元素開始”、“元素結束”等等標誌文件狀態的事件;根據事件調用註冊到解析器裏的處理器裏面的相應的方法;在解析器進行XML文件的解析的同時,應用程序可以調用解析器提供的方法,對解析器的行爲進行控制或獲取解析器的狀態。
微軟開放了word二進制格式方便大家對我們平時頻繁接觸的doc ppt和execl文檔的格式的瞭解。但其複雜的設計還是讓人很難徹底搞清楚。縱觀整個文件,簡單說,是一個複合文件結構CFB,類似我們常見的文件系統,簡單的說它就是將一個簡化的文件系統在一個文件中表示。裏面有目錄storage和文件stream的概念。
每個文件都有一個Header,一般有512字節。然後至少有一個用於分配除頭外的文件其他部分的空間的FAT,在FAT中指出文件中所有結構的位置及大小,如FAT本身,Mini FAT, DirectoryEntry FAT等。整個文件以FAT爲單元,FAT,Mini FAT, DirectoryEntry FAT都是FAT Sectors。此外,文件中還有mini FAT及其他Stream,一般在DirectoryEntry FAT中給出其Sector位置。
word二進制格式最複雜的該數位於WordDocument中的FIB頭了,其中含有多層子域,有的域又有很多子域,真的不好記明白。除其之外,就是各個具體stream的詳細結構了,WordDocument以FIB開頭,後面還有文件中文本值等許多域;SummaryInformation和DocumentSummaryInformation兩個流也有其相應的結構格式,Table流也是。
一般的,上述特殊流和特定FAT在二進制文件中的佈局爲(文件中有內容時):
Header : WordDocument : 1Table : SummaryInformation : DocumentSummaryInformation :
FAT : DirectoryEntry FAT : Mini FAT : Mini Stream
金山的WPS系列文檔沒有公開其二進制格式,分析比較麻煩。通過觀察其二進制,並結合Word的格式,基本上可以有一個大體的框架。其和word一樣是採用CFB結構的,但其佈局一般爲:
Header : FAT : DirectoryEntry FAT : Mini FAT:SummaryInformation :
DocumentSummaryInformation :
WordDocument DirectoryEntry FAT2:DirectoryEntry FAT :0Table : DATA Stream
Word DOC方面的幾個漏洞分析:
MS08072 Microsoft Word Malformed FIB Arbitrary Free Vulnerability 一文給出詳細說明(MS08−072)
MS06027 Fuzzing in Word溢出分析和利用講得不錯
另外,關於文件格式解析的方法,How to crack a Binary File Format一文說明其中的注意點和基本方法
微軟在2009年7月份,發佈了一個word二進制查看工具Offvis 挺好用,可以查看word文檔的結構
010 Editor工具也可以用來查看並修改二進制文件,蠻強大的,還能支持插件,腳本。功能比較齊全。