訪問虛擬磁盤的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)安全技術(shù)領(lǐng)域,尤其是涉及一種訪問虛擬磁盤的方法及系統(tǒng)。
【背景技術(shù)】
[0002]在現(xiàn)在的項(xiàng)目中,對(duì)一個(gè)加密的文件進(jìn)行解密,文件比較小可以在內(nèi)存里直接進(jìn)行解密并存儲(chǔ)在字符串內(nèi)存中;在文件比較大且文件數(shù)比較多時(shí),通常是壓縮成一個(gè)文件然后再加密,在解密的過程中則是直接把它們放到一個(gè)比較隱藏且不易被用戶發(fā)現(xiàn)的文件夾里。這兩種方法不是管理有繁鎖就是安全性有問題。
[0003]圖1為現(xiàn)有技術(shù)中常規(guī)的訪問進(jìn)程處理方式。虛擬磁盤雖然可以保存數(shù)據(jù),在安全性上也面臨著同樣的問題。由于虛擬磁盤是通過驅(qū)動(dòng)層1對(duì)指定的文件進(jìn)行讀寫來實(shí)現(xiàn)的,以WINDOWS為例,虛擬磁盤需要在系統(tǒng)添加一個(gè)設(shè)備,公開磁盤的盤符,所有的進(jìn)程都可以訪問同一個(gè)虛擬磁盤。因此,對(duì)于一些比較重要的文件無法保證其數(shù)據(jù)的安全性,或者無法提高數(shù)據(jù)的安全性門檻。具體地,數(shù)據(jù)暴露在虛擬盤符對(duì)應(yīng)的磁盤下,很容易被發(fā)現(xiàn)并訪問,甚至篡改;不能進(jìn)行進(jìn)程隔離,所有的進(jìn)程都可以訪問磁盤,在系統(tǒng)感染病毒后數(shù)據(jù)安全無法保證。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是:提供訪問虛擬磁盤的新方式,提高虛擬磁盤的安全性。
[0005]為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:提供一種訪問虛擬磁盤的方法,包括:
[0006]啟動(dòng)工程,加載虛擬磁盤模塊,注冊(cè)對(duì)應(yīng)于虛擬磁盤路徑的盤符;
[0007]攔截訪問虛擬磁盤進(jìn)程有關(guān)的API函數(shù),使得系統(tǒng)在調(diào)用所述API函數(shù)時(shí),先處理虛擬磁盤模塊的文件操作模擬函數(shù);
[0008]返回對(duì)模擬函數(shù)的處理結(jié)果到系統(tǒng)API函數(shù)中,并輸出結(jié)果參數(shù)。
[0009 ]為解決上述問題,本發(fā)明還提供一種訪問虛擬磁盤的系統(tǒng),包括:
[0010]加載注冊(cè)模塊,用于啟動(dòng)工程,加載虛擬磁盤模塊,注冊(cè)對(duì)應(yīng)于虛擬磁盤路徑的盤符;
[0011]攔截處理模塊,用于攔截訪問虛擬磁盤進(jìn)程有關(guān)的API函數(shù),使得系統(tǒng)在調(diào)用所述API函數(shù)時(shí),先處理虛擬磁盤模塊的文件操作模擬函數(shù);
[0012]結(jié)果輸出模塊,用于返回對(duì)模擬函數(shù)的處理結(jié)果到系統(tǒng)API函數(shù)中,并輸出結(jié)果參數(shù)。
[0013]本發(fā)明的有益效果在于:區(qū)別于現(xiàn)有技術(shù),本發(fā)明開始后即加載虛擬磁盤模塊,并攔截訪問虛擬磁盤進(jìn)程有關(guān)的API函數(shù),是的系統(tǒng)在調(diào)用時(shí),優(yōu)先處理虛擬磁盤模塊的文件操作模擬函數(shù),并輸出處理結(jié)果。通過上述方式,本發(fā)明的集成可以正常訪問所要的數(shù)據(jù),并同時(shí)實(shí)現(xiàn)進(jìn)程隔離,提升虛擬磁盤的安全性。
【附圖說明】
[0014]圖1為現(xiàn)有技術(shù)進(jìn)程訪問的常規(guī)方式示意圖;
[0015]圖2為本發(fā)明方法實(shí)施例一的流程示意圖;
[0016]圖3為本發(fā)明系統(tǒng)實(shí)施例二的結(jié)構(gòu)框圖;
[0017]圖4為應(yīng)用本發(fā)明方法的具體實(shí)施例中的流程示意圖。
【具體實(shí)施方式】
[0018]為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖予以說明。
[0019]本發(fā)明最關(guān)鍵的構(gòu)思在于:基于應(yīng)用層來實(shí)現(xiàn)的一種虛擬磁盤方法,通過API攔截技術(shù),對(duì)磁盤訪問進(jìn)行API重定位,向虛擬磁盤注冊(cè)盤符,通過調(diào)用系統(tǒng)API以指定文件所在自定義盤符的路徑,進(jìn)程就可以正常的訪問到所要的數(shù)據(jù)。
[0020]請(qǐng)參照?qǐng)D1,本發(fā)明實(shí)施例一提供一種訪問虛擬磁盤的方法,包括:
[0021 ] SI:啟動(dòng)工程,加載虛擬磁盤模塊,注冊(cè)對(duì)應(yīng)于虛擬磁盤路徑的盤符;
[0022]S2:攔截訪問虛擬磁盤進(jìn)程有關(guān)的API函數(shù),使得系統(tǒng)在調(diào)用所述API函數(shù)時(shí),先處理虛擬磁盤模塊的文件操作模擬函數(shù);
[0023]S3:返回對(duì)模擬函數(shù)的處理結(jié)果到系統(tǒng)API函數(shù)中,并輸出結(jié)果參數(shù)。
[0024]本發(fā)明基于應(yīng)用層來實(shí)現(xiàn)的一種虛擬磁盤方法,通過API攔截技術(shù),對(duì)磁盤訪問進(jìn)行API重定位,進(jìn)程不需要向系統(tǒng)添加硬件設(shè)備,只要調(diào)用者向虛擬磁盤注冊(cè)一個(gè)自定義的盤符即可,通過調(diào)用系統(tǒng)API,指定文件所在自定義盤符的路徑,進(jìn)程就可以正常的訪問到所要的數(shù)據(jù)。這與在程序中訪問某個(gè)盤符的磁盤代碼原理相同,但與基于驅(qū)動(dòng)層實(shí)現(xiàn)的虛擬磁盤不同,且在安全性方面高于驅(qū)動(dòng)層虛擬磁盤。
[0025]應(yīng)當(dāng)理解的是,本發(fā)明所述的API攔截函數(shù)是用于攔截API的函數(shù),而系統(tǒng)API函數(shù)是被攔截的函數(shù)。
[0026]具體地,在調(diào)用者的工程中,通過加載虛擬磁盤模塊,向虛擬磁盤注冊(cè)盤符,此盤符對(duì)應(yīng)虛擬磁盤的路徑。
[0027]其中,步驟S2具體為:
[0028]獲取API函數(shù)對(duì)虛擬磁盤的訪問進(jìn)程;
[0029]API攔截函數(shù)判斷訪問進(jìn)程是否訪問虛擬磁盤;
[0030]若是,則處理虛擬磁盤模塊的文件操作模擬函數(shù)后,將處理結(jié)果通過返回值或參數(shù)返回給調(diào)用者;
[0031]反之,則直接由系統(tǒng)API函數(shù)進(jìn)行操作,即執(zhí)行后續(xù)邏輯請(qǐng)求,并將結(jié)果返回給調(diào)用者。
[0032]其中,系統(tǒng)API函數(shù)不被操作,而是直接返回?cái)?shù)值或結(jié)果。因?yàn)樗僮鞯氖翘摂M磁盤,如果由系統(tǒng)API函數(shù)返回的話,程序會(huì)操作本地磁盤從而引起錯(cuò)誤。
[0033]而在實(shí)際操作時(shí),API攔截函數(shù)判斷訪問進(jìn)程是否訪問虛擬磁盤可通過下述兩種方式實(shí)現(xiàn),即
[0034]API攔截函數(shù)通過盤符判斷訪問進(jìn)程是否訪問虛擬磁盤;或
[0035]API攔截函數(shù)通過訪問文件的標(biāo)識(shí)判斷訪問進(jìn)程是否訪問虛擬磁盤。
[0036]其中,在操作模擬函數(shù)之前,需要虛擬磁盤模塊創(chuàng)建儲(chǔ)存空間,用于存儲(chǔ)文件的標(biāo)識(shí)、數(shù)據(jù)信息,儲(chǔ)存空間可以在程序開始前就創(chuàng)建,或者在其他步驟操作時(shí)進(jìn)行;
[0037]而對(duì)應(yīng)地,處理虛擬磁盤模塊的文件操作模擬函數(shù)的步驟具體為:
[0038]在訪問文件時(shí),訪問進(jìn)程指定虛擬磁盤路徑,系統(tǒng)API函數(shù)從文件系統(tǒng)中獲取文件在磁盤中的存儲(chǔ)位置,并返回對(duì)應(yīng)標(biāo)識(shí);
[0039 ]通過對(duì)應(yīng)標(biāo)識(shí),虛擬磁盤模塊的文件系統(tǒng)獲取文件在虛擬磁盤中的位置;
[0040]根據(jù)文件的數(shù)據(jù)信息及虛擬磁盤模塊文件系統(tǒng)的文件游標(biāo)位置信息,讀取或?qū)懭霐?shù)據(jù)。
[0041]而在返回結(jié)果時(shí),可通過調(diào)用虛擬磁盤模塊文件系統(tǒng)的相應(yīng)函數(shù)來獲取數(shù)據(jù),并返回給調(diào)用者。
[0042]具體地,在虛擬磁盤模塊被加載后,會(huì)對(duì)此進(jìn)程的相關(guān)API函數(shù)進(jìn)行攔截,以windows為例(其它系統(tǒng)原理類似),通過對(duì)CreateFiIe、WriteFiIe、ReadFiIe等對(duì)磁盤操作的相關(guān)函數(shù)進(jìn)行攔截,使得系統(tǒng)在調(diào)用這些函數(shù)時(shí)優(yōu)先去處理虛擬磁盤模塊的文件操作函數(shù)。攔截函數(shù)會(huì)先判斷訪問的對(duì)象是否是虛擬磁盤(在CreateFi Ie是以盤符來判斷,在其它函數(shù)以其它標(biāo)識(shí)來判斷,如句柄。如果是操作虛擬磁盤,則對(duì)虛擬磁盤數(shù)據(jù)進(jìn)行處理;否則直接把操作提交給系統(tǒng)API。處理完模擬函數(shù)后,再將結(jié)果返回到系統(tǒng)API的返回值中,如附圖所示。對(duì)磁盤操作的所有系統(tǒng)API函數(shù)進(jìn)行攔截和模擬,完全可以控制對(duì)磁盤的操作。對(duì)于虛擬磁盤模塊調(diào)用者來說,對(duì)虛擬磁盤的操作與對(duì)物理磁盤的操作沒有什么不一樣。
[0043]在虛擬磁盤模塊被加載時(shí),虛擬磁盤模塊會(huì)創(chuàng)建儲(chǔ)存空間。當(dāng)進(jìn)程指定虛擬磁盤路徑并打開一個(gè)文件時(shí),函數(shù)會(huì)先從文件系統(tǒng)中找到文件在磁盤中存放的位置,然后返回文件位置對(duì)應(yīng)的標(biāo)識(shí),此標(biāo)識(shí)是文件在虛擬磁盤中唯一的標(biāo)識(shí)(比如句柄)。在對(duì)文件進(jìn)行讀寫操作時(shí),虛擬磁盤模塊的文件系統(tǒng)會(huì)用標(biāo)識(shí)找到文件所在的位置,然后根據(jù)要讀取數(shù)據(jù)的長(zhǎng)度或要寫入的數(shù)據(jù)和文件系統(tǒng)記錄的文件游標(biāo)位置,讀取或?qū)懭霐?shù)據(jù)。虛擬磁盤模塊通過調(diào)用文件系統(tǒng)的相應(yīng)的函數(shù)來獲取數(shù)據(jù),并返回給調(diào)用者。
[0044]通過加載虛擬磁盤模塊,此模塊成為此進(jìn)程的一個(gè)子模塊,在操作系統(tǒng)中,進(jìn)程是獨(dú)立的,不會(huì)互相干擾。因此,虛擬磁盤的攔