国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FAT32的文件隱藏方法及在Linux上的實現(xiàn)

2012-07-13 06:28江祖敏
電子設計工程 2012年13期
關鍵詞:表項磁盤結構

袁 杰,江祖敏

(武漢大學 計算機學院,湖北 武漢 430072)

為了使個人的重要文件對其他人具有透明、不可見的效果,人們往往使用文件隱藏來達到目的。針對文件隱藏,一個重要的技術衡量指標是文件的隱藏強度,即順利獲取被隱藏文件所需的時間復雜度。現(xiàn)有文件隱藏技術包括:利用回收站特性,將文件偽裝為回收站中的文件[1];修改注冊表,使得無法通過常規(guī)方法顯示隱藏文件[2];改變API執(zhí)行流程,用自定義的文件相關函數(shù)入口地址替代原文件管理相關函數(shù)的入口地址,過濾掉待隱藏文件的有關內(nèi)容后再重新調用原函數(shù);直接修改底層驅動,對底層模塊返回的信息進行過濾來實現(xiàn)文件隱藏[3-4]等。

FAT32文件系統(tǒng)[5-6]是微軟公司發(fā)明并擁有部分專利的文件系統(tǒng),是一種規(guī)定文件在磁盤上的具體存儲形式的“格式標準”,通過它可有效地對物理磁盤進行管理。由于它采用了以32位為一個表項的文件分配表 (File Allocation Table,F(xiàn)AT)來解決分區(qū)大小的局限,故稱之為FAT32。雖然微軟已經(jīng)推出了新一代文件系統(tǒng)NTFS(New Technology File System,NTFS)來改善文件系統(tǒng)的性能、可靠性和磁盤利用率等指標,但FAT32仍然占據(jù)有極大的使用場合,目前眾多移動設備上的文件系統(tǒng),如U盤、手機SD卡、PDA上的擴展存儲器大多采用FAT32文件格式,因此,研究基于FAT32文件系統(tǒng)的文件隱藏具有應用價值。

在詳細分析FAT32文件系統(tǒng)組織文件和Linux虛擬文件系統(tǒng)(Virtual File System,VFS)支持多種文件系統(tǒng)原理的基礎上,本文基于FAT32管理文件和操作系統(tǒng)顯示文件的相關機理,采用修改文件目錄項有關屬性和重構文件FAT表項序列排列結構等技術,在邏輯上改變文件簇的位置,提出了一種具有高隱藏強度的文件隱藏方法。同時,根據(jù)Linux操作系統(tǒng)對FAT32的支持,利用Linux內(nèi)核提供的緩沖機制,在Linux系統(tǒng)上進行了實驗驗證。實驗結果和分析表明,本文提出的方法不僅能實現(xiàn)與操作系統(tǒng)無關的文件隱藏,且相比已有方法,具有更好的隱藏效果,文件隱藏方法實現(xiàn)簡單,沒有較大增加技術難度和系統(tǒng)消耗,對現(xiàn)實應用具有一定意義。

1 FAT32文件系統(tǒng)簡介

FAT32文件系統(tǒng)采用一種基于位示圖的方法來實現(xiàn)對磁盤文件的管理和檢索,并將簇(cluster)作為文件的分配計量單位,而一個具體文件也以磁盤簇的大小為單位,同樣地被劃分為若干個文件簇。在低于4 G的分區(qū)中,每簇一般包括8個扇區(qū),共4 k字節(jié)。FAT32宏觀上由3部分組成,即:引導記錄區(qū)(Dos Boot Record,DBR)、FAT表和數(shù)據(jù)區(qū),如圖 1所示。引導記錄區(qū)描述了FAT32文件系統(tǒng)總體的有關屬性,如每個扇區(qū)的大小、每個簇所占有的扇區(qū)數(shù)等。FAT表以4個字節(jié)為單位作為一個表項,記錄著簇的使用情況,按表項值的不同,可分為空簇未使用、已分配簇、壞簇、系統(tǒng)保留簇等類型。數(shù)據(jù)區(qū)是存放磁盤數(shù)據(jù)的具體區(qū)域,目錄項文件和文件的具體內(nèi)容都存放在該區(qū)域內(nèi)。

圖1 FAT32存儲結構Fig.1 Storage structure of FAT32

FAT32實現(xiàn)對文件的有效管理,依賴于兩個重要的元素:FAT表和目錄項。FAT表實質上是一張磁盤空間分配情況登記表,它以簇號的方式記錄了簇的分配情況。FAT表項和磁盤簇一一對應,由于一個文件在磁盤上不一定是連續(xù)存放,為了讓整個文件在邏輯上形成一個連續(xù)的磁盤簇鏈,F(xiàn)AT32文件系統(tǒng)通過在磁盤簇所對應的FAT表項中記錄下該簇的下一簇的磁盤簇號來達到上述目的。目錄項是一個以32字節(jié)為單位、有特定含義的數(shù)據(jù)結構,新建的目錄項被分配有一個磁盤簇。目錄項存放在上層目錄對應的磁盤簇中,記錄了對應文件的有關屬性,如文件的文件名、擴展名、文件創(chuàng)建時間等,其中與本文有關的重要屬性有:字節(jié)偏移量為0BH處的“文件屬性”、字節(jié)偏移量為14H~15H處的“文件起始簇號高16位”和字節(jié)偏移量為1AH~1BH的“文件起始簇號低16位”。

如圖2所示,操作系統(tǒng)對文件進行訪問時,總是先訪問文件的目錄項,得到文件的起始簇簇號,再找到該簇號對應的FAT表項,讀取出其中的內(nèi)容來得到下一簇的簇號,再在下一簇對應的FAT表項中找到再下一簇的簇號,以此類推,直到在FAT表項中找到文件最后一簇的標志0FFFFFFFH,對該文件的查找才結束。

圖2 FAT32磁盤數(shù)據(jù)結構及進行文件隱藏后的結果Fig.2 Disk data structures of FAT32 and results of file hidden

2 一種基于FAT32的文件隱藏方法

文獻[7]申請了一項基于FAT32文件隱藏的專利,其利用操作系統(tǒng)不顯示卷標文件的基本原理,將待隱藏文件目錄項中的“文件屬性”字段修改為卷標屬性值而實現(xiàn)文件隱藏。如用戶想隱藏圖2中的HiddenData.txt文件,則只需將目錄項HiddenData.txt的第12個字節(jié)的第4位數(shù)據(jù)位置1(00001000)即可。該方法不受操作系統(tǒng)的限制,可實現(xiàn)永久隱藏,且隱藏速度不受文件大小影響,具有一定優(yōu)勢。但由于該方法主要是利用操作系統(tǒng)顯示文件的有關原理,并沒有從根本上改變文件的存儲位置,因此,只要找出文件系統(tǒng)中多余的具有卷標屬性的目錄項,然后根據(jù)找到的目錄項和FAT表便可以找到所有隱藏文件。

2.1 新方法的提出

由上述FAT32文件系統(tǒng)的介紹可知,操作系統(tǒng)查找文件在磁盤上的具體位置時,以FAT表項值為查找索引,故每一個文件都存在一個FAT表項序列。文獻[7]存在的不足在于根據(jù)多余的具有卷標屬性的目錄項后便可以順利獲得隱藏文件,因此,若先將一個文件的FAT表項序列的排列結構保存起來,然后隨機打亂重排該結構后再寫回到FAT表中,那么即使找到了隱藏的目錄項,由此目錄項也無法順利獲得被隱藏的文件信息?;诖耍疚奶岢隽艘环N重構FAT表項序列的文件安全隱藏方法。

為了有效存儲文件的FAT表項序列,本文先定義如下的序列比較規(guī)則:

根據(jù)以上比較規(guī)則,每種FAT表項序列的排列方案對應一個整數(shù)編號 N,且 N∈[1,k!]。

2.2 重構FAT表項序列的文件安全隱藏方法

在得到待隱藏文件的路徑信息后,具體的隱藏步驟如下:1)根據(jù)路徑名分離出每一層目錄的名稱;

2)讀取DBR中有關屬性的信息,得到根目錄所在的磁盤簇號;

3)遍歷根目錄磁盤簇中的所有目錄項,找到待隱藏文件第一層目錄的目錄項;

4)根據(jù)找到的目錄項中的“文件起始簇號”找到該層目錄的磁盤簇號;

5)搜索該層目錄所對應的磁盤簇,得到下一層目錄的目錄項;

6)重復步驟4、5,直到找到待隱藏文件的最后一層目錄的目錄項;

7)在最后一層目錄對應的磁盤簇中找到待隱藏文件的目錄項,得到文件的起始簇號n1;

8)從FAT表中找到文件起始簇號對應的FAT表項,得到下一簇的磁盤簇號n2;

9)讀取出FAT表中第n2個表項的表項值,即n3。如此循環(huán),直到讀取出來的FAT表項值為結束標記值0FFFFFFFH;

10)根據(jù)序列比較規(guī)則計算 n1、n2、n3…nm…對應的編號值N,修改待隱藏文件的目錄項,使其具有卷標屬性,同時,將目錄項的“起始簇號”由n1修改為nm;

11)隨機重排序列 n1、n2、n3…nm…,使其變?yōu)?nm、…,并將重排后的結果序列寫回到對應FAT表項中;

12)返回編號值N給用戶,作為用戶以后獲取隱藏文件的“訪問密碼”。文件隱藏結束。

例如,使用上述隱藏方案隱藏圖2中的HiddenData.txt文件后,磁盤結構如圖2右部所示。

當用戶訪問隱藏文件時,只需要輸入“訪問密碼”,程序便可根據(jù)“訪問密碼”恢復FAT表項序列的正確排列順序,從而正確訪問文件。

2.3 對新方法的分析

文中提出的文件隱藏方法不僅不依賴于具體的操作系統(tǒng),而且隱藏強度高。

雖然新方法仍然是基于操作系統(tǒng)不顯示卷標文件的基本原理實現(xiàn)文件隱藏,但該方法通過修改目錄項中的起始簇號和FAT表項序列的排列結構,即使找到了多余的具有卷標屬性的目錄項,由該目錄項獲得被隱藏文件也無法實現(xiàn),這是因為依賴于打亂的FAT表項序列,被隱藏文件在磁盤上的邏輯存儲位置被改變。

3 Linux對FAT32的支持

Linux通過VFS機制支持多種文件系統(tǒng)[8]。每個掛載到Linux系統(tǒng)下的文件系統(tǒng)都由一個super_block描述,其中的一個成員變量s_fs_info指向一個特定文件系統(tǒng)定義的super_block,對FAT32文件系統(tǒng)來說,這個結構就是msdos_sb_info。該結構體描述了FAT32文件系統(tǒng)的特有屬性,當FAT32文件系統(tǒng)被掛載 (mount)時,內(nèi)核通過調用fat_fill_super函數(shù)讀取磁盤上的第一個扇區(qū),并將相應參數(shù)填充到已分配的super_block,如此,便在內(nèi)存中建立了該FAT32文件系統(tǒng)的所有描述信息,直到該文件系統(tǒng)被卸載(unmount)時,該 super_block 才會被銷毀。

Linux操作系統(tǒng)中的每個文件都使用一個被定義為inode的結構體描述。FAT32文件系統(tǒng)的目錄項在Linux中被定義為一個msdos_dir_entry結構體。為了與VFS接合,Linux內(nèi)核根據(jù)從磁盤上讀取的目錄項信息,利用函數(shù)fat_fill_inode動態(tài)構建inode,而FAT32下的inode結構——msdos_inode_info,可通過函數(shù) MSDOS_I(inode)得到。 其中,msdos_inode_info的成員域i_start指出了文件起始簇對應的磁盤簇號。

為保持從目錄訪問inode的高效率,Linux維護了表達路徑與inode對應關系的目錄項對象dentry,被操作系統(tǒng)訪問過的目錄項有關信息會被存入dentry結構中。每個文件或目錄項都至少有一個dentry結構,操作系統(tǒng)通過dentry在內(nèi)存中逐漸構建一棵描述物理磁盤上文件層次關系的樹型目錄。當同一目錄被再次訪問時,操作系統(tǒng)不需要重復訪問磁盤進行逐級查找,而是先在內(nèi)存中查找dentry組成的目錄樹,找到目標文件對應的dentry后,就可以根據(jù)結構體成員d_inode找到該文件對應的inode,進而進行與文件有關的各種操作。這種機制有效地減少了系統(tǒng)訪問磁盤的次數(shù),提高了系統(tǒng)的整體性能。

若想獲得一個文件簇在磁盤中的具體位置,Linux內(nèi)核并不是把整個FAT表讀到內(nèi)存中,然后從文件起始簇開始逐個查找FAT表。為了避免頻繁讀磁盤,它通過一個cache_lru鏈表來加快查找速度。cache_lru是msdos_inode_info的一個成員變量,它記錄最近訪問過的FAT表表項,每個鏈表元素為結構體fat_cache,fat_cache描述了一個文件簇在磁盤上的實際位置。內(nèi)核調用函數(shù)fat_get_cluster查找一個文件簇在磁盤中的實際位置時,先通過fat_cache_lookup函數(shù)從cache_lru鏈表中查找,當鏈表中不存在時,才從磁盤FAT表中進行查找。因此,通過每個inode的fat_cache隊列,系統(tǒng)可以快速獲得文件在磁盤上的實際位置。

4 實驗過程

文中提出的文件隱藏方法需要對FAT表項進行重構,故首先必須找到FAT表在磁盤中的具體位置,這通過采用sb_bread函數(shù)讀取磁盤第一個扇區(qū)得到實現(xiàn)。DBR中的具體信息在Linxu中被定義為結構體fat_boot_sector,根據(jù)fat_boot_sector中的相關成員可獲得FAT表的起始位置及其占有的磁盤扇區(qū)的大小。

獲得一個路徑對應的inode時,文中使用了函數(shù)open_namei,該函數(shù)可由路徑得到相應的nameidata結構,進而可得到待隱藏文件的 inode; 根據(jù) inode獲得對應msdos_inode_info后,由它的成員i_start可得到文件的起始簇號,最后使用函數(shù)fat_ent_read可找到待隱藏文件的所有磁盤簇號序列。在Linux系統(tǒng)中,卷標屬性被定義為一個宏:#define ATTR_VOLUME 8,為了修改目錄項中的有關屬性,文中使用了函數(shù)fat_notify_change,程序部分源代碼如下所示。

為了驗證上述方法的可行性,文中在Ubuntu10.04.4操作系統(tǒng)中掛載一個文件系統(tǒng)為FAT32的4G U盤后,執(zhí)行上述程序,成功實現(xiàn)了文件隱藏,故上述方法具有實際可行性。

5 結束語

文中分析了FAT32文件系統(tǒng)基本原理和現(xiàn)有基于FAT32的文件隱藏方法,研究了Linux內(nèi)核中有關FAT32的重要數(shù)據(jù)結構和函數(shù),討論了Linux通過VFS支持多種文件系統(tǒng)的機制。在此基礎上,提出了一種新的文件隱藏方法,并在Linux操作系統(tǒng)上進行了具體實現(xiàn)。實驗結果和分析表明,該方法不僅能實現(xiàn)高強度的文件隱藏,而且隱藏方法簡單、輕量,只需修改部分FAT表項便能實現(xiàn)。將文中提出的文件隱藏方法與其他文件安全技術結合,運用到Android智能手機等資源有限的設備上的SD卡的文檔保護中,是將來進一步的研究內(nèi)容。

[1]劉安潔,崔廣潤.在Dos下恢復Windows回收站中的文件[J].科技情報開發(fā)與經(jīng)濟,2006,16(23):250-251.

LIU An-jie,CUI Guang-run.Recovering the files in windows recycle bin in DOS[J].Sci-Tech Information Development&Economy,2006,16(23):250-251.

[2]郭建偉.簡單操作讓文件隱藏更徹底[J].電腦迷,2010(20):61.

GUO Jian-wei.Simple operation makes files hidden more completely[J].PC Fan,2010(20):61.

[3]王全民,王淞,金華鋒,等.基于Windows NT平臺文件隱藏和檢測系統(tǒng)的設計[J].計算機安全,2010(6):27-29.

WANG Quan-min,WANG Song,JIN Hua-feng,et al.The design of file hiding and detection system based on the windows NT platform [J].Network and Computer Security,2010(6):27-29.

[4]何耀彬,李祥和,孫巖.基于驅動堆棧單元的文件隱藏方法[J].計算機工程,2011,37(13):9-12.

HE Yao-bin,LI Xiang-he,SUN Yan.File hide method based on drive Stack unit[J].Computer Engineering,2011, 37(13):9-12.

[5]Microsoft Corporation.Microsoft extensible firmware initiative FAT32 file system specification:FAT:general overview of ondisk format[S].Version 1.03,December 6,2000.

[6]黨瀟瑜.一種輕量化FAT文件系統(tǒng) [J].電子科技,2011(5):91-93.

DANG Xiao-yu.A lightweight FAT file system[J].Electronic Science and Technology,2011(5):91-93.

[7]華中科技大學.基于 FAT32磁盤文件系統(tǒng)結構的文件隱藏方法:中國,ZL03118544.4[P].2003:1-9.

[8]敖青云.存儲技術原理分析:基于Linux 2.6內(nèi)核源代碼[M].北京:電子工業(yè)出版社,2011.

猜你喜歡
表項磁盤結構
一種改進的TCAM路由表項管理算法及實現(xiàn)
《形而上學》△卷的結構和位置
基于ARMA模型預測的交換機流表更新算法
論結構
解決Windows磁盤簽名沖突
修改磁盤屬性
SDN數(shù)據(jù)中心網(wǎng)絡基于流表項轉換的流表調度優(yōu)化
磁盤組群組及iSCSI Target設置
創(chuàng)建VSAN群集
論《日出》的結構
安远县| 安泽县| 阿鲁科尔沁旗| 大姚县| 乐安县| 镇巴县| 宁波市| 西畴县| 阿鲁科尔沁旗| 团风县| 申扎县| 富锦市| 栾川县| 平远县| 桂平市| 江安县| 买车| 通海县| 饶平县| 阳春市| 顺昌县| 建德市| 两当县| 盘山县| 喜德县| 肥城市| 青铜峡市| 石门县| 积石山| 太仓市| 汕头市| 无锡市| 龙州县| 锡林浩特市| 威信县| 长海县| 南澳县| 西吉县| 凤翔县| 岳阳县| 光泽县|