專利名稱::Ntfs文件系統(tǒng)下輕量級(jí)文件隱藏方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及的是一種電信
技術(shù)領(lǐng)域:
的文件系統(tǒng)處理的方法,具體是一種NTFS文件系統(tǒng)(NewTechnologyFileSystem新技術(shù)文件系統(tǒng))下輕量級(jí)文件隱藏方法。
背景技術(shù):
:在當(dāng)今這樣一個(gè)信息和網(wǎng)絡(luò)化的社會(huì)里,各種大容量存儲(chǔ)設(shè)備也已經(jīng)廣泛地應(yīng)用于社會(huì)的各個(gè)領(lǐng)域,如政府機(jī)關(guān)、學(xué)校學(xué)術(shù)機(jī)構(gòu)、商業(yè)公司、個(gè)人用戶等。對(duì)于不同計(jì)算機(jī)用戶,尤其是前三類計(jì)算機(jī)用戶,存儲(chǔ)介質(zhì)中保存的重要數(shù)據(jù)信息的保密性是最為關(guān)心的問(wèn)題。一旦存有重要數(shù)據(jù)的存儲(chǔ)設(shè)備丟失、被盜竊,如何最大程度的阻止試圖讀取這些設(shè)備的非法用戶獲取核心保密數(shù)據(jù)是現(xiàn)代存儲(chǔ)技術(shù)所最為注重的課題之一。不同的存儲(chǔ)系統(tǒng)上運(yùn)行有不同的文件系統(tǒng),而NTFS文件系統(tǒng)作為當(dāng)今主流操作系統(tǒng)(如美國(guó)微軟公司的視窗操作系統(tǒng))所推薦選用的文件系統(tǒng),已經(jīng)被絕大部分個(gè)人電腦用戶所采用。因此,發(fā)明一種基于現(xiàn)今主流文件系統(tǒng)的簡(jiǎn)單高效、安全可靠的文件隱藏方法可以最大程度的保護(hù)不同用戶對(duì)數(shù)據(jù)保密性的要求。經(jīng)對(duì)現(xiàn)有技術(shù)的文獻(xiàn)檢索發(fā)現(xiàn),中國(guó)專利(申請(qǐng))號(hào)為03118546.0,名稱為基于NTFS磁盤(pán)文件系統(tǒng)結(jié)構(gòu)的文件隱藏方法,它利用NTFS文件系統(tǒng)支持多數(shù)據(jù)流的特性,將所要保護(hù)的保密數(shù)據(jù)拷貝存儲(chǔ)在一個(gè)唯一的數(shù)據(jù)流名的文件中,從而起到隱藏?cái)?shù)據(jù)保護(hù)重要信息的作用。但該專利所采用的方法存在(l)隱藏大容量文件時(shí)需要執(zhí)行大量磁盤(pán)數(shù)據(jù)交換操作;(2)所產(chǎn)生唯一數(shù)據(jù)流名可能存在沖突;(3)多數(shù)據(jù)流掃面工具可檢測(cè)多數(shù)據(jù)流存在性等數(shù)據(jù)存儲(chǔ)安全隱患。又如中國(guó)專利(申請(qǐng))號(hào)為CN02115105.9的技術(shù),名稱為一種無(wú)失真數(shù)據(jù)隱藏方法。它是將待隱藏的文件合并到另一個(gè)文件中,例如,根據(jù)文件圖像的冗余,將待隱藏的文件內(nèi)容加入其中,或依附再其后。這些方法存在運(yùn)算時(shí)間長(zhǎng),資源消耗大,隱藏?cái)?shù)據(jù)容量有限,加密后文件或宿主文件對(duì)所有用戶顯式存在的缺點(diǎn)。并且一旦加密文件或宿主文件被非法用戶惡意篡改,則可能導(dǎo)致隱藏?cái)?shù)據(jù)的丟失以及內(nèi)容的不一致性。
發(fā)明內(nèi)容本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足,提供一種NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,使其解決了現(xiàn)有技術(shù)不能同時(shí)滿足執(zhí)行隱藏文件時(shí)候最小磁盤(pán)數(shù)據(jù)交換開(kāi)銷(xiāo)和所隱藏的數(shù)據(jù)對(duì)非法用戶的可見(jiàn)性問(wèn)題。本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的,本發(fā)明包括兩個(gè)部分?jǐn)?shù)據(jù)隱藏方法以及用于恢復(fù)數(shù)據(jù)隱藏的數(shù)據(jù)隱藏恢復(fù)方法,數(shù)據(jù)隱藏方法為按合法的文件路徑指代的文件系統(tǒng)元數(shù)據(jù),遍歷索引中特定文件索引記錄入口,從而通過(guò)刪除、修改文件索引以及對(duì)應(yīng)文件系統(tǒng)元數(shù)據(jù)達(dá)到隱藏文件數(shù)據(jù)的目的。數(shù)據(jù)隱藏恢復(fù)方法為按合法的文件路徑以及已隱藏文件MFT記錄編號(hào),通過(guò)修改臨時(shí)文件的索引記錄入口和文件MFT記錄,從而將已隱藏的數(shù)據(jù)重新顯式鏈入文件系統(tǒng)中,達(dá)到恢復(fù)隱藏?cái)?shù)據(jù)的目的。所述的數(shù)據(jù)隱藏的方法,具體為第一步,獲取用戶所要隱藏的文件的路徑,檢査該路徑名的合法性;并對(duì)該路徑名進(jìn)行分析、分解,包括路徑中包含的邏輯分區(qū)標(biāo)識(shí)符、各級(jí)文件夾名、需隱藏文件的文件名及其擴(kuò)展名。第二步,根據(jù)已解析的文件路徑,分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū),從而按照定義獲取該邏輯分區(qū)的相關(guān)的正確參數(shù)。第三步,根據(jù)所獲得的邏輯分區(qū)參數(shù),讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù)。第四步,根據(jù)所獲得的系統(tǒng)關(guān)鍵元數(shù)據(jù),找到特定記錄文件索引的入口表,并遍歷文件索引,找到所要隱藏文件的相關(guān)的索引記錄入口SINDEX—ENTRY。第五步,根據(jù)所獲得的文件索引記錄入口,解析實(shí)際存放文件的文件頭以及文件自身數(shù)據(jù)所處的硬盤(pán)物理地址信息。第六步,在文件索引中刪除要隱藏文件對(duì)應(yīng)的索引記錄。第七步,根據(jù)第五步中獲得的物理地址信息,修改在第三步中獲得的所對(duì)應(yīng)系統(tǒng)關(guān)鍵元數(shù)據(jù)。第八步,發(fā)送特性信息,使得操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu)。第九步,返回執(zhí)行結(jié)果。8所述第二步,具體為-①根據(jù)第一步中獲取并解析的文件路徑,獲得讀取該文件路徑對(duì)應(yīng)的邏輯分區(qū)的系統(tǒng)I/0資源。②讀取步驟①中打開(kāi)的邏輯分區(qū)的引導(dǎo)扇區(qū)所在0號(hào)簇的數(shù)據(jù)。該0號(hào)簇記錄了當(dāng)前邏輯分區(qū)下,文件系統(tǒng)的相關(guān)重要信息。所述第三步,具體為-①根據(jù)第二步中獲取的邏輯分區(qū)參數(shù),包括分區(qū)的扇區(qū)、簇、實(shí)際容量等相關(guān)信息,計(jì)算該分區(qū)下,NTFS文件結(jié)構(gòu)系統(tǒng)關(guān)鍵元數(shù)據(jù)存放的磁盤(pán)物理偏移地址。②從①計(jì)算得到的系統(tǒng)關(guān)鍵元數(shù)據(jù)起始地址開(kāi)始,按照NTFS文件系統(tǒng)的定義,讀取執(zhí)行隱藏文件所必須信息。包括分析主文件表記錄中包含的文件屬性,獲得文件系統(tǒng)根索引入口、邏輯分區(qū)文件簇使用情況等信息。所述第四步,具體為-①定位并讀取文件系統(tǒng)根索引入口的頭文件,分析該記錄中記錄的所有索引實(shí)際存放的磁盤(pán)物理位置。②根據(jù)第一步中所解析的路徑名,從根索引入口開(kāi)始,按每一級(jí)文件夾的名字查找,最終獲得所要隱藏文件的父文件夾索引入口。具體步驟包括③從索引入口根據(jù)索引文件定義,找到求INDEX—R00T屬性。④分析纟INDEX一R00T屬性的屬性頭,讀取SINDEX—ROOT屬性數(shù)據(jù)記錄。⑤以SINDEX—ROOT屬性數(shù)據(jù)記錄為起始,逐個(gè)讀取SINDEX—ENTRY記錄,如果所讀取的SINDEX—ENTRY指代的信息即為所要査找的文件夾或文件,則停止步驟⑤。否則査找下一個(gè)SINDEX—ENTRY。如果已讀取到最后一個(gè)SINDEX—ENTRY,則停止步驟⑤。如果已讀取的SINDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要査找的文件夾名或文件名,則停止步驟⑤⑥如果步驟⑤已經(jīng)獲得所要查找的文件夾或文件對(duì)應(yīng)的SINDEX—ENTRY,則結(jié)束第四步。否則記錄下步驟⑤中讀取的最后一個(gè)SINDEX一ENTRY內(nèi)容,分析其中指代在$INDEX—ALLOCATION中第一個(gè)$INDEX—ENTRY偏移的信息。⑦分析SINDEX—ROOT屬性的屬性頭,讀取$INDEX—ALLOCATION屬性數(shù)據(jù)記錄。⑧解析記錄在S頂DEX一ALL0CATI0N屬性頭包含的datarun數(shù)據(jù),根據(jù)定義進(jìn)行映射,從而將$INDEX—ALLOCATION實(shí)際數(shù)據(jù)屬性Dataattribute存放位置9虛擬簇編號(hào)VCN映射到磁盤(pán)實(shí)際邏輯簇地址LCN。⑨以⑧中獲得的LCN為入口地址,逐個(gè)讀取SINDEX—ENTRY記錄。如果所讀取的SINDEX—ENTRY指代的信息即為所要査找的文件夾或文件,則停止步驟⑨。否則査找下一個(gè)$INDEX—ENTRY。如果已讀取到最后一個(gè)SINDEX一ENTRY,則停止步驟⑨。如果已讀取的SINDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要査找的文件夾名或文件名,則停止步驟⑨。⑩如果步驟⑤已經(jīng)獲得所要查找的文件夾或文件對(duì)應(yīng)的SINDEX—ENTRY,則結(jié)束第四步。否則記錄下步驟⑩中讀取的最后一個(gè)SINDEX—ENTRY內(nèi)容,分析其中指代在SINDEX—ALL0CATI0N中第一個(gè)SINDEX—ENTRY偏移的信息,以此為入口地址,重復(fù)步驟⑨。所述第五步,具體為①解析第四步中查找文件索引得到的SINDEX—ENTRY,得到其中指定的所要隱藏文件的MFT號(hào)。②根據(jù)第三步中得到的文件系統(tǒng)元數(shù)據(jù)信息,査找步驟①中得到的編號(hào)的MFT文件。③解析步驟②得到的MFT文件,解析其中包含的SDATA屬性。如果所隱藏的文件SDATA屬性標(biāo)志為resident,則結(jié)束第五步。如果所隱藏的文件SDATA屬性標(biāo)志為non-resident,則讀取纟MTA屬性中描述的虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。所述第六步,具體為①刪除文件索引中所要隱藏的文件的$INDEX_ENTRY。②平衡文件索引的B+樹(shù)結(jié)構(gòu)。所述第七步,具體為①根據(jù)第三步中得到的文件系統(tǒng)元數(shù)據(jù)信息,査找編號(hào)為0的MFT文件輛FT記錄并解析該0號(hào)MFT文件中SBit—map屬性中描述虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。②査找編號(hào)為6的MFT文件SBitmap并解析該6號(hào)MFT文件中SDATA屬性中描述的虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。(D如果所隱藏的文件SDATA屬性標(biāo)志為駐留屬性,則根據(jù)第五步中得到的需隱藏文件的MFT編號(hào),將步驟①中0號(hào)MFT文件描述的SBitjn鄰對(duì)應(yīng)的比特位設(shè)置為l,以防止后續(xù)添加文件操作覆蓋需隱藏文件的MFT記錄,結(jié)束第七步。④如果所隱藏的文件SDATA屬性標(biāo)志為非駐留屬性,則根據(jù)第五步中得到的需隱藏文件的MFT編號(hào),將步驟①中0號(hào)MFT文件描述的SBitjri鄰對(duì)應(yīng)的比特設(shè)置為1,以防止后續(xù)添加文件操作覆蓋需隱藏的文件的MFT記錄;⑤根據(jù)第五步中得到的虛擬簇號(hào)到邏輯簇號(hào)的映射關(guān)系,將步驟②中第6號(hào)MFT文件SBitm鄰中對(duì)應(yīng)的比特位設(shè)置為1,以防止后續(xù)添加文件操作覆蓋需隱藏文件的實(shí)際數(shù)據(jù)占用磁盤(pán)空間。所述第八步,具體為①調(diào)用系統(tǒng)函數(shù),通知操作系統(tǒng)需隱藏文件所在的邏輯分區(qū)文件結(jié)構(gòu)已經(jīng)改變,從而令操作系統(tǒng)重新加載新的文件結(jié)構(gòu)。②釋放執(zhí)行上述步驟中所有占用的資源。所述第九步,具體為①如果上述步驟全部執(zhí)行成功,則返回執(zhí)行操作成功。②如果上述步驟中某一環(huán)節(jié)執(zhí)行失敗,則返回該失敗環(huán)節(jié)對(duì)應(yīng)的錯(cuò)誤編號(hào)。所述的數(shù)據(jù)隱藏恢復(fù)方法,具體為-第一步,通過(guò)輸入或讀取配置記錄文件獲取恢復(fù)文件的合法全路徑名以及對(duì)應(yīng)的MFT文件編號(hào);并對(duì)該路徑名進(jìn)行分析、分解,包括路徑中包含的邏輯分區(qū)標(biāo)識(shí)符、各級(jí)文件夾名、需隱藏文件的文件名及其擴(kuò)展名。第二步,根據(jù)已解析的文件路徑,校驗(yàn)該路徑對(duì)應(yīng)的邏輯分區(qū)下是否存在要恢復(fù)隱藏的對(duì)應(yīng)的各級(jí)文件夾及文件。第三步,根據(jù)已解析的文件路徑,分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū),從而按照定義獲取該邏輯分區(qū)的相關(guān)的正確參數(shù)。第四步,根據(jù)所獲得的邏輯分區(qū)參數(shù),讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù)。第五步,根據(jù)所獲得的系統(tǒng)關(guān)鍵元數(shù)據(jù),找到特定記錄文件索引的入口表,并遍歷文件索引,找到第二步中已創(chuàng)建的臨時(shí)文件的相關(guān)的索引記錄入口$INDEX—ENTRY。第六步,根據(jù)第三步所獲得邏輯分區(qū)參數(shù)以及第一步中獲得的需恢復(fù)隱藏的MFT文件編號(hào),計(jì)算出需恢復(fù)隱藏文件的MFT文件記錄所在的邏輯簇號(hào),進(jìn)一步讀取該MFT文件記錄。第七步,解析第六步獲取的MFT文件記錄,讀取其中包含的SFILE—NAME屬性。第八步,修改第五步中査找到的臨時(shí)文件的$INDEX—ENTRY,將該$INDEX—ENTRY中的SFILE—NAME屬性修改成第七步所讀取的數(shù)據(jù)內(nèi)容。第九步,根據(jù)第一步中獲得的需恢復(fù)隱藏的MFT文件編號(hào)以及第四步中獲得的系統(tǒng)關(guān)鍵元數(shù)據(jù),修改相應(yīng)內(nèi)容。第十步,發(fā)送特性信息,使得操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu)。第十一步,返回執(zhí)行結(jié)果。所述第二步,具體為-①檢查第一步中獲得的文件路徑是否合法。其中包括每一級(jí)文件夾是否存在;以及當(dāng)前文件系統(tǒng)中是否存在與第一步獲得的文件路徑中指代的文件的同名文件。②如果己經(jīng)存在同名文件,則結(jié)束本次恢復(fù)隱藏操作,返回用戶存在同名文件的錯(cuò)誤信息。③如果不存在同名文件,則自動(dòng)創(chuàng)建同名關(guān)聯(lián)文件夾,并再最后一級(jí)文件夾中創(chuàng)建一個(gè)與需恢復(fù)隱藏文件名一致的同名臨時(shí)文件。所述第三步,具體為①根據(jù)第一步中獲取并解析的文件路徑,獲得讀取該文件路徑對(duì)應(yīng)的邏輯分區(qū)的系統(tǒng)I/0資源。②讀取步驟①中打開(kāi)的邏輯分區(qū)的引導(dǎo)扇區(qū)所在0號(hào)簇的數(shù)據(jù)。該0號(hào)簇記錄了當(dāng)前邏輯分區(qū)下,文件系統(tǒng)的相關(guān)重要信息。所述第四步,具體為①根據(jù)第二步中獲取的邏輯分區(qū)參數(shù),包括分區(qū)的扇區(qū)、簇、實(shí)際容量等相關(guān)信息,計(jì)算該分區(qū)下,NTFS文件結(jié)構(gòu)系統(tǒng)關(guān)鍵元數(shù)據(jù)存放的磁盤(pán)物理偏移地址。②從①計(jì)算得到的系統(tǒng)關(guān)鍵元數(shù)據(jù)起始地址開(kāi)始,按照NTFS文件系統(tǒng)的定義,讀取執(zhí)行恢復(fù)隱藏文件所必須信息。包括分析主文件表記錄中包含的文件屬性,獲得文件系統(tǒng)根索引入口、邏輯分區(qū)文件簇使用情況等信息。所述第五步,具體為①定位并讀取文件系統(tǒng)根索引入口的頭文件,分析該記錄中記錄的所有索引實(shí)際存放的磁盤(pán)物理位置。②根據(jù)第一步中所解析的路徑名,從根索引入口開(kāi)始,按每一級(jí)文件夾的名字查找,最終獲得所要隱藏文件的父文件夾索引入口。具體步驟包括③從索引入口根據(jù)索引文件定義,找到SINDEX—R00T屬性。④分析SINDEX—ROOT屬性的屬性頭,讀取纟INDEX—ROOT屬性數(shù)據(jù)記錄。⑤以SINDEX—R00T屬性數(shù)據(jù)記錄為起始,逐個(gè)讀取纟INDEX—ENTRY記錄,如果所讀取的SINDEX—ENTRY指代的信息即為所要查找的文件夾或文件,則停止步驟⑤。否則查找下一個(gè)SINDEX一ENTRY。如果已讀取到最后一個(gè)豸INDEX一ENTRY,則停止步驟⑤。如果已讀取的SINDEX一ENTRY中指代的文件名按二進(jìn)制比較小于要查找的文件夾名或文件名,則停止步驟⑤⑥如果步驟⑤己經(jīng)獲得所要査找的文件夾或文件對(duì)應(yīng)的SINDEX一ENTRY,則結(jié)束第四步。否則記錄下步驟⑤中讀取的最后一個(gè)SINDEX一ENTRY內(nèi)容,分析其中指代在$INDEX—ALLOCATION中第一個(gè)$INDEX—ENTRY偏移的信息。⑦分析3INDEX—ROOT屬性的屬性頭,讀取$INDEX—ALLOCATION屬性數(shù)據(jù)記錄。⑧解析記錄在SINDEX—ALLOCATION屬性頭包含的datarun數(shù)據(jù),根據(jù)定義進(jìn)行映射,從而將SINDEX—ALLOCATION實(shí)際數(shù)據(jù)屬性Dataattribute存放位置虛擬簇編號(hào)VCN映射到磁盤(pán)實(shí)際邏輯簇地址LCN。⑨以⑧中獲得的LCN為入口地址,逐個(gè)讀取$INDEX—ENTRY記錄。如果所讀取的SINDEX一ENTRY指代的信息即為所要査找的文件夾或文件,則停止步驟⑨。否則査找下一個(gè)SINDEX—ENTRY。如果已讀取到最后一個(gè)纟INDEX—ENTRY,則停止步驟⑨。如果已讀取的SINDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要査找的文件夾名或文件名,則停止步驟⑨。⑩如果步驟⑤已經(jīng)獲得所要査找的文件夾或文件對(duì)應(yīng)的$I冊(cè)EX一ENTRY,則結(jié)束第四步。否則記錄下步驟⑩中讀取的最后一個(gè)SINDEX—ENTRY內(nèi)容,分析其中指代在SINDEX一ALL0CATI0N中第一個(gè)SINDEX一ENTRY偏移的信息,以此為入口地址,重復(fù)步驟⑨。所述第九步,具體為①根據(jù)第三步中得到的文件系統(tǒng)元數(shù)據(jù)信息,查找編號(hào)為0的MFT文件SMFT記錄并解析該0號(hào)MFT文件中纟Bit—map屬性中描述虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際13邏輯簇地址LCN的映射關(guān)系。②根據(jù)創(chuàng)建的臨時(shí)文件的MFT編號(hào),將步驟①中第0號(hào)MFT文件描述的$Bit—map對(duì)應(yīng)的比特位設(shè)置為O,從而允許后續(xù)添加文件操作覆蓋當(dāng)前內(nèi)容,結(jié)束第九步。所述第十步,具體為①調(diào)用系統(tǒng)函數(shù),通知操作系統(tǒng)需隱藏文件所在的邏輯分區(qū)文件結(jié)構(gòu)已經(jīng)改變,從而令操作系統(tǒng)重新加載新的文件結(jié)構(gòu)。②釋放執(zhí)行上述步驟中所有占用的資源。所述第十一步,具體為①如果上述步驟全部執(zhí)行成功,則返回執(zhí)行操作成功。②如果上述步驟中某一環(huán)節(jié)執(zhí)行失敗,則返回該失敗環(huán)節(jié)對(duì)應(yīng)的錯(cuò)誤編號(hào)。本發(fā)明所需磁盤(pán)數(shù)據(jù)交換最小化,基本等同于一次NTFS文件系統(tǒng)正常的訪問(wèn)文件操作開(kāi)銷(xiāo);數(shù)據(jù)隱藏后,用戶無(wú)法再通過(guò)操作系統(tǒng)資源管理器査看到任何顯式的遺留信息,如一個(gè)宿主文件、文件容量與實(shí)際內(nèi)容明顯不一致等缺點(diǎn),從而實(shí)現(xiàn)了隱藏文件對(duì)用戶的完全透明性。數(shù)據(jù)備份恢復(fù)均加強(qiáng)了數(shù)據(jù)存儲(chǔ),數(shù)據(jù)保密方面的安全性。本發(fā)明提供了最小侵入式的輕量級(jí)文件隱藏方法,在不犧牲現(xiàn)有主流NTFS文件系統(tǒng)性能及可靠性的前提下,實(shí)現(xiàn)最小化的對(duì)文件系統(tǒng)的修改,從而簡(jiǎn)單可靠安全地實(shí)現(xiàn)對(duì)重要保密數(shù)據(jù)的隱藏,并達(dá)到對(duì)非法用戶的數(shù)據(jù)可見(jiàn)透明性。并且隱藏過(guò)程中,沒(méi)有大量的數(shù)據(jù)交換及運(yùn)算,從而較傳統(tǒng)的加密方法,不會(huì)加重用戶實(shí)際使用過(guò)程中等待執(zhí)行的時(shí)間。從而最大程度地保護(hù)了數(shù)據(jù)完整性以及可信度。圖1是本發(fā)明實(shí)現(xiàn)數(shù)據(jù)隱藏和恢復(fù)的原理示意圖2是本發(fā)明的數(shù)據(jù)隱藏方法的流程圖3是本發(fā)明的數(shù)據(jù)恢復(fù)隱藏方法的流程圖4是發(fā)明中涉及的NTFS文件系統(tǒng)索引目錄結(jié)構(gòu)示意圖5是發(fā)明中涉及的NTFS文件系統(tǒng)索引目錄數(shù)據(jù)結(jié)構(gòu)示意圖6本發(fā)明的數(shù)據(jù)隱藏操作中修改文件系統(tǒng)元數(shù)據(jù)的示意圖7本發(fā)明的修改文件索引中文件索引入口屬性的示意圖。1具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的實(shí)施例作詳細(xì)說(shuō)明本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。為了保證數(shù)據(jù)的隱藏性以及最小操作執(zhí)行開(kāi)銷(xiāo),本發(fā)明主要通過(guò)最小侵入NTFS文件系統(tǒng)的結(jié)構(gòu),以修改較少的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)達(dá)到隱藏文件的目的。從而實(shí)現(xiàn)文件在操作系統(tǒng)的不可見(jiàn)性,起到保護(hù)重要數(shù)據(jù)的目的。用戶只需要維護(hù)一串文件路徑名即可對(duì)文件進(jìn)行隱藏和恢復(fù)。同時(shí)只有通過(guò)本發(fā)明中提及的恢復(fù)隱藏算法,才能將隱藏的數(shù)據(jù)恢復(fù)成可見(jiàn)狀態(tài)。如圖l所示,其為實(shí)現(xiàn)數(shù)據(jù)隱藏和恢復(fù)的本發(fā)明的計(jì)算機(jī)系統(tǒng)的原理結(jié)構(gòu)示意圖。它包括用戶輸入的文件路徑名和特定索引號(hào)作為執(zhí)行隱藏、恢復(fù)的輸入數(shù)據(jù),本發(fā)明將自動(dòng)根據(jù)用戶輸入的信息講特定文件進(jìn)行隱藏和恢復(fù)。不但過(guò)程無(wú)需人工干預(yù),而且執(zhí)行過(guò)程中無(wú)需對(duì)磁盤(pán)數(shù)據(jù)進(jìn)行大量的讀寫(xiě)操作以及數(shù)據(jù)運(yùn)算操作。最終特定文件在windows資源管理器中表現(xiàn)為可見(jiàn)和不可見(jiàn)兩種狀態(tài)。當(dāng)特定文件為隱藏狀態(tài)時(shí),任何用戶是無(wú)法獲取隱藏文件的數(shù)據(jù)的。(一)數(shù)據(jù)隱藏的方法如圖2所示,其為本發(fā)明隱藏流程圖。它描述了執(zhí)行隱藏文件操作必要的輸入數(shù)據(jù)及執(zhí)行隱藏過(guò)程的中間核心算法步驟。Sl:獲取需隱藏文件路徑,檢査合法性,并對(duì)路徑名分析、分解;S2:分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū)的相關(guān)的正確參數(shù);S3:讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù);S4:找到特定記錄文件索引的入口表并遍歷文件索引,獲取隱藏文件的索引記錄入口;S5:根據(jù)文件索引記錄入口,解析實(shí)際文件數(shù)據(jù)所處的硬盤(pán)物理地址信息;S6:刪除文件索引中對(duì)應(yīng)的索引記錄;S7:修改在需隱藏文件所對(duì)應(yīng)系統(tǒng)關(guān)鍵元數(shù)據(jù);S8:通知操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu);S9:返回執(zhí)行結(jié)果;以下具體介紹每一步驟。一、步驟Sl獲取需隱藏文件路徑,檢査合法性,并對(duì)路徑名分析、分解。本發(fā)明中執(zhí)行隱藏操作只需要指定需隱藏的文件的全路徑。作為執(zhí)行隱藏操作的唯一必要輸入信息,該信息的正確與否直接決定了隱藏操作執(zhí)行結(jié)果的成功與否。如果輸入不合法的路徑名,將無(wú)法執(zhí)行正確的隱藏操作。所謂檢查文件路徑的合法性是這樣的系統(tǒng)首先須確保輸入的路徑名是否包含NTFS文件系統(tǒng)所不允許的字符。同時(shí)檢査輸入路徑指定的邏輯分區(qū)、各級(jí)文件夾、文件是否存在。例如:輸入"c:\Al\Bl\C.DOC",首先檢査該串字符串中是否包含NTFS文件系統(tǒng)定義的非法字符,然后依次檢查是否存在命名為"C:"的邏輯分區(qū),是否存在A1,B1兩級(jí)文件夾,是否存在C.DOC文件。如果上述步驟中有任意檢査出錯(cuò),則停止執(zhí)行隱藏操作,通知異常處理機(jī)制處理相關(guān)錯(cuò)誤及返回錯(cuò)誤代碼。所謂分析、分解文件路徑是這樣的將輸入的文件路徑字符串根據(jù)NTFS文件路徑的定義,分區(qū)劃分成邏輯分區(qū)命名,各級(jí)文件夾以及文件名。例如輸入"c:\Al\Bl\C.DOC",則最終分解成邏輯分區(qū)命名"c:",兩級(jí)文件夾"A1"和"B1",以及文件名"C.DOC"。該步分解結(jié)果將直接作為S2步驟的輸入數(shù)據(jù)。一、步驟S2分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū)的相關(guān)的正確參數(shù)。所謂引導(dǎo)扇區(qū)的相關(guān)正確參數(shù)的定義是這樣的:NTFS的引導(dǎo)扇區(qū)作用是由MBR引導(dǎo)至活動(dòng)分區(qū)的DBR,再由DBR引導(dǎo)操作系統(tǒng)。而在NTFS巻上BPB(BIOSParameterBlock)以及擴(kuò)展BPB中定義了裝載操作系統(tǒng)的必要數(shù)據(jù),這些數(shù)據(jù)也是本發(fā)明執(zhí)行隱藏操作所必須的數(shù)據(jù)。這些必須BPB參數(shù)信息如下表1所示表1<table>tableseeoriginaldocumentpage16</column></row><table>通過(guò)讀取上述這些數(shù)據(jù)就可以獲取NTFS文件系統(tǒng)的入口文件SMFT,這也是本發(fā)明修改文件系統(tǒng)的執(zhí)行隱藏文件操作的著手點(diǎn)。三、步驟S3讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù)。NTFS文件系統(tǒng)關(guān)鍵元數(shù)據(jù)定義是這樣的在NTFS文件系統(tǒng)中每種不同類型的數(shù)據(jù)都是一個(gè)文件,同時(shí)前24個(gè)MFT記錄都是系統(tǒng)關(guān)鍵元文件。本發(fā)明執(zhí)行隱藏操作中涉及的NTFS元文件定義如下表2所示表2<table>tableseeoriginaldocumentpage17</column></row><table>通過(guò)步驟S3中得到的SMFT起始磁盤(pán)邏輯簇號(hào),就可以依次讀取上述元文件。其中SMFT指定其本身以及其他所有MFT文件的索引編號(hào)和物理地址。$Root是文件系統(tǒng)的根目錄"/",在所在邏輯分區(qū)下所有文件均可通過(guò)根目錄索引到。SBitmap位圖文件定義了邏輯分區(qū)每一個(gè)簇的使用情況,占用或空閑。$BadClus壞簇文件記錄了所在邏輯分區(qū)下磁盤(pán)壞簇編號(hào)。四、步驟S4找到特定記錄文件索引的入口表并遍歷文件索引,獲取隱藏文件的索引記錄入口。NTFS文件系統(tǒng)中規(guī)定,每種類型的數(shù)據(jù)均以文件的形式存在。即系統(tǒng)元數(shù)據(jù),文件夾,用戶文件均以文件的形式存在于NTFS文件系統(tǒng)中。每個(gè)一個(gè)文件都有一個(gè)特定編號(hào)的MFT記錄對(duì)應(yīng)。所不同的是,系統(tǒng)元數(shù)據(jù)定義了NTFS文件系統(tǒng)相關(guān)的必須信息。根目錄以及每個(gè)文件夾表現(xiàn)為一個(gè)索引的入口,索引包含了當(dāng)前文件夾下所有子文件和子文件夾。而用戶文件的MFT指定了用戶數(shù)據(jù)存放的數(shù)據(jù)。上述所有MFT記錄的編號(hào)均能從根目錄開(kāi)始的索引遍歷到。因此,本發(fā)明一個(gè)關(guān)鍵步驟即為從正確的根目錄索引入口開(kāi)始,找到需隱藏文件在索引中的位置。查找隱藏文件的索弓I記錄入口具體實(shí)現(xiàn)子步驟是這樣的①定位并讀取文件系統(tǒng)根索引入口的頭文件,分析該記錄中記錄的所有索引實(shí)際存放的磁盤(pán)物理位置。②根據(jù)解析的路徑名,從根索引入口開(kāi)始,按每一級(jí)文件夾的名字査找,最終獲得所要隱藏文件的父文件夾索引入口。具體步驟包括-③從索引入口根據(jù)索引文件定義,找到SINDEX—ROOT屬性。④分析豸INDEX—R00T屬性的屬性頭,讀取$1冊(cè)£乂_叨01屬性數(shù)據(jù)記錄。⑤以SINDEX一R00T屬性數(shù)據(jù)記錄為起始,逐個(gè)讀取SINDEX—ENTRY記錄,如果所讀取的SINDEX—ENTRY指代的信息即為所要査找的文件夾或文件,則停止步驟。否則査找下一個(gè)SINDEX—ENTRY。如果已讀取到最后一個(gè)纟INDEX—ENTRY,則停止步驟⑤。如果已讀取的SINDEX一ENTRY中指代的文件名按二進(jìn)制比較小于要查找的文件夾名或文件名,則停止步驟⑤⑥如果步驟⑤已經(jīng)獲得所要査找的文件夾或文件對(duì)應(yīng)的SINDEX—ENTRY,則結(jié)束本次査找。否則記錄下步驟⑤中讀取的最后一個(gè)3INDEX—ENTRY內(nèi)容,分析其中指代在SINDEX—ALLOCATION中第一個(gè)SINDEX—ENTRY偏移的信息。⑦分析;j;INDEX—ROOT屬性的屬性頭,讀取SINDEX—ALLOCATION屬性數(shù)據(jù)記錄。⑧解析記錄在SINDEX—ALL0CATI0N屬性頭包含的datarun數(shù)據(jù),根據(jù)定義進(jìn)行映射,從而將SINDEX一ALL0CATI0N實(shí)際數(shù)據(jù)屬性Dataattribute存放位置虛擬簇編號(hào)VCN映射到磁盤(pán)實(shí)際邏輯簇地址LCN。⑨以⑧中獲得的LCN為入口地址,逐個(gè)讀取$INDEX—ENTRY記錄。如果所讀取的SINDEX—ENTRY指代的信息即為所要査找的文件夾或文件,則停止步驟⑨。否則査找下一個(gè)SINDEX—ENTRY。如果已讀取到最后一個(gè)SINDEX—ENTRY,則停止步驟(D。如果已讀取的SINDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要査找的文件夾名或文件名,則停止步驟⑨。如果步驟⑤已經(jīng)獲得所要查找的文件夾或文件對(duì)應(yīng)的$INDEX—ENTRY,則結(jié)束本次査找。否則記錄下步驟⑩中讀取的最后一個(gè)SINDEX—ENTRY內(nèi)容,分析其中指代在$INDEX—ALLOCATION中第一個(gè)SINDEX—ENTRY偏移的信息,以此為入口地址,重復(fù)歩驟⑨五、步驟S5根據(jù)文件索引記錄入口,解析實(shí)際文件數(shù)據(jù)所處的硬盤(pán)物理地址信息。在NTFS文件系統(tǒng)的索引結(jié)構(gòu)中,每個(gè)文件都有一個(gè)對(duì)應(yīng)的文件索引記錄入口$INDEX—ENTRY。$INDEX—ENTRY這樣一個(gè)數(shù)據(jù)結(jié)構(gòu)中,一個(gè)最為重要的數(shù)據(jù)即描述了其對(duì)應(yīng)的文件的MFT編號(hào)。本步驟具體執(zhí)行為將查找的到的18$INDEX_ENTRY,按照定義讀取其指代的MFT編號(hào)。六、步驟S6刪除文件索引中對(duì)應(yīng)的索引記錄。NTFS文件系統(tǒng)的索引結(jié)構(gòu)為B+樹(shù)結(jié)構(gòu),如圖4、圖5所示。因此,為了刪除索引中定義的需隱藏文件信息,本發(fā)明按照實(shí)際B+樹(shù)定義的刪除葉子節(jié)點(diǎn)和非葉節(jié)點(diǎn)的不同算法,將需隱藏文件的索引信息從當(dāng)前索引記錄中刪除。七、步驟S7修改在需隱藏文件所對(duì)應(yīng)系統(tǒng)關(guān)鍵元數(shù)據(jù),如圖6所示。具體步驟定義如下:①根據(jù)中得到的文件系統(tǒng)元數(shù)據(jù)信息,査找編號(hào)為0的MFT文件SMFT記錄并解析該0號(hào)MFT文件中SBitjiiap屬性中描述虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。②查找編號(hào)為6的MFT文件SBitmap并解析該6號(hào)MFT文件中SDATA屬性中描述的虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。③如果所隱藏的文件SDATA屬性標(biāo)志為駐留屬性,則根據(jù)步驟(5)中得到的需隱藏文件的MFT編號(hào),將步驟①中0號(hào)MFT文件描述的SBit—map對(duì)應(yīng)的比特位設(shè)置為l,以防止后續(xù)添加文件操作覆蓋需隱藏文件的MFT記錄,結(jié)束步驟(7)。④如果所隱藏的文件3DATA屬性標(biāo)志為非駐留屬性,則根據(jù)步驟(5)中得到的需隱藏文件的MFT編號(hào),將步驟①中0號(hào)MFT文件描述的SBit—m邵對(duì)應(yīng)的比特設(shè)置為1,以防止后續(xù)添加文件操作覆蓋需隱藏的文件的MFT記錄;⑤根據(jù)虛擬簇號(hào)到邏輯簇號(hào)的映射關(guān)系,將步驟②中第6號(hào)MFT文件SBitmap中對(duì)應(yīng)的比特位設(shè)置為1,以防止后續(xù)添加文件操作覆蓋需隱藏文件的實(shí)際數(shù)據(jù)占用磁盤(pán)空間。八、步驟S8通知操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu)。本發(fā)明中,該步驟主要目的是實(shí)現(xiàn)操作系統(tǒng)文件目錄緩存的動(dòng)態(tài)刷新。具體步驟定義如下(1)調(diào)用系統(tǒng)函數(shù),通知操作系統(tǒng)需隱藏文件所在的邏輯分區(qū)文件結(jié)構(gòu)已經(jīng)改變,從而令操作系統(tǒng)重新加載新的文件結(jié)構(gòu)。從用戶的角度觀察即操作系統(tǒng)資源管理器中相關(guān)文件隱藏消失。(2)釋放執(zhí)行隱藏步驟中所有占用的資源,允許其他進(jìn)程讀寫(xiě)被修改后的文件系統(tǒng)結(jié)構(gòu)。九、步驟S9返回執(zhí)行結(jié)果。本步驟的定義如下如果上述步驟全部執(zhí)行成功,則返回執(zhí)行操作成功,允許執(zhí)行其他用戶或系統(tǒng)調(diào)用操作。如果上述步驟中某一環(huán)節(jié)執(zhí)行失敗,則根據(jù)本發(fā)明中的異常處理機(jī)制,返回失敗環(huán)節(jié)對(duì)應(yīng)的錯(cuò)誤編號(hào),允許后續(xù)錯(cuò)誤執(zhí)行的分析以及處理。從而保證隱藏操作執(zhí)行的安全可靠性。(二)數(shù)據(jù)恢復(fù)隱藏的方法Sl:需恢復(fù)隱藏文件的合法全路徑名以及對(duì)應(yīng)的MFT文件編號(hào),對(duì)該路徑名分析、分解;S2:校驗(yàn)路徑對(duì)應(yīng)的邏輯分區(qū)下是否存在對(duì)應(yīng)的各級(jí)文件夾及文件;S3:分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū),獲取該邏輯分區(qū)的相關(guān)參數(shù);S4:讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù);S5:從特定記錄文件索引遍歷,獲取臨時(shí)文件的相關(guān)的索引記錄入口;S6:按邏輯分區(qū)參數(shù)和隱藏文件的MFT編號(hào)計(jì)算出隱藏文件的MFT記錄所在的邏輯簇號(hào)后讀?。籗7:解析MFT文件記錄,讀取其中包含的SFILE一NAME屬性;S8:修改臨時(shí)文件的$INDEX—ENTRY,將該$INDEX—ENTRY中的SFILE一NAME屬性修改成隱藏文件的內(nèi)容;S9:根據(jù)需恢復(fù)隱藏的MFT文件編號(hào)以及系統(tǒng)關(guān)鍵元數(shù)據(jù),修改相應(yīng)內(nèi)容;S10:通知操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu);Sll:返回執(zhí)行結(jié)果行結(jié)果;以下具體介紹每一步驟。一、步驟S1需恢復(fù)隱藏文件的合法全路徑名以及對(duì)應(yīng)的MFT文件編號(hào),對(duì)該路徑名分析、分解。具體步驟定義如下(1)確保輸入的路徑名是否包含NTFS文件系統(tǒng)所不允許的字符。(2)將輸入的文件路徑字符串根據(jù)NTFS文件路徑的定義,分區(qū)劃分成邏輯分區(qū)命名,各級(jí)文件夾以及文件名。二、步驟S2校驗(yàn)路徑對(duì)應(yīng)的邏輯分區(qū)下是否存在對(duì)應(yīng)的各級(jí)文件夾及文件。檢査輸入路20徑指定的邏輯分區(qū)、各級(jí)文件夾、文件是否存在。如果存在,則停止執(zhí)行隱藏操作,通知異常處理機(jī)制處理相關(guān)錯(cuò)誤及返回錯(cuò)誤代碼。本步驟具體定義如下①檢查步驟Sl中獲得的文件路徑中每一級(jí)文件夾是否存在;以及當(dāng)前文件系統(tǒng)中是否存在與步驟Sl獲得的文件路徑中指代的文件的同名文件。②如果已經(jīng)存在同名文件,則結(jié)束本次恢復(fù)隱藏操作,返回用戶存在同名文件的錯(cuò)誤信息。③如果不存在同名文件,則自動(dòng)創(chuàng)建同名關(guān)聯(lián)文件夾,并再最后一級(jí)文件夾中創(chuàng)建一個(gè)與需恢復(fù)隱藏文件名一致的同名臨時(shí)文件。三、步驟S3分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū),獲取該邏輯分區(qū)的相關(guān)參數(shù)。本發(fā)明執(zhí)行恢復(fù)隱藏操作所涉及的引導(dǎo)扇區(qū)數(shù)據(jù)的數(shù)據(jù)定義如下表3所示表3<table>tableseeoriginaldocumentpage21</column></row><table>通過(guò)讀取上述這些數(shù)據(jù)就可以獲取NTFS文件系統(tǒng)的入口文件3MFT,這也是本發(fā)明修改文件系統(tǒng),執(zhí)行恢復(fù)隱藏操作的入口文件。本步驟具體定義如下①根據(jù)文件路徑,獲得讀取該文件路徑對(duì)應(yīng)的邏輯分區(qū)的系統(tǒng)1/0資源。②讀取步驟①中打開(kāi)的邏輯分區(qū)的引導(dǎo)扇區(qū)所在0號(hào)簇的數(shù)據(jù)。該0號(hào)簇記錄了當(dāng)前邏輯分區(qū)下,文件系統(tǒng)的相關(guān)重要信息。四、步驟S4讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù)。本發(fā)明執(zhí)行恢復(fù)隱藏操作中涉及的NTFS元文件定義如下表4:表4<table>tableseeoriginaldocumentpage21</column></row><table><table>tableseeoriginaldocumentpage22</column></row><table>通過(guò)步驟S3中得到的$MFT起始磁盤(pán)邏輯簇號(hào),就可以依次讀取上述元文件。其中SMFT指定其本身以及其他所有MFT文件的索引編號(hào)和物理地址。$Root是文件系統(tǒng)的根目錄"/",在所在邏輯分區(qū)下所有文件均可通過(guò)根目錄索引到。求Bitmap位圖文件定義了邏輯分區(qū)每一個(gè)簇的使用情況,占用或空閑。$BadCluS壞簇文件記錄了所在邏輯分區(qū)下磁盤(pán)壞簇編號(hào)。本步驟具體定義如下-①根據(jù)邏輯分區(qū)參數(shù),包括分區(qū)的扇區(qū)、簇、實(shí)際容量等相關(guān)信息,計(jì)算該分區(qū)下,NTFS文件結(jié)構(gòu)系統(tǒng)關(guān)鍵元數(shù)據(jù)存放的磁盤(pán)物理偏移地址。②從步驟①計(jì)算得到的系統(tǒng)關(guān)鍵元數(shù)據(jù)起始地址開(kāi)始,按照NTFS文件系統(tǒng)的定義,讀取執(zhí)行恢復(fù)隱藏文件所必須NTFS元數(shù)據(jù)。五、步驟S5從特定記錄文件索引遍歷,獲取臨時(shí)文件的相關(guān)的索引記錄入口。本步驟的定義如下-①定位并讀取文件系統(tǒng)根索引入口的頭文件,分析該記錄中記錄的所有索引實(shí)際存放的磁盤(pán)物理位置。②根據(jù)(1)中所解析的路徑名,從根索引入口開(kāi)始,按每一級(jí)文件夾的名字査找,最終獲得所要隱藏文件的父文件夾索引入口。具體步驟包括③從索引入口根據(jù)索引文件定義,找到SINDEX—ROOT屬性。④分析SINDEX一R00T屬性的屬性頭,讀取纟INDEX一ROOT屬性數(shù)據(jù)記錄。⑤以SINDEX—R00T屬性數(shù)據(jù)記錄為起始,逐個(gè)讀取SINDEX一ENTRY記錄,如果所讀取的WNDEX—ENTRY指代的信息即為所要查找的文件夾或文件,則停止步驟⑤。否則査找下一個(gè)SINDEX一ENTRY。如果已讀取到最后一個(gè)豸INDEX—ENTRY,則停止步驟⑤。如果已讀取的SINDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要査找的文件夾名或文件名,則停止步驟⑤⑥如果步驟⑤已經(jīng)獲得所要査找的文件夾或文件對(duì)應(yīng)的SINDEX—ENTRY,則結(jié)束步驟(4)。否則記錄下步驟⑤中讀取的最后一個(gè)SINDEX—ENTRY內(nèi)容,分析其中指代在SINDEX—ALLOCATION中第一個(gè)SINDEX—ENTRY偏移的信息。⑦分析纟INDEX一R00T屬性的屬性頭,讀取SINDEX—ALLOCATION屬性數(shù)據(jù)記錄。@解析記錄在$INDEX—ALLOCATION屬性頭包含的datarun數(shù)據(jù),根據(jù)定義進(jìn)行映射,從而將$INDEX—ALLOCATION實(shí)際數(shù)據(jù)屬性Dataattribute存放位置虛擬簇編號(hào)VCN映射到磁盤(pán)實(shí)際邏輯簇地址LCN。⑨以⑧中獲得的LCN為入口地址,逐個(gè)讀取$INDEX—ENTRY記錄。如果所讀取的SINDEX—ENTRY指代的信息即為所要査找的文件夾或文件,則停止步驟⑨。否則查找下一個(gè)SINDEX—ENTRY。如果已讀取到最后一個(gè)纟INDEX—ENTRY,則停止步驟(D。如果已讀取的SINDEX一ENTRY中指代的文件名按二進(jìn)制比較小于要查找的文件夾名或文件名,則停止步驟⑨。⑩如果步驟⑤已經(jīng)獲得所要査找的文件夾或文件對(duì)應(yīng)的SINDEX—ENTRY,則結(jié)束步驟(4)。否則記錄下步驟⑩中讀取的最后一個(gè)SINDEX一ENTRY內(nèi)容,分析其中指代在$INDEX—ALLOCATION中第一個(gè)SINDEX—ENTRY偏移的信息,以此為入口地址,重復(fù)步驟⑨六、步驟S6按邏輯分區(qū)參數(shù)和隱藏文件的MFT編號(hào)計(jì)算出隱藏文件的MFT記錄所在的邏輯簇號(hào)后讀取。本步驟具體定義如下根據(jù)引導(dǎo)扇區(qū)中關(guān)于SMFT文件的邏輯地址依次讀取恢復(fù)隱藏操作所必須的文件系統(tǒng)元數(shù)據(jù),其中包括SMFT、$Root、$Bitmap、$BadClus。七、步驟S7解析MFT文件記錄,讀取其中包含的SFILE—NAME屬性。NTFS文件中規(guī)定每個(gè)MFT文件記錄中包含若干個(gè)文件屬性,其中一項(xiàng)文件屬性為SFILE一N層E(0x30)。本步驟中即根據(jù)MFT文件屬性定義,讀取步驟S1中輸入的編號(hào)為n的MFT文件對(duì)應(yīng)SFILE—NAME屬性。八、步驟S8修改臨時(shí)文件的SINDEX一ENTRY,將該SINDEX—ENTRY中的SFILE—NAME屬性修改成隱藏文件的內(nèi)容,如圖7所示。本步驟具體定義如下。根據(jù)步驟S7中讀取的隱藏文件的SFILE—NAME屬性,修改步驟S5中遍歷到的臨時(shí)文件索引入口的$FILE—NAME屬性,同時(shí)將該文件索引入口指向的MFT文件修改成隱藏文件的MFT文件。九、步驟S9根據(jù)需恢復(fù)隱藏的MFT文件編號(hào)以及系統(tǒng)關(guān)鍵元數(shù)據(jù),修改相應(yīng)內(nèi)容。本步驟具體定義如下①根據(jù)文件系統(tǒng)元數(shù)據(jù)信息,査找編號(hào)為0的MFT文件SMFT記錄并解析該0號(hào)MFT文件中纟BiLmap屬性中描述虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。②根據(jù)創(chuàng)建的臨時(shí)文件的MFT編號(hào),將步驟①中第0號(hào)MFT文件描述的$Bit—map對(duì)應(yīng)的比特位設(shè)置為O,從而允許后續(xù)添加文件操作覆蓋當(dāng)前內(nèi)容,結(jié)束步驟(9)。十、步驟SIO通知操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu)。本發(fā)明中,該步驟主要目的是實(shí)現(xiàn)操作系統(tǒng)文件目錄緩存的動(dòng)態(tài)刷新。具體步驟定義如下(1)調(diào)用系統(tǒng)函數(shù),通知操作系統(tǒng)需恢復(fù)隱藏文件所在的邏輯分區(qū)文件結(jié)構(gòu)已經(jīng)改變,從而令操作系統(tǒng)重新加載新的文件結(jié)構(gòu)。從用戶的角度觀察即操作系統(tǒng)資源管理器中相關(guān)文件隱藏恢復(fù)可見(jiàn)狀態(tài)。(2)釋放執(zhí)行恢復(fù)隱藏步驟中所有占用的資源,允許其他進(jìn)程讀寫(xiě)被修改后的文件系統(tǒng)結(jié)構(gòu)。H"^—、步驟Sll返回執(zhí)行結(jié)果。本步驟的定義如下如果上述步驟全部執(zhí)行成功,則返回執(zhí)行操作成功,允許執(zhí)行其他用戶或系統(tǒng)調(diào)用操作。如果上述步驟中某一環(huán)節(jié)執(zhí)行失敗,則根據(jù)本發(fā)明中的異常處理機(jī)制,返回失敗環(huán)節(jié)對(duì)應(yīng)的錯(cuò)誤編號(hào),允許后續(xù)錯(cuò)誤執(zhí)行的分析以及處理。從而保證恢復(fù)隱藏操作執(zhí)行的安全可靠性。權(quán)利要求1、一種NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征在于,包括數(shù)據(jù)隱藏方法以及用于恢復(fù)數(shù)據(jù)隱藏的數(shù)據(jù)隱藏恢復(fù)方法,其中所述的數(shù)據(jù)隱藏的方法,具體為第一步,獲取用戶所要隱藏的文件的路徑,檢查該路徑名的合法性;并對(duì)該路徑名進(jìn)行分析、分解,包括路徑中包含的邏輯分區(qū)標(biāo)識(shí)符、各級(jí)文件夾名、需隱藏文件的文件名及其擴(kuò)展名;第二步,根據(jù)已解析的文件路徑,分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū),從而按照定義獲取該邏輯分區(qū)的相關(guān)的正確參數(shù);第三步,根據(jù)獲得的邏輯分區(qū)參數(shù),讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù);第四步,根據(jù)所獲得的系統(tǒng)關(guān)鍵元數(shù)據(jù),找到特定記錄文件索引的入口表,并遍歷文件索引,找到所要隱藏文件的相關(guān)的索引記錄入口$INDEX_ENTRY;第五步,根據(jù)所獲得的文件索引記錄入口,解析實(shí)際存放文件的文件頭以及文件自身數(shù)據(jù)所處的硬盤(pán)物理地址信息;第六步,在文件索引中刪除要隱藏文件對(duì)應(yīng)的索引記錄;第七步,根據(jù)第五步中獲得的物理地址信息,修改在第三步中獲得的所對(duì)應(yīng)系統(tǒng)關(guān)鍵元數(shù)據(jù);第八步,發(fā)送特性信息,使得操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu);第九步,返回執(zhí)行結(jié)果;所述的數(shù)據(jù)隱藏恢復(fù)方法,具體為第一步,通過(guò)輸入或讀取配置記錄文件獲取恢復(fù)文件的合法全路徑名以及對(duì)應(yīng)的MFT文件編號(hào);并對(duì)該路徑名進(jìn)行分析、分解,包括路徑中包含的邏輯分區(qū)標(biāo)識(shí)符、各級(jí)文件夾名、需隱藏文件的文件名及其擴(kuò)展名;第二步,根據(jù)已解析的文件路徑,校驗(yàn)該路徑對(duì)應(yīng)的邏輯分區(qū)下是否存在要恢復(fù)隱藏的對(duì)應(yīng)的各級(jí)文件夾及文件;第三步,根據(jù)已解析的文件路徑,分析文件所在邏輯分區(qū)的引導(dǎo)扇區(qū),從而按照定義獲取該邏輯分區(qū)的相關(guān)的正確參數(shù);第四步,根據(jù)獲得的邏輯分區(qū)參數(shù),讀取NTFS文件系統(tǒng)的系統(tǒng)關(guān)鍵元數(shù)據(jù);第五步,根據(jù)所獲得的系統(tǒng)關(guān)鍵元數(shù)據(jù),找到特定記錄文件索引的入口表,并遍歷文件索引,找到第二步中已創(chuàng)建的臨時(shí)文件的相關(guān)的索引記錄入口$INDEX_ENTRY;第六步,根據(jù)第三步所獲得邏輯分區(qū)參數(shù)以及第一步中獲得的需恢復(fù)隱藏的MFT文件編號(hào),計(jì)算出需恢復(fù)隱藏文件的MFT文件記錄所在的邏輯簇號(hào),進(jìn)一步讀取該MFT文件記錄;第七步,解析第六步獲取的MFT文件記錄,讀取其中包含的$FILE_NAME屬性;第八步,修改第五步中查找到的臨時(shí)文件的$INDEX_ENTRY,將該$INDEX_ENTRY中的$FILE_NAME屬性修改成第七步所讀取的數(shù)據(jù)內(nèi)容;第九步,根據(jù)第一步中獲得的需恢復(fù)隱藏的MFT文件編號(hào)以及第四步中獲得的系統(tǒng)關(guān)鍵元數(shù)據(jù),修改相應(yīng)內(nèi)容;第十步,發(fā)送特性信息,使得操作系統(tǒng)強(qiáng)制刷新文件目錄緩存,重新加載新的文件存儲(chǔ)結(jié)構(gòu);第十一步,返回執(zhí)行結(jié)果。2、根據(jù)權(quán)利要求1所述的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征是,所述的數(shù)據(jù)隱藏方法中的第四步,具體為①定位并讀取文件系統(tǒng)根索引入口的頭文件,分析該記錄中記錄的所有索引實(shí)際存放的磁盤(pán)物理位置;②根據(jù)第一步中所解析的路徑名,從根索引入口開(kāi)始,按每一級(jí)文件夾的名字查找,最終獲得所要隱藏文件的父文件夾索引入口;具體步驟包括③從索引入口根據(jù)索引文件定義,找到$INDEX—ROOT屬性;分析$INDEX—ROOT屬性的屬性頭,讀取豸INDEX—R00T屬性數(shù)據(jù)記錄;⑤以SINDEX—R00T屬性數(shù)據(jù)記錄為起始,逐個(gè)讀取SINDEX—ENTRY記錄,如果所讀取的SINDEX—ENTRY指代的信息即為所要查找的文件夾或文件,則停止步驟⑤;否則查找下一個(gè)SINDEX—ENTRY;如果已讀取到最后一個(gè)纟INDEX—ENTRY,則停止步驟⑤;如果已讀取的SINDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要查找的文件夾名或文件名,則停止步驟⑤;(D如果步驟⑤已經(jīng)獲得所要查找的文件夾或文件對(duì)應(yīng)的SINDEX一ENTRY,則結(jié)束第四步;否則記錄下步驟⑤中讀取的最后一個(gè)SINDEX一ENTRY內(nèi)容,分析其中指代在SlNDEX一ALLOCATION中第一個(gè)SINDEX—ENTRY偏移的信息;⑦分析SINDEX—ROOT屬性的屬性頭,讀取$INDEX—ALLOCATION屬性數(shù)據(jù)記錄;⑧解析記錄在SINDEX—ALLOCATION屬性頭包含的datarun數(shù)據(jù),根據(jù)定義進(jìn)行映射,從而將$INDEX—ALLOCATION實(shí)際數(shù)據(jù)屬性Dataattribute存放位置虛擬簇編號(hào)VCN映射到磁盤(pán)實(shí)際邏輯簇地址LCN;⑨以⑧中獲得的LCN為入口地址,逐個(gè)讀取SINDEX一ENTRY記錄;如果所讀取的SINDEX—ENTRY指代的信息即為所要查找的文件夾或文件,則停止步驟⑨;否則查找下一個(gè)SINDEX—ENTRY;如果已讀取到最后一個(gè)纟INDEX—ENTRY,則停止步驟⑨;如果已讀取的$INDEX—ENTRY中指代的文件名按二進(jìn)制比較小于要査找的文件夾名或文件名,則停止步驟⑨;⑩如果步驟⑤己經(jīng)獲得所要査找的文件夾或文件對(duì)應(yīng)的SINDEX—ENTRY,則結(jié)束第四步;否則記錄下步驟⑩中讀取的最后一個(gè)SINDEX一ENTRY內(nèi)容,分析其中指代在SINDEX—ALLOCATION中第一個(gè)$INDEX—ENTRY偏移的信息,以此為入口地址,重復(fù)步驟⑨;所述的數(shù)據(jù)隱藏恢復(fù)方法的第五步,與數(shù)據(jù)隱藏方法的第四步具體執(zhí)行步驟相同,但在文件索引中査找的是臨時(shí)文件的$INDEX_ENTRY。3、根據(jù)權(quán)利要求1所述的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征是,所述的數(shù)據(jù)隱藏方法中的第五步,具體為①解析第四步中査找文件索引得到的SINDEX—ENTRY,得到其中指定的所要隱藏文件的MFT號(hào);②根據(jù)第三步中得到的文件系統(tǒng)元數(shù)據(jù)信息,查找步驟①中得到的編號(hào)的MFT文件;③解析步驟②得到的MFT文件,解析其中包含的SDATA屬性。如果所隱藏的文件SDATA屬性標(biāo)志為resident,則結(jié)束第五步,如果所隱藏的文件SDATA屬性標(biāo)志為non-resident,則讀取SDATA屬性中描述的虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系。4、根據(jù)權(quán)利要求1所述的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征是,所述的數(shù)據(jù)隱藏方法中的第六步,具體為①刪除文件索引中所要隱藏的文件的$INDEX_ENTRY;②平衡文件索引的B+樹(shù)結(jié)構(gòu)。5、根據(jù)權(quán)利要求1所述的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征是,所述的數(shù)據(jù)隱藏方法中的第七步,具體為①根據(jù)第三步中得到的文件系統(tǒng)元數(shù)據(jù)信息,查找編號(hào)為0的MFT文件SMFT記錄并解析該0號(hào)MFT文件中SBitjnap屬性中描述虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系;②査找編號(hào)為6的MFT文件SBitmap并解析該6號(hào)MFT文件中SDATA屬性中描述的虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系;③如果所隱藏的文件SDATA屬性標(biāo)志為駐留屬性,則根據(jù)第五步中得到的需隱藏文件的MFT編號(hào),將步驟①中0號(hào)MFT文件描述的SBitjn鄰對(duì)應(yīng)的比特位設(shè)置為l,以防止后續(xù)添加文件操作覆蓋需隱藏文件的MFT記錄,結(jié)束第七步;④如果所隱藏的文件SDATA屬性標(biāo)志為非駐留屬性,則根據(jù)第五步中得到的需隱藏文件的MFT編號(hào),將步驟①中0號(hào)MFT文件描述的SBit—map對(duì)應(yīng)的比特設(shè)置為1,以防止后續(xù)添加文件操作覆蓋需隱藏的文件的MFT記錄;⑤根據(jù)第五步中得到的虛擬簇號(hào)到邏輯簇號(hào)的映射關(guān)系,將步驟②中第6號(hào)MFT文件纟Bitm鄰中對(duì)應(yīng)的比特位設(shè)置為1,以防止后續(xù)添加文件操作覆蓋需隱藏文件的實(shí)際數(shù)據(jù)占用磁盤(pán)空間。6、根據(jù)權(quán)利要求1所述的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征是,所述的數(shù)據(jù)隱藏恢復(fù)方法的第二步,具體為①檢查第一步中獲得的文件路徑是否合法;其中包括每一級(jí)文件夾是否存在;以及當(dāng)前文件系統(tǒng)中是否存在與第一步獲得的文件路徑中指代的文件的同名文件;②如果己經(jīng)存在同名文件,則結(jié)束本次恢復(fù)隱藏操作,返回用戶存在同名文件的錯(cuò)誤信息;③如果不存在同名文件,則自動(dòng)創(chuàng)建同名關(guān)聯(lián)文件夾,并再最后一級(jí)文件夾中創(chuàng)建一個(gè)與需恢復(fù)隱藏文件名一致的同名臨時(shí)文件。7、根據(jù)權(quán)利要求1所述的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其特征是,所述的數(shù)據(jù)隱藏恢復(fù)方法的第九步,具體為①根據(jù)第三步中得到的文件系統(tǒng)元數(shù)據(jù)信息,查找編號(hào)為0的MFT文件豸MFT記錄并解析該0號(hào)MFT文件中SBitjn即屬性中描述虛擬簇編號(hào)VCN到磁盤(pán)實(shí)際邏輯簇地址LCN的映射關(guān)系;②根據(jù)創(chuàng)建的臨時(shí)文件的MFT編號(hào),將步驟①中第0號(hào)MFT文件描述的求Bitjnap對(duì)應(yīng)的比特位設(shè)置為0,從而允許后續(xù)添加文件操作覆蓋當(dāng)前內(nèi)容,結(jié)束第九步。全文摘要本發(fā)明涉及一種計(jì)算機(jī)網(wǎng)絡(luò)信息
技術(shù)領(lǐng)域:
的NTFS文件系統(tǒng)下輕量級(jí)文件隱藏方法,其中數(shù)據(jù)隱藏方法為按合法的文件路徑指代的文件系統(tǒng)元數(shù)據(jù),遍歷索引中特定文件索引記錄入口,從而通過(guò)刪除、修改文件索引以及對(duì)應(yīng)文件系統(tǒng)元數(shù)據(jù)達(dá)到隱藏文件數(shù)據(jù)的目的。數(shù)據(jù)隱藏恢復(fù)方法為按合法的文件路徑以及已隱藏文件MFT記錄編號(hào),通過(guò)修改臨時(shí)文件的索引記錄入口和文件MFT記錄,從而將已隱藏的數(shù)據(jù)重新顯式鏈入文件系統(tǒng)中,達(dá)到恢復(fù)隱藏?cái)?shù)據(jù)的目的。本發(fā)明通過(guò)數(shù)據(jù)隱藏實(shí)現(xiàn)了機(jī)密數(shù)據(jù)的保密性和對(duì)其他用戶的透明性。同時(shí),最小化隱藏?cái)?shù)據(jù)執(zhí)行過(guò)程中的數(shù)據(jù)交換以及運(yùn)算開(kāi)銷(xiāo),最大程度地保護(hù)了數(shù)據(jù)完整性以及可信度。文檔編號(hào)G06F17/30GK101464900SQ20091004541公開(kāi)日2009年6月24日申請(qǐng)日期2009年1月15日優(yōu)先權(quán)日2009年1月15日發(fā)明者漳張,鄒恒明,顧夏申申請(qǐng)人:上海交通大學(xué)