專利名稱:一種文件、文件夾解鎖和刪除方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及安全軟件領(lǐng)域,尤其涉及ー種文件、文件夾解鎖和刪除方法及系統(tǒng)。
背景技術(shù):
計算機病毒最早出現(xiàn)在70年代David Gerrold科幻小說When H. A. R. L. I. E. wasOne中,計算機病毒是指“編制者在計算機程序中插入的破壞計算機功能或者破壞數(shù)據(jù),影響計算機使用并且能夠自我復(fù)制的一組計算機指令或者程序代碼。計算機一旦染上病毒,計算機通常表現(xiàn)為其文件被増加、刪出、改變名稱或?qū)傩?、移動到其它目錄下,病毒對計算機文件的這些操作,可能會導(dǎo)致正常的程序無法運行、計算機操作系統(tǒng)崩潰、計算機被遠(yuǎn)程控制、用戶信息被盜用等一系列的問題。為了保證計算機的安全運行,需要對計算機中感染病毒的文件進行病毒查殺,以防止和清除病毒的破壞。在安全軟件領(lǐng)域,針對染毒計算機文件的“刪除”與“反刪除”是安 全軟件和惡意程序(計算機病毒)對抗的永恒主題之一。現(xiàn)有技術(shù)中的病毒,往往通過占用文件句柄、設(shè)置文件只讀屬性、使文件處于刪除狀態(tài)等手段給染毒文件加上了加密鎖,采用常規(guī)手段無法破解加密鎖即無法刪除染毒文件,這些手段阻止殺毒軟件查殺染毒文件。安全軟件查殺病毒的過程,可以理解為對染毒文件進行解鎖和粉碎?,F(xiàn)有安全軟件,對染毒文件的解鎖和粉碎手段単一,無法破除染毒文件設(shè)置的層層保護,對抗能力不強。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供ー種文件、文件夾解鎖和刪除的方法及系統(tǒng),能夠徹底的刪除感染病毒的文件。為了解決上述問題,本發(fā)明公開了ー種文件或文件夾解鎖方法,包括接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置;如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。進ー步的,清除文件或文件夾限制設(shè)置,包括如果存在只讀鎖定,則去除只讀鎖定;如果存在例程鎖定,則去除例程鎖定;如果存在權(quán)限限制,則添加相應(yīng)權(quán)限;如果存在句柄占用,則關(guān)閉句柄。進ー步的,文件限制設(shè)置為只讀鎖定、例程鎖定、權(quán)限限制或句柄占用中的任ー種或多種組合。進ー步的,文件夾限制設(shè)置為只讀鎖定、權(quán)限限制或句柄占用中的任ー種或多種組合。進ー步的,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件包括判斷數(shù)值型輸入?yún)?shù)是否在預(yù)設(shè)范圍內(nèi);判斷是否存在沖突參數(shù);判斷地址型輸入?yún)?shù),必須具有對應(yīng)的權(quán)限;判斷對于要反復(fù)訪問、讀取的用戶態(tài)地址/結(jié)構(gòu),是否在內(nèi)核里重構(gòu)出ー份同樣的地址/結(jié)構(gòu)。進ー步的,如果所述校驗參數(shù)不符合預(yù)設(shè)條件,則結(jié)束解鎖。
進ー步的,去除請求解鎖文件的例程鎖定是通過調(diào)用驅(qū)動切換進行環(huán)境完成去除例程鎖定。進ー步的,該解鎖方法還包括設(shè)置與文件或文件夾解鎖過程中錯誤信息相對應(yīng)的錯誤碼;調(diào)用GetLastError例程獲得文件或文件夾解鎖過程中詳細(xì)的錯誤信息。本發(fā)明還公開了ー種文件或文件夾刪除方法,包括接收刪除請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;如果所述校驗參數(shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;構(gòu)建與操作系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊;重構(gòu)文件或文件夾刪除請求用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間;清除文件或文件夾限制設(shè)置;基于穿透技術(shù)打開請求刪除文件或文件夾;構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處;文件或文件夾引用計數(shù) 清零;刪除文件或文件夾。進ー步的,清除文件或文件夾限制設(shè)置包括如果存在只讀鎖定,則去除只讀鎖定;如果存在例程鎖定,則去除例程鎖定;如果存在權(quán)限限制,則添加相應(yīng)權(quán)限;如果存在句柄占用,則關(guān)閉句柄。進ー步的,基于穿透技術(shù)打開請求刪除文件或文件夾包括獲取文件或文件夾操作請求,所述請求中包括調(diào)用者輸入?yún)?shù),所述輸入?yún)?shù)中包括文件或文件夾路徑;依據(jù)所述文件或文件夾路徑在對象管理器中查找對應(yīng)的文件或文件夾對象解析例程;若查找到對應(yīng)的文件或文件夾對象解析例程,則依據(jù)所述文件或文件夾對象解析例程生成I/o請求包,并發(fā)送至預(yù)置的文件或文件夾系統(tǒng)下層設(shè)備的原始地址。進ー步的,該刪除方法還包括當(dāng)基于穿透技術(shù)無法打開請求刪除文件時,切換進程關(guān)閉操作。進ー步的,該刪除方法還包括設(shè)置與文件或文件夾刪除過程中錯誤信息相對應(yīng)的錯誤碼;調(diào)用GetLastError例程獲得文件或文件夾刪除過程中詳細(xì)的錯誤信息。進ー步的,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件包括判斷數(shù)值型輸入?yún)?shù)是否在預(yù)設(shè)范圍內(nèi);判斷是否存在沖突參數(shù);判斷地址型輸入?yún)?shù),必須具有對應(yīng)的權(quán)限;判斷對于要反復(fù)訪問、讀取的用戶態(tài)地址/結(jié)構(gòu),是否在內(nèi)核里重構(gòu)出ー份同樣的地址/結(jié)構(gòu)。本發(fā)明還公開了ー種文件或文件夾解鎖系統(tǒng),包括解鎖接收裝置,用于接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;解鎖處理裝置,用于如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;解鎖清除裝置,用于判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置;解鎖裝置,用于如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。本發(fā)明還公開了ー種文件或文件夾刪除系統(tǒng),包括刪除接收裝置,用于接收刪除請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;刪除處理裝置,用于如果所述校驗參數(shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;刪除構(gòu)建裝置,用于構(gòu)建與操作系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊;刪除重構(gòu)裝置,用于重構(gòu)刪除請求用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間;刪除清除裝置,用于清除文件或文件夾限制設(shè)置;刪除打開裝置,用于基于穿透技術(shù)打開請求刪除文件或文件夾;刪除發(fā)送裝置,用于構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處;刪除清零裝置,用于文件或文件夾引用計數(shù)清零;刪除裝置,用于刪除文件或文件夾。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點
本發(fā)明的文件、文件夾解鎖方法,通過去除只讀鎖定、去除例程鎖定、添加權(quán)限、關(guān)閉句柄等多種手段層層破除染毒文件可能設(shè)置的保護,増加了安全軟件與惡意程序的對抗能力。本發(fā)明的文件、文件夾刪除方法中,通過應(yīng)用穿透技術(shù)去除只讀鎖定、打開文件和通過向文件系統(tǒng)原始地址處發(fā)送IRP(I/O request packets,輸入輸出請求包)刪除請求,文件引用計數(shù)清零操作,避免了因文件操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性。
圖I為本發(fā)明方法實施例I所示一種文件或文件夾解鎖方法的流程圖;圖2為本發(fā)明方法實施例I中判斷地址型輸入?yún)?shù)時所對應(yīng)的IopCreateFile函數(shù)的代碼;
圖3為本發(fā)明方法實施例I中判斷對于要反復(fù)訪問、讀取的用戶態(tài)地址/結(jié)構(gòu),是否在內(nèi)核里重構(gòu)出ー份同樣的地址/結(jié)構(gòu)所對應(yīng)的IopCreateFile函數(shù)的代碼;圖4為本發(fā)明方法實施例2中的一種文件或文件夾刪除方法的流程圖;圖5為本發(fā)明方法實施例3中,文件解鎖方法的流程圖;圖6為本發(fā)明方法實施例4中,文件刪除方法的流程圖;圖7為本發(fā)明系統(tǒng)實施例5中一種文件或文件夾解鎖系統(tǒng)結(jié)構(gòu)示意圖;圖8為本發(fā)明系統(tǒng)實施例6中一種文件或文件夾刪除系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式
作進ー步詳細(xì)描述。以下實例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。本發(fā)明的核心思想在于采用多種手段破除染毒文件的層層保護鎖,増加了安全軟件與惡意程序的對抗能力;通過應(yīng)用穿透技術(shù)去除只讀鎖定和打開文件和通過向文件系統(tǒng)原始地址處發(fā)送IRP刪除請求,文件引用計數(shù)清零操作,避免了因文件操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性的。實施例1,參考圖1,示出了一種文件或文件夾解鎖方法,具體可以包括步驟101,接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;步驟102,如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;步驟103,判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置;步驟104,如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。在實施步驟104時,清除文件或文件夾限制設(shè)置,可以包括如果存在只讀鎖定,則去除只讀鎖定;如果存在例程鎖定,則去除例程鎖定;如果存在權(quán)限限制,則添加相應(yīng)權(quán)限;如果存在句柄占用,則關(guān)閉句柄。文件限制設(shè)置可以是只讀鎖定、例程鎖定、權(quán)限限制或句柄占用中的任ー種或多種組合。文件夾限制設(shè)置可以是只讀鎖定、權(quán)限限制或句柄占用中的任ー種或多種組合。例程鎖定一般只針對文件進行,當(dāng)然了,如果在清除文件夾限制設(shè)置中増加了例程鎖定去除的動作,那么就會返回沒有文件夾例程鎖定的信息,因此文件/文件夾的清除限制設(shè)置也可以是設(shè)置為相同的限制設(shè)置。其中去除存在例程鎖定的請求解鎖文件或文件夾的例程鎖定,這里的例程鎖定可以是Windows API LockFile例程鎖定。在具體實施時,去除請求解鎖文件或文件夾的例程鎖定可以通過調(diào)用驅(qū)動切換進行環(huán)境完成去除例程鎖定。在實施步驟101時,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件的具體實施可以參見如下例子舉ー個例子,內(nèi)核態(tài)函數(shù)IopCreateFile是用戶態(tài)函數(shù)CreateFile的最終實現(xiàn)?;诖┩讣夹g(shù)打開邏輯中完全模擬了 IopCreateFile,包括姆ー個參數(shù)細(xì)節(jié)。IopCreateFile的
函數(shù)原型如下
NTSTATUS· IoDCreateFile {
OUT PHANDLE FileHandle,
IN ACCESS—MASK DesiredAccess,
IN POBJECT—ATTRIBUTES ObjectAttributes,
OUT PIO—STATUS—BLCOK IoStatusBlock,
IN PLARGE—INTEGER AllocationSize OPTIONAL,
IN ULONG FileAttributes,
IN ULONG ShareAccess,
IN ULONG Disposition,
IN ULONG CreateOptions,
IN PVOID EaBuffer OPTIONAL,
IN ULONG EaLength,
IN CREATE—FILE—TYPE CreateFileType,
IN PVOID ExtraCreateParameters OPTIONAL,
IN ULONG Options,
IN ULONG InternalFlags,
IN PVOID DeviceObject}IN表示這個參數(shù)是輸入,即輸入給IopCreateFile函數(shù);0UT表示這個參數(shù)是輸出,即從IopCreateFile函數(shù)輸出。所有的IN參數(shù)都要被校驗正確性,所有的OUT參數(shù)都要校驗(接收OUT的地址)可寫性。IopCreateFile校驗這些參數(shù)一共用了 467行代碼,校驗的原則可以包括(I)判斷數(shù)值型輸入?yún)?shù)是否在預(yù)設(shè)范圍內(nèi)。例如以下代碼所示
Il
//Check that no invalid file attributes flags were specified.
Il
Il (FileAttributes & FILE—ATTRIBUTE—VALID—SET—FLAGS)(FileAttributes & FILE—ATTRIBUTE—VALID FLAGS)
Il
// Check that no invalid share access flags were specified.
Il
(ShareAccess & FILE—SHARE—VALID—FLAGS)
//
//Ensure that the disposition value is in range.
Il
(Disposition > FILE—MAXIMUM—DISPOSITION)(2)判斷是否存在沖突參數(shù);如文件的屬性“可寫(Writeable) ”和“只讀(Readonly) ”是矛盾(incompatible)的,不能同時指定,可參見如下代碼所示
Il
Il FILE—COMPLETE—IF—OPLOCK and FILE—RESERVE—OPFILTER are // incompatible option.
Il
((CreateOptions & FILE—COMPLETE—IF—OPLOCKED) &&
(CreateOptions & FILE—RESERVE—OPFILTER))(3)判斷地址型輸入?yún)?shù),必須具有對應(yīng)的權(quán)限;所有的用戶態(tài)指針(“地址型”輸入?yún)?shù)),必須具有對應(yīng)的權(quán)限(比如,需要讀取某用戶態(tài)地址,那么這個用戶態(tài)地址首先必須是“可讀的(readable) ”;需要寫入某用戶態(tài)地址,那么這個用戶態(tài)地址首先必須是“可寫的(Writeable) ”)。具體可以參見圖2所示。(4)判斷對于要反復(fù)訪問、讀取的用戶態(tài)地址/結(jié)構(gòu),是否在內(nèi)核里重構(gòu)出ー份同樣的地址/結(jié)構(gòu)。對應(yīng)IopCreateFile函數(shù)的代碼可以參見圖3所示。在進行步驟101時,如果校驗參數(shù)不符合預(yù)設(shè)條件吋,則可以直接結(jié)束文件或文件夾解鎖進程。在實施步驟103吋,如果經(jīng)過矯正的待解鎖文件或文件夾不存在限制設(shè)置,則結(jié)束解鎖。
在上述實施例I中,步驟101,102可以是在操作系統(tǒng)用戶態(tài)狀態(tài)下進行,其它步驟可以是在操作系統(tǒng)內(nèi)核態(tài)狀態(tài)下進行。在上述實施例I中,為了了解文件解鎖的情況,還可以包括下述步驟設(shè)置與文件解鎖過程中錯誤信息相對應(yīng)的錯誤碼;調(diào)用GetLastError例程獲得文件解鎖過程中詳細(xì)的錯誤信息。這里調(diào)用GetLastError例程的調(diào)用者,可以是位于用戶態(tài)的調(diào)用者調(diào)用GetLastError例程。為了使得獲得的錯誤信息同步,可以設(shè)置為內(nèi)核同步調(diào)用返回用戶態(tài)調(diào)用結(jié)果。如果調(diào)用失敗,用戶態(tài)接ロ可以設(shè)置相應(yīng)的錯誤碼,這樣,調(diào)用者線程可以通過GetLastError例程得到詳細(xì)的錯誤信息。為了使得內(nèi)核接ロ同用戶態(tài)導(dǎo)出接ロ對應(yīng),F(xiàn)ILE_I0_F0RCE_KILL_FILE,FI LE_10_F0RCE_K I LL_D I RECTORY, FILE_I0_GET_L0CK, FILE_I0_SET_L0CK 等控制 碼定義了用戶態(tài)和內(nèi)核態(tài)驅(qū)動通信時的統(tǒng)一標(biāo)識。通信的輸入、輸出緩沖區(qū)采用METH0D_BUFFERED方式傳輸。通信結(jié)構(gòu)兼容32位、64位以及32位兼容模式。實施例2,給出了一種文件或文件夾刪除方法的流程圖,參考圖4,包括步驟401,接收刪除請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;步驟402,如果所述校驗參數(shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;步驟403,構(gòu)建與操作系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊;步驟404,重構(gòu)文件或文件夾刪除請求用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間;步驟405,清除文件或文件夾限制設(shè)置;步驟406,基于穿透技術(shù)打開請求刪除文件或文件夾;步驟407,構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處;步驟408,文件或文件夾引用計數(shù)清零;步驟409,刪除文件或文件夾。在具體實施時,可以是接收調(diào)用者進程發(fā)起的FSForceKill文件刪除過程;可以是FSForceKill例程內(nèi)部接收用戶請求,校驗輸入?yún)?shù)。在處理畸形路徑格式和特殊文件名之后,例程判斷當(dāng)前操作系統(tǒng)平臺(32位、64位或32位兼容模式)及版本,構(gòu)建結(jié)構(gòu)參數(shù)塊,發(fā)送控制碼FILE_I0_F0RCE_KILL_FILE到操作系統(tǒng)內(nèi)核,并同步等待返回。FSForceKill例程內(nèi)核部分接收用戶態(tài)請求,可以再次校驗輸入?yún)?shù)之后,重構(gòu)用戶態(tài)地址到內(nèi)核內(nèi)存空間?;诖┩讣夹g(shù)去除存在只讀鎖定的請求刪除文件的只讀鎖定基于穿透技術(shù)打開請求刪除文件;在現(xiàn)有技術(shù)中,實現(xiàn)穿透的方法可以根據(jù)需要選擇,不再贅述。構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件系統(tǒng)原始地址處;該步驟可以使得文件系統(tǒng)調(diào)用棧上的第三方過濾驅(qū)動(其他安全軟件、驅(qū)動級惡意程序)被旁路,増加了應(yīng)用本發(fā)明方法的安全軟件與其它安全軟件的兼容性。在遇到對于STATUS_DELETE_PENDING等無法穿透打開的目標(biāo)文件,可以驅(qū)動嘗試全局句柄枚舉、切換進程關(guān)閉等操作。在文件刪除實施例個,為了了解文件刪除的情況,還可以包括下述步驟設(shè)置與文件刪除過程中錯誤信息相對應(yīng)的錯誤碼;調(diào)用GetLastError例程獲得文件刪除過程中詳細(xì)的錯誤信息。
這里調(diào)用GetLastError例程的調(diào)用者,可以是位于用戶態(tài)的調(diào)用者調(diào)用GetLastError例程。為了使得獲得的錯誤信息同步,可以設(shè)置為內(nèi)核同步調(diào)用返回用戶態(tài)調(diào)用結(jié)果。如果調(diào)用失敗,用戶態(tài)接ロ可以設(shè)置相應(yīng)的錯誤碼,這樣,調(diào)用者線程可以通過GetLastError例程得到詳細(xì)的錯誤信息。步驟407構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處和步驟408文件或文件夾引用計數(shù)清零的關(guān)系是“串行”的,即這兩個步驟可以是兩個獨立的步驟,在步驟407發(fā)送IRP刪除請求數(shù)據(jù)包刪除文件或文件夾未成功的時候,步驟408文件或文件夾引用計數(shù)清零則可以有效的刪除文件或文件夾。如果步驟407發(fā)送IRP刪除請求可以刪除文件或文件夾,那么也可以不進行文件或文件夾引用計數(shù)清零的步驟。
在上述實施例2中,按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名可以通過調(diào)用 FSDeleteFileA/FSDeleteFileW 例程來完成,F(xiàn)SDeleteFileA/FSDeleteFileW 導(dǎo)出例程嚴(yán)格遵守Windows標(biāo)準(zhǔn)API的定義和參數(shù)。FSDeleteFileA會轉(zhuǎn)換輸入?yún)?shù)為UNICODE類型,F(xiàn)SDeleteFileW可以處理畸形文件名、文件路徑并實際完成參數(shù)轉(zhuǎn)換、控制碼通信等。調(diào)用FSDeleteFileW例程后,該例程的內(nèi)核部分可以再次校驗用戶態(tài)傳入?yún)?shù)后,構(gòu)建并終填充并發(fā)送IRP請求包至文件系統(tǒng)設(shè)備對象處,即,發(fā)送至文件系統(tǒng)原始地址處,完成文件穿透刪除過程。FSForceKill內(nèi)核部分還可以完成清零文件或文件夾引用計數(shù)。在實施步驟401時,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件的具體實施可以參見上述實施例I的具體操作方法,不再贅述。下面詳細(xì)對應(yīng)用本發(fā)明方法的360安全軟件所使用的接ロ及主要函數(shù)進行描述,為了便于理解還在附圖中給出了具體的流程圖。接ロ及主要函數(shù)描述360安全軟件在文件、文件夾解鎖、刪除用戶態(tài)部分共導(dǎo)出了 7個例程,這套接ロ涵蓋了文件解鎖與粉碎的大部分需求(導(dǎo)出包括FSDeleteFile、FSForceKill、FSRemoveDirectory、GetFileLock、SetFileLock 等,這些例程的調(diào)用方式上區(qū)分UNICODE和ANSI輸入),接ロ的“調(diào)用約定”、“調(diào)用參數(shù)”和同名Windows標(biāo)準(zhǔn)API —致。和導(dǎo)出接ロ對應(yīng),F(xiàn)ILE_I0_F0RCE_KILL_FILE、FI LE_10_F0RCE_K I LL_D I RECTORY,FILE_I0_GET_L0CK、FILE_I0_SET_L0CK等控制碼定義了用戶態(tài)和內(nèi)核態(tài)驅(qū)動通信時的統(tǒng)一標(biāo)識。通信的輸入、輸出緩沖區(qū)采用METH0D_BUFFERED方式傳輸。通信結(jié)構(gòu)兼容32位、64位以及32位兼容模式。以文件穿透刪除過程為例,F(xiàn)SDeleteFileA/FSDeleteFileW導(dǎo)出例程嚴(yán)格遵守Windows標(biāo)準(zhǔn)API的定義和參數(shù)。FSDeleteFileA會轉(zhuǎn)換輸入?yún)?shù)為UNICODE類型,F(xiàn)SDeleteFileW可以處理畸形文件名、文件路徑并實際完成參數(shù)轉(zhuǎn)換、控制碼通信等。FSDeleteFileW的內(nèi)核部分會校驗用戶態(tài)傳入?yún)?shù),構(gòu)建并終填充并發(fā)送IRP請求包至文件系統(tǒng)設(shè)備對象處,完成文件穿透刪除過程。FSForceKill的內(nèi)核部分會清零文件引用計數(shù),全局枚舉、關(guān)閉句柄等。實施例3給出了文件解鎖的具體過程,參考圖5,可以包括如下步驟調(diào)用者進程發(fā)起 GetFileLock/SetFileLock 文件解鎖過程;GetFileLock/SetFileLock 例程內(nèi)部接收用戶請求,校驗輸入?yún)?shù);在處理畸形路徑格式和特殊文件名之后,判斷目標(biāo)文件是否具有只讀屬性,如果存在只讀鎖定,則去除存在只讀鎖定的請求解鎖文件的只讀鎖定;判斷目標(biāo)文件是否被Windows APILockFile例程鎖定;如果目標(biāo)文件被LockFile例程鎖定,調(diào)用驅(qū)動切換進程環(huán)境解鎖文件;判斷目標(biāo)文件是否存在權(quán)限、所有者限制;如果目標(biāo)文件存在權(quán)限限制則添加相應(yīng)權(quán)限;判斷目標(biāo)文件是否存在句柄占用情況;如果目標(biāo)文件存在句柄占用,調(diào)用驅(qū)動全局句柄枚舉過程關(guān)閉句柄、解鎖文件;內(nèi)核同步調(diào)用返回用戶態(tài)調(diào)用結(jié)果,如果調(diào)用失敗,用戶態(tài)接ロ可以設(shè)置相應(yīng)的錯誤碼,這樣,調(diào)用者線程可以通過GetLastError例程得到詳細(xì)的錯誤信息。實施例4給出了文件刪除的具體過程,參考圖6,可以包括如下步驟調(diào)用者進程發(fā)起FSForceKill文件粉碎過程;FSForCeKill例程內(nèi)部接收用戶請求,校驗輸入?yún)?shù)。在處理畸形路徑格式和特殊文件名之后,例程判斷當(dāng)前操作系統(tǒng)平臺(32位、64位或32位兼容模式)及版本,構(gòu)建結(jié)構(gòu)參數(shù)塊,發(fā)送控制碼FILE_IO_FORCE_KILL_FILE并同步等待返回;FSForceKill例程內(nèi)核部分接收用戶態(tài)請求,校驗環(huán)三輸入?yún)?shù),Captured用戶態(tài)地址到內(nèi)核內(nèi)存空間;基于穿透技術(shù)判斷、去除目標(biāo)文件只讀屬性;基于穿透技術(shù)打開目標(biāo)文件,構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件系統(tǒng)原始地址處,此時,文件系統(tǒng)調(diào)用棧上的第三方過濾驅(qū)動(其他安全軟件、驅(qū)動級惡意程序)被旁路;對于STATUS_DELETE_ PENDING等無法穿透打開的目標(biāo)文件,驅(qū)動嘗試全局句柄枚舉、切換進程關(guān)閉等對文件進行刪除的操作;如必要驅(qū)動將進行文件引用計數(shù)清零操作;內(nèi)核同步調(diào)用返回用戶態(tài)調(diào)用結(jié)果。如果調(diào)用失敗,用戶態(tài)接ロ可以設(shè)置相應(yīng)的錯誤碼,這樣,調(diào)用者線程可以通過GetLastError例程得到詳細(xì)的錯誤信息。實施例5還公開了一種文件或文件夾解鎖系統(tǒng),參考圖7。文件或文件夾解鎖系統(tǒng)系統(tǒng)包括解鎖接收裝置701,用于接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;解鎖處理裝置702,用于如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;解鎖清除裝置703,用于判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置;解鎖裝置704,用于如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。解鎖接收裝置701接收到用戶的解鎖請求之后,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件,如果不符合則結(jié)束文件或文件夾解鎖,如果符合則向解鎖處理裝置702發(fā)送指令,解鎖處理裝置702接收到指令后,解鎖處理裝置702則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;經(jīng)過解鎖處理裝置702處理后的文件或文件夾信息,經(jīng)過解鎖清除裝置703判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置;如果存在限制設(shè)置,則解鎖裝置704清除文件或文件夾的限制設(shè)置,最后完成文件或文件夾解鎖。在具體實施時,解鎖裝置704還可以包括如下子裝置解鎖去只讀子裝置、解鎖去例程鎖定子裝置、解鎖添加權(quán)限子裝置、解鎖關(guān)閉句柄子裝置。實施例6還公開了一種文件或文件夾刪除系統(tǒng),參考圖8。文件或文件夾刪除系統(tǒng),可以包括刪除接收裝置801,用于接收刪除請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;刪除處理裝置802,用于如果所述校驗參數(shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;刪除構(gòu)建裝置803,用于構(gòu)建與操作系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊;刪除重構(gòu)裝置804,用于重構(gòu)刪除請求用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間;刪除清除裝置805,用于清除文件或文件夾限制設(shè)置;
刪除打開裝置806,用于基于穿透技術(shù)打開請求刪除文件或文件夾;刪除發(fā)送裝置807,用于構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處;刪除清零裝置808,用于文件或文件夾引用計數(shù)清零;刪除裝置809,用于刪除文件或文件夾。刪除接收裝置801接收到用戶發(fā)出的文件或文件夾刪除請求后,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件,如果不符合則結(jié)束文件或文件夾刪除,如果符合則向刪除處理裝置802發(fā)送指令,刪除處理裝置接收到指令后,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;之后刪除構(gòu)建裝置803判斷當(dāng)前操作系統(tǒng)平臺(32位、64位或32位兼容模式)及版本,構(gòu)建系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊;刪除重構(gòu)裝置804重構(gòu)文件刪除請求端地址到內(nèi)核內(nèi)存空間;之后刪除清除裝置805,清除文件或文件夾限制設(shè)置;刪除打開裝置806基于穿透技術(shù)打開請求刪除文件或文件夾;將文件或文件夾打開之后,刪除發(fā)送 裝置807,構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至該文件或文件夾系統(tǒng)原始地址處;刪除清零裝置808,用于文件或文件夾引用計數(shù)清零。刪除發(fā)送裝置807和8刪除清零裝置808的關(guān)系是“串行”的,即這兩個裝置可以是兩個獨立的模塊,在刪除發(fā)送裝置807刪除文件或文件夾未成功的時候,刪除清零裝置808則可以有效的刪除文件或文件夾。如果刪除發(fā)送裝置807發(fā)送IRP刪除請求可以刪除文件或文件夾,那么刪除清零裝置808可以不被調(diào)用。刪除裝置809,用于刪除文件或文件夾。以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1.一種文件或文件夾解鎖方法,其特征在于,包括 接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件; 如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名; 判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置; 如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。
2.根據(jù)權(quán)利要求I所述的解鎖方法,其特征在于,所述清除文件或文件夾限制設(shè)置,包括 如果存在只讀鎖定,則去除只讀鎖定; 如果存在例程鎖定,則去除例程鎖定; 如果存在權(quán)限限制,則添加相應(yīng)權(quán)限; 如果存在句柄占用,則關(guān)閉句柄。
3.根據(jù)權(quán)利要求2所述的解鎖方法,其特征在于文件限制設(shè)置為只讀鎖定、例程鎖定、權(quán)限限制或句柄占用中的任一種或多種組合。
4.根據(jù)權(quán)利要求2所述的解鎖方法,其特征在于文件夾限制設(shè)置為只讀鎖定、權(quán)限限制或句柄占用中的任一種或多種組合。
5.根據(jù)權(quán)利要求I所述的解鎖方法,其特征在于,所述校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件包括 判斷數(shù)值型輸入?yún)?shù)是否在預(yù)設(shè)范圍內(nèi); 判斷是否存在沖突參數(shù); 判斷地址型輸入?yún)?shù),必須具有對應(yīng)的權(quán)限; 判斷對于要反復(fù)訪問、讀取的用戶態(tài)地址/結(jié)構(gòu),是否在內(nèi)核里重構(gòu)出一份同樣的地址/結(jié)構(gòu)。
6.根據(jù)權(quán)利要求I所述的解鎖方法,其特征在于,還包括如果所述校驗參數(shù)不符合預(yù)設(shè)條件,則結(jié)束解鎖。
7.根據(jù)權(quán)利要求I所述的解鎖方法,其特征在于所述去除請求解鎖文件的例程鎖定是通過調(diào)用驅(qū)動切換進行環(huán)境完成去除例程鎖定。
8.根據(jù)權(quán)利要求I所述的解鎖方法,其特征在于,還包括 設(shè)置與文件或文件夾解鎖過程中錯誤信息相對應(yīng)的錯誤碼; 調(diào)用GetLastError例程獲得文件或文件夾解鎖過程中詳細(xì)的錯誤信息。
9.一種文件或文件夾刪除方法,其特征在于,包括 接收刪除請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件; 如果所述校驗參數(shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名; 構(gòu)建與操作系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊; 重構(gòu)文件或文件夾刪除請求用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間; 清除文件或文件夾限制設(shè)置; 基于穿透技術(shù)打開請求刪除文件或文件夾; 構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處;文件或文件夾引用計數(shù)清零; 刪除文件或文件夾。
10.根據(jù)權(quán)利要求9所述的刪除方法,其特征在于,所述清除文件或文件夾限制設(shè)置包括 如果存在只讀鎖定,則去除只讀鎖定; 如果存在例程鎖定,則去除例程鎖定; 如果存在權(quán)限限制,則添加相應(yīng)權(quán)限; 如果存在句柄占用,則關(guān)閉句柄。
11.根據(jù)權(quán)利要求9所述的刪除方法,其特征在于,所述基于穿透技術(shù)打開請求刪除文件或文件夾包括 獲取文件或文件夾操作請求,所述請求中包括調(diào)用者輸入?yún)?shù),所述輸入?yún)?shù)中包括文件或文件夾路徑; 依據(jù)所述文件或文件夾路徑在對象管理器中查找對應(yīng)的文件或文件夾對象解析例程; 若查找到對應(yīng)的文件或文件夾對象解析例程,則依據(jù)所述文件或文件夾對象解析例程生成I/O請求包,并發(fā)送至預(yù)置的文件或文件夾系統(tǒng)下層設(shè)備的原始地址。
12.根據(jù)權(quán)利要求9所述的刪除方法,其特征在于,還包括當(dāng)基于穿透技術(shù)無法打開請求刪除文件時,切換進程關(guān)閉操作。
13.根據(jù)權(quán)利要求9所述的刪除方法,其特征在于,還包括 設(shè)置與文件或文件夾刪除過程中錯誤信息相對應(yīng)的錯誤碼; 調(diào)用GetLastError例程獲得文件或文件夾刪除過程中詳細(xì)的錯誤信息。
14.根據(jù)權(quán)利要求9所述的刪除方法,其特征在于,所述校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件包括 判斷數(shù)值型輸入?yún)?shù)是否在預(yù)設(shè)范圍內(nèi); 判斷是否存在沖突參數(shù); 判斷地址型輸入?yún)?shù),必須具有對應(yīng)的權(quán)限; 判斷對于要反復(fù)訪問、讀取的用戶態(tài)地址/結(jié)構(gòu),是否在內(nèi)核里重構(gòu)出一份同樣的地址/結(jié)構(gòu)。
15.—種文件或文件夾解鎖系統(tǒng),其特征在于,包括 解鎖接收裝置,用于接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件; 解鎖處理裝置,用于如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名; 解鎖清除裝置,用于判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置; 解鎖裝置,用于如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。
16.一種文件或文件夾刪除系統(tǒng),其特征在于,包括 刪除接收裝置,用于接收刪除請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件; 刪除處理裝置,用于如果所述校驗參數(shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名; 刪除構(gòu)建裝置,用于構(gòu)建與操作系統(tǒng)平臺及版本對應(yīng)的結(jié)構(gòu)參數(shù)塊;刪除重構(gòu)裝置,用于重構(gòu)刪除請求用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間; 刪除清除裝置,用于清除文件或文件夾限制設(shè)置; 刪除打開裝置,用于基于穿透技術(shù)打開請求刪除文件或文件夾; 刪除發(fā)送裝置,用于構(gòu)建并填充IRP刪除請求數(shù)據(jù)包發(fā)送至文件或文件夾系統(tǒng)原始地址處; 刪除清零裝置,用于文件或文件夾引用計數(shù)清零; 刪除裝置,用于刪除文件或文件夾。
全文摘要
本發(fā)明公開了一種文件、文件夾解鎖方法,包括接收解鎖請求,校驗輸入?yún)?shù)是否符合預(yù)設(shè)條件;如果所述校驗輸入?yún)?shù)符合預(yù)設(shè)條件,則按照預(yù)設(shè)規(guī)則矯正畸形路徑格式和/或特殊文件名或文件夾名;判斷經(jīng)過所述矯正的待解鎖文件或文件夾是否存在限制設(shè)置;如果存在限制設(shè)置,則清除文件或文件夾限制設(shè)置。本發(fā)明的文件、文件夾解鎖方法,通過去除只讀鎖定、去除例程鎖定、添加權(quán)限、關(guān)閉句柄等多種手段層層破除染毒文件可能設(shè)置的保護,增加了安全軟件與惡意程序的對抗能力。
文檔編號G06F21/56GK102855432SQ201110175389
公開日2013年1月2日 申請日期2011年6月27日 優(yōu)先權(quán)日2011年6月27日
發(fā)明者鄭文彬, 王宇 申請人:奇智軟件(北京)有限公司