徐健
摘? 要: MAC產(chǎn)品應(yīng)用廣泛,對MAC OS的HFS+文件系統(tǒng)的解析和數(shù)據(jù)恢復(fù)的需求也逐漸增加。借助存儲介質(zhì)底層數(shù)據(jù)編輯軟件Winhex,詳細(xì)分析HFS+文件系統(tǒng)文件存儲的基本原理,通過實例介紹對所需要文件的提取。
關(guān)鍵詞: Winhex; HFS+; 數(shù)據(jù)恢復(fù); 實例研究
中圖分類號:TP309? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ?文章編號:1006-8228(2019)08-53-04
Abstract: MAC products are widely used, and the demand for MAC OS HFS+ file system parsing and data recovery is increasing. This paper analyzes the basic principle of HFS+ file system file storage in detail with the help of the Winhex, the underlying data editing software of storage medium, and the extraction of required documents is described by a case.
Key words: Winhex; HFS+; data recovery; case study
0 引言
Winhex是由X-Ways軟件技術(shù)公司開發(fā)的專業(yè)磁盤編輯工具,win表示W(wǎng)indows,hex表示十六進(jìn)制,即Windows下運行的十六進(jìn)制編輯器,通過其完善的分區(qū)管理功能和文件管理功能,可以自動分析分區(qū)表鏈和文件鏈簇,可以執(zhí)行不同級別的備份工作,它的編輯功能可以編輯物理磁盤或邏輯磁盤的任何扇區(qū),內(nèi)存編輯器可以直接編輯內(nèi)存,支持Windows、UNIX、Linux、MAC等各種系統(tǒng)下的磁盤分區(qū)結(jié)構(gòu)及文件系統(tǒng)結(jié)構(gòu)的解析[1]。
本文以HFS+文件系統(tǒng)為例,分析其文件系統(tǒng)的結(jié)構(gòu),并通過實例研究的方法找到所需要的文件并準(zhǔn)確提取。
1 HFS+文件系統(tǒng)結(jié)構(gòu)分析
HFS+文件系統(tǒng)是目前的Apple電腦中默認(rèn)的最常用的文件系統(tǒng),由卷頭,5種特殊的“元文件”--分別是分配文件(Allocation File)、盤區(qū)溢出文件(Extents Overflow file)、編錄文件(Catalog File)、 屬性文件(Attributes File)、啟動文件(Startup File)以及用戶數(shù)據(jù)區(qū)組成。這5個元文件是用于存儲文件系統(tǒng)結(jié)構(gòu)的數(shù)據(jù)和屬性,它們的起始地址和大小在文件系統(tǒng)的卷頭中描述[2]。HFS+文件系統(tǒng)總體結(jié)構(gòu)如圖1所示。
HFS+文件系統(tǒng)的卷頭位于宗卷的2號扇區(qū)(0、1號扇區(qū)保留),占用一個扇區(qū),其作用類似于FAT文件系統(tǒng)和NTFS文件系統(tǒng)中的DBR,記錄構(gòu)建 HFS+文件系統(tǒng)的基本信息,有塊(類似于NTFS文件系統(tǒng)的簇)、每塊字節(jié)數(shù)、日志位置信息以及一些重要的元文件的位置信息[3]。
HFS+文件系統(tǒng)用B-樹結(jié)構(gòu)組織數(shù)據(jù),B-樹是一種可以快速搜索、 插入和刪除的結(jié)構(gòu),由節(jié)點構(gòu)成,分為頭節(jié)點、位圖節(jié)點、索引節(jié)點、葉節(jié)點四種類型,其中索引節(jié)點和葉節(jié)點中包含關(guān)鍵字,對B-樹進(jìn)行的所有操作最終都是針對索引節(jié)點和葉節(jié)點以及存儲在它們中的關(guān)鍵字進(jìn)行的。
關(guān)鍵字在索引節(jié)點和葉節(jié)點有定的排序規(guī)則[4],具體規(guī)則如下:
⑴ 關(guān)鍵字必須以升序方式排列在節(jié)點中;
⑵ 同一個層次中的所有節(jié)點必須由“下一個節(jié)點號”和“上一個節(jié)點號”兩個參數(shù)鏈接起來;
⑶ 關(guān)鍵字值最小的節(jié)點必須位于鏈表的第一位,且“上一個節(jié)點號”參數(shù)值為0;
⑷ 關(guān)鍵字值最大的節(jié)點必須位于鏈表的最后,且“下一個節(jié)點號”參數(shù)值為0;
⑸ 對于任何一個節(jié)點,其中存放的所有關(guān)鍵字值必須小于鏈表中下一個節(jié)點中存放的關(guān)鍵字值,且大于鏈表中上一個節(jié)點中存放的關(guān)鍵字值。
對關(guān)鍵字采用上述這種排列規(guī)則可以快速地在B-樹中搜索到需要的關(guān)鍵字,以便訪問與關(guān)鍵字相關(guān)聯(lián)的數(shù)據(jù)。
下面用個簡單的例子描述上述規(guī)則,在該例子中,我們用數(shù)字作為關(guān)鍵字, 如圖2所示。
從圖2來看,在訪問數(shù)據(jù)的時候,由頭節(jié)點定位到根節(jié)點,從根節(jié)點的第一個記錄開始,在關(guān)鍵字值小于等于要搜索的關(guān)鍵字值的記錄范圍內(nèi)尋找更大的關(guān)鍵字值記錄。
搜索的過程可以延伸到孩子節(jié)點,其中索引節(jié)點是典型的孩子節(jié)點,搜索往往需重復(fù)進(jìn)行,一直延伸到一個葉節(jié)點[5]。如果葉節(jié)點中的關(guān)鍵字值與要搜索的關(guān)鍵字值相等,則該關(guān)鍵字所關(guān)聯(lián)的就是要訪問的數(shù)據(jù)的相關(guān)信息。如果葉節(jié)點中的關(guān)鍵字值與要搜索的關(guān)鍵字值不相等,則說明要訪問的數(shù)據(jù)不在這個B-樹中,需要到其他B-樹中搜索。
2 HFS+文件系統(tǒng)文件提取實驗
為了能更好地說明HFS+文件系統(tǒng)的結(jié)構(gòu)及其數(shù)據(jù)存儲原理,準(zhǔn)備一個U盤,通過MAC系統(tǒng)的磁盤工具對其格式化成Mac OS文件系統(tǒng),在其卷宗根目錄下放置四個文件夾和88個txt文件,實驗要求準(zhǔn)確定位80.txt文件并將其提取出來(所需定位及提取的文件可以修改,本文以80.txt為例)。在Windows系統(tǒng)下不能夠讀取Apple系統(tǒng)的分區(qū),通過運行Winhex程序來分析此U盤的文件系統(tǒng)并提取指定文件。
根據(jù)HFS+文件系統(tǒng)的結(jié)構(gòu),我們可以通過以下步驟來手工提取80.txt,注意Mac OS系統(tǒng)使用Big-Endian字節(jié)序[6]。
⑴ 定位卷頭。通過該卷宗所在硬盤的Apple分區(qū)映射表定位到卷宗的開始位置在409640號扇區(qū),而卷頭位于卷宗的第三個扇區(qū),也就是409642號扇區(qū),根據(jù)偏移地址0x28~0x2B得知該分區(qū)的每塊字節(jié)數(shù)為4096。