專利名稱:一種文件解鎖的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)安全的技術(shù)領(lǐng)域,特別是涉及一種文件解鎖的方法和一種文件解鎖的裝置。
背景技術(shù):
計(jì)算機(jī)病毒是指“編制者在計(jì)算機(jī)程序中插入的破壞計(jì)算機(jī)功能或者破壞數(shù)據(jù),影響計(jì)算機(jī)使用并且能夠自我復(fù)制的一組計(jì)算機(jī)指令或者程序代碼。計(jì)算機(jī)一旦染上病毒,計(jì)算機(jī)通常表現(xiàn)為其文件被增加、刪出、改變名稱或?qū)傩?、移?dòng)到其它目錄下,病毒對(duì)計(jì)算機(jī)文件的這些操作,可能會(huì)導(dǎo)致正常的程序無法運(yùn)行、計(jì)算機(jī)操作系統(tǒng)崩潰、計(jì)算機(jī)被遠(yuǎn)程控制、用戶信息被盜用等一系列的問題。為了保證計(jì)算機(jī)的安全運(yùn)行,需要對(duì)計(jì)算機(jī)中感染病毒的文件進(jìn)行病毒查殺,以防止和清除病毒的破壞。在安全軟件領(lǐng)域,針對(duì)染毒計(jì)算機(jī)文件的“刪除”與“反刪除”是安全軟件和惡意程序(計(jì)算機(jī)病毒)對(duì)抗的永恒主題之一。現(xiàn)有技術(shù)中的病毒,往往通過文件句柄持有等手段給染毒文件加上了加密鎖,采用常規(guī)手段無法破解加密鎖即無法刪除染毒文件,這些手段阻止殺毒軟件查殺染毒文件。安全軟件查殺病毒的過程,可以理解為對(duì)染毒文件進(jìn)行解鎖和粉碎?,F(xiàn)有安全軟件,對(duì)染毒文件的解鎖和粉碎手段單一,無法破除染毒文件設(shè)置的層層保護(hù),對(duì)抗能力不強(qiáng)。傳統(tǒng)安全軟件廠商只解決了部分“反刪除”問題,在操作系統(tǒng)內(nèi)核態(tài)的攻防上往往體現(xiàn)出一定的能力缺失,驅(qū)動(dòng)級(jí)惡意程序(Rootkit)對(duì)抗能力偏弱。因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題就是提出一種文件解鎖的處理機(jī)制,用以在復(fù)雜的客戶端環(huán)境中識(shí)別惡意程序的文件自保護(hù)行為并加以對(duì)抗,增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種文件解鎖的方法,以增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力。本發(fā)明還提供了一種文件解鎖的裝置,用以保證上述方法在實(shí)際中的應(yīng)用及實(shí)現(xiàn)。為了解決上述問題,本發(fā)明實(shí)施例公開了一種文件解鎖的方法,包括判斷目標(biāo)文件是否存在句柄占用的情形;若是,則遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle,并獲取所述文件句柄File Handle所屬的進(jìn)程;切換到所述進(jìn)程,基于所述進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作。優(yōu)選的,在判斷目標(biāo)文件是否存在句柄占用的情形之前,還包括嘗試打開或刪除目標(biāo)文件;若無法打開或刪除目標(biāo)文件,則讀取返回的錯(cuò)誤碼信息;
所述目標(biāo)文件是否存在句柄占用的情形依據(jù)所述錯(cuò)誤碼信息判斷。優(yōu)選的,若所述錯(cuò)誤碼信息為STATUS_DELETE_PENDING,數(shù)值為0xC0000056L ;或?yàn)?,ERROR_ACCESS_DENIED,數(shù)值為5,則判定所述目標(biāo)文件存在句柄占用的情形。優(yōu)選的,所述的方法,還包括所述目標(biāo)文件句柄的關(guān)閉操作完成后,所述目標(biāo)文件被清除。優(yōu)選的,所述目標(biāo)文件具有對(duì)應(yīng)的全路徑;所述句柄表位于操作系統(tǒng)內(nèi)核,其中維護(hù)有所有進(jìn)程打開的句柄信息,所述句柄信息中包括文件句柄File Handle的信息,所述文件句柄File Handle的信息中包括各文件句柄File Handle對(duì)應(yīng)的文件的全路徑,所述遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle的步驟包括
將目標(biāo)文件的全路徑與各文件句柄File Handle對(duì)應(yīng)的文件的全路徑進(jìn)行對(duì)比,若找到一致的文件全路徑,則提取該文件全路徑對(duì)應(yīng)的文件句柄File Handle為所述目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle。優(yōu)選的,所述的方法,還包括判斷所述文件句柄File Handle所屬的進(jìn)程是否能切換,若在能切換時(shí)執(zhí)行所述切換至進(jìn)程的步驟。優(yōu)選的,所述切換到所述進(jìn)程的操作是通過調(diào)用操作系統(tǒng)應(yīng)用程序接口 API的堆棧連接進(jìn)程例程KeStackAttachProcess執(zhí)行的;所述遍歷操作系統(tǒng)的句柄表的操作是通過調(diào)用操作系統(tǒng)應(yīng)用程序接口 API的系統(tǒng)信息查詢例程ZwQuerySystemInformation中的句柄信息系統(tǒng)SystemHandleInformation的功能執(zhí)行的。優(yōu)選的,所述基于進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作的步驟包括以所述進(jìn)程的名義發(fā)起文件句柄關(guān)閉操作請(qǐng)求;依據(jù)所述請(qǐng)求調(diào)用Windows操作系統(tǒng)內(nèi)核態(tài)的句柄關(guān)閉例程ZwClose,所述ZwClose例程執(zhí)行文件句柄關(guān)閉操作。本發(fā)明實(shí)施例還公開了一種文件解鎖的裝置,包括判斷模塊,用于判斷目標(biāo)文件是否存在句柄占用的情形;若是,則調(diào)用句柄表遍歷模塊;句柄表遍歷模塊,用于遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle ;進(jìn)程獲取模塊,用于獲取所述文件句柄File Handle所屬的進(jìn)程;進(jìn)程切換模塊,用于切換到所述進(jìn)程;句柄關(guān)閉操作發(fā)起模塊,用于基于所述進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作。優(yōu)選的,所述目標(biāo)文件是否存在句柄占用的情形依據(jù)所述錯(cuò)誤碼信息判斷,所述的裝置還包括文件操作模塊,用于嘗試打開或刪除目標(biāo)文件;錯(cuò)誤碼讀取模塊,用于在無法打開或刪除目標(biāo)文件時(shí),讀取返回的錯(cuò)誤碼信息。優(yōu)選的,所述目標(biāo)文件具有對(duì)應(yīng)的全路徑;所述句柄表位于操作系統(tǒng)內(nèi)核,其中維護(hù)有所有進(jìn)程打開的句柄信息,所述句柄信息中包括文件句柄File Handle的信息,所述文件句柄File Handle的信息中包括各文件句柄File Handle對(duì)應(yīng)的文件的全路徑,所述目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle通過所述全路徑對(duì)比獲得。
優(yōu)選的,所述的裝置,還包括切換判斷模塊,用于判斷所述文件句柄File Handle所屬的進(jìn)程是否能切換,以及,在能切換時(shí)調(diào)用進(jìn)程切換模塊。優(yōu)選的,所述句柄關(guān)閉操作發(fā)起模塊包括請(qǐng)求發(fā)起子模塊,用于以所述進(jìn)程的名義發(fā)起文件句柄關(guān)閉操作請(qǐng)求;例程調(diào)用子模塊,用于依據(jù)所述請(qǐng)求調(diào)用Windows操作系統(tǒng)內(nèi)核態(tài)的句柄關(guān)閉例程ZwClose,所述ZwClose例程執(zhí)行文件句柄關(guān)閉操作。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)、
本發(fā)明實(shí)施例通過在目標(biāo)文件存在句柄占用的情形時(shí),遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle,并獲取所述文件句柄File Handle所屬的進(jìn)程;然后切換到所述進(jìn)程,以該進(jìn)程的名義發(fā)起目標(biāo)文件句柄的關(guān)閉操作,從而實(shí)現(xiàn)文件解鎖和粉碎過程。本發(fā)明所提供的文件解鎖、粉碎、粉碎機(jī)制不僅安全、可靠、成功率高,并且可以在復(fù)雜的客戶端環(huán)境中識(shí)別惡意程序的文件自保護(hù)行為并加以對(duì)抗,增強(qiáng)了和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力。
圖I是本發(fā)明的一種文件解鎖的方法實(shí)施例的步驟流程圖;圖2是本發(fā)明的一種文件解鎖的裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。參考圖I,示出了本發(fā)明的一種文件解鎖的方法實(shí)施例的步驟流程圖,具體可以包括以下步驟步驟101、嘗試打開或刪除目標(biāo)文件;需要說明的是,在本發(fā)明實(shí)施例中,所述文件包括WINDOWS操作系統(tǒng)中所支持類型的文件。所述文件打開不是指通過雙擊鼠標(biāo)或按回車鍵等觸發(fā)方式打開文件(如*. exe、*. doc等類型的文件);而是指用操作系統(tǒng)API或本發(fā)明的自定義的應(yīng)用程序接口 BAPI (應(yīng)用本發(fā)明,可以在操作系統(tǒng)用戶態(tài)接口完整實(shí)現(xiàn)一套文件操作調(diào)用庫(kù))的CreateFileO函數(shù)等打開文件、得到文件句柄的操作,因?yàn)橹挥械玫轿募浔蟛趴梢赃M(jìn)一步操作該文件。從函數(shù)調(diào)用方法角度而言,本發(fā)明實(shí)施例中所指文件“打開”主要包括以下幾種情形I、使用Windows標(biāo)準(zhǔn)API CreateFile函數(shù)打開目標(biāo)文件;2、使用 Windows Native API ZwCreateFile/NtCreateFile 函數(shù)打開目標(biāo)文件;3、使用 Windows Native API ZwOpenFile/NtOpenFile 函數(shù)打開目標(biāo)文件。其中,CreateFile的參數(shù)dwCreationDisposition可以控制函數(shù)行為是“創(chuàng)建新文件”還是“打開已經(jīng)存在的文件”。在本發(fā)明實(shí)施例中,所述打開或刪除目標(biāo)文件的操作可以通過調(diào)用微軟操作系統(tǒng)的應(yīng)用程序接口(API)的文件創(chuàng)建例程CreateFile或文件刪除例程DeleteFile執(zhí)行;也可以通過調(diào)用自定義的應(yīng)用程序接口(BAPI)的文件創(chuàng)建例程FSCreateFile或文件刪除例程FSDeleteFile執(zhí)行;本發(fā)明對(duì)此不作限制。步驟102、若無法打開或刪除目標(biāo)文件,則讀取返回的錯(cuò)誤碼信息,依據(jù)所述錯(cuò)誤碼信息判斷所述目標(biāo)文件是否存在句柄占用的情形;例如,假設(shè)待打開或刪除的目標(biāo)文件名(路徑)是C:\test.txt,若無法打開或刪除該路徑下的文件,并且操作系統(tǒng)內(nèi)核態(tài)返回的錯(cuò)誤碼信息為STATUS_DELETE_PENDING,數(shù)值為0xC0000056L ;和/或,操作系統(tǒng)用戶態(tài)返回的錯(cuò)誤碼信息為拒絕訪問ERR0R_ACCESS_DENIED,數(shù)值為5。則可以判定所述目標(biāo)文件存在句柄占用的情形。更具體而言,STATUS_DELETE_PENDING(延時(shí)刪除)是微軟操作系統(tǒng)內(nèi)核定義的一個(gè)狀態(tài)(錯(cuò)誤碼),它表示某文件已被打開,但同時(shí)它也被要求刪除,只是目前還有進(jìn)程持有文件 的句柄(持有意味著還有引用計(jì)數(shù))。當(dāng)最后一個(gè)文件持有者關(guān)閉句柄時(shí),文件系統(tǒng)驅(qū)動(dòng)會(huì)自動(dòng)從磁盤清除這個(gè)文件。在“最后一個(gè)文件持有者關(guān)閉句柄前”,任何進(jìn)程都無法再打開這個(gè)文件。由于內(nèi)核認(rèn)為文件都要被刪除了,就不用再被打開了。其中,所述“操作系統(tǒng)內(nèi)核態(tài)返回的錯(cuò)誤碼信息”和“操作系統(tǒng)用戶態(tài)返回的錯(cuò)誤碼信息”的概念是微軟操作系統(tǒng)定義的兩套錯(cuò)誤碼機(jī)制,其中內(nèi)核態(tài)錯(cuò)誤碼可以通過函數(shù)RtlNtstatusToDosError轉(zhuǎn)換成用戶態(tài)錯(cuò)誤碼,微軟這么設(shè)計(jì)的原因是為了“隔離”內(nèi)核的輸出,另外也為了向下兼容。步驟103、若所述目標(biāo)文件存在句柄占用的情形,則遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle,并獲取所述文件句柄File Handle所屬的進(jìn)程;在具體實(shí)現(xiàn)中,所述目標(biāo)文件具有對(duì)應(yīng)的全路徑;所述句柄表位于操作系統(tǒng)內(nèi)核,其中維護(hù)有所有進(jìn)程打開的句柄信息,所述句柄信息中包括文件句柄File Handle的信息,所述文件句柄File Handle的信息中包括各文件句柄File Handle對(duì)應(yīng)的文件的全路徑(即文件句柄在創(chuàng)建時(shí)對(duì)應(yīng)的磁盤路徑)。因而,作為本發(fā)明實(shí)施例具體應(yīng)用的一種示例,所述遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle的步驟具體可以為將目標(biāo)文件的全路徑與各文件句柄File Handle對(duì)應(yīng)的文件的全路徑進(jìn)行對(duì)比,若找到一致的文件全路徑,則提取該文件全路徑對(duì)應(yīng)的文件句柄File Handle為所述目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle。在實(shí)際中,Windows操作系統(tǒng)會(huì)在其內(nèi)核維護(hù)所有進(jìn)程打開的句柄信息,維護(hù)的結(jié)構(gòu)被稱作“句柄表”。句柄是區(qū)分類型存儲(chǔ)的,同時(shí),每個(gè)句柄都?xì)w屬于一個(gè)特定的進(jìn)程,常見的句柄類型包括File (文件)、Process (進(jìn)程)、Thread (線程)、Key (鍵值)等。本發(fā)明實(shí)施例主要是針對(duì)文件句柄(File Handle)而言,應(yīng)用本實(shí)施例,通過枚舉每一個(gè)文件句柄所對(duì)應(yīng)的文件全路徑,并和待刪除文件的全路徑進(jìn)行比較,如果相等就認(rèn)為找到了目標(biāo)。而此時(shí)目標(biāo)句柄所屬進(jìn)程也得到了明確(每個(gè)句柄都?xì)w屬于一個(gè)特定的進(jìn)程),切換到那個(gè)進(jìn)程,以它的名義(上下文)發(fā)起目標(biāo)文件解鎖操作請(qǐng)求即可。公知的是,微軟句柄表的結(jié)構(gòu)是不公開的,Windows操作系統(tǒng)每一個(gè)大版本都會(huì)變動(dòng)句柄表的設(shè)計(jì)方案,所以如何安全、穩(wěn)定的遍歷句柄表是本領(lǐng)域技術(shù)人員需要關(guān)注的問題,例如,在遍歷時(shí)需要考慮跨平臺(tái)和遍歷同步等問題。作為本發(fā)明實(shí)施例一種具體應(yīng)用的優(yōu)選示例,所述遍歷操作系統(tǒng)的句柄表的操作可以通過調(diào)用操作系統(tǒng)應(yīng)用程序接口 API的系統(tǒng)信息查詢例程ZwQuerySystemInformation中的句柄信息系統(tǒng)SystemHandleInformation 的功能執(zhí)行。當(dāng)然,上述方法僅僅用作示例,本領(lǐng)域技術(shù)人員根據(jù)實(shí)際情況采用任一種方式遍歷句柄表都是可行的,本發(fā)明對(duì)此不作限制。步驟104、切換到所述進(jìn)程,發(fā)起目標(biāo)文件句柄的關(guān)閉操作。在本發(fā)明的一種優(yōu)選實(shí)施例中,所述切換到所述進(jìn)程的操作可以通過調(diào)用操作系統(tǒng)應(yīng)用程序接口 API的堆棧連接進(jìn)程例程KeStackAttachProcess執(zhí)行。切換到所述目標(biāo)文件的文件句柄File Handle所屬的進(jìn)程可以理解為切換到“句柄持有者”進(jìn)程空間,然后以這個(gè)進(jìn)程的名義(進(jìn)程上下文,context)發(fā)起目標(biāo)文件解鎖操作的請(qǐng)求。在具體實(shí)現(xiàn)中,進(jìn)程切換前需要進(jìn)一步考慮目標(biāo)進(jìn)程是否真的可供切換;例如,目標(biāo)進(jìn)程正在被結(jié)束往往是不能切換的,所以要引入一定的同步機(jī)制(鎖機(jī)制)等;因此,作
為本發(fā)明實(shí)施例在具體實(shí)現(xiàn)中的一種示例,還可以在判斷所述文件句柄File Handle所屬的進(jìn)程是否能切換,并在能切換時(shí)才執(zhí)行所述切換至進(jìn)程的步驟。在本發(fā)明的一種優(yōu)選實(shí)施例中,所述基于進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作的步驟具體可以包括以下子步驟子步驟S11、以所述進(jìn)程的名義發(fā)起文件句柄關(guān)閉操作請(qǐng)求;子步驟S12、依據(jù)所述請(qǐng)求調(diào)用Windows操作系統(tǒng)內(nèi)核態(tài)的句柄關(guān)閉例程ZwClose,所述ZwClose例程執(zhí)行文件句柄關(guān)閉操作。在具體實(shí)現(xiàn)中,當(dāng)所述目標(biāo)文件句柄的關(guān)閉操作完成后,所述目標(biāo)文件即被清除,從而完成文件解鎖及粉碎的過程。需要說明的是,對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。參考圖2,示出了本發(fā)明的一種文件解鎖的裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括以下模塊判斷模塊21,用于判斷目標(biāo)文件是否存在句柄占用的情形;若是,則調(diào)用句柄表遍歷模塊;句柄表遍歷模塊22,用于遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle ;進(jìn)程獲取模塊23,用于獲取所述文件句柄File Handle所屬的進(jìn)程;進(jìn)程切換模塊24,用于切換到所述進(jìn)程;句柄關(guān)閉操作發(fā)起模塊25,用于基于所述進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作。在具體實(shí)現(xiàn)中,所述目標(biāo)文件是否存在句柄占用的情形可以依據(jù)所述錯(cuò)誤碼信息判斷,在這種情況下,所述的裝置還可以包括以下模塊文件操作模塊,用于嘗試打開或刪除目標(biāo)文件;錯(cuò)誤碼讀取模塊,用于在無法打開或刪除目標(biāo)文件時(shí),讀取返回的錯(cuò)誤碼信息。針對(duì)在Windows操作系統(tǒng)中的具體應(yīng)用而言,所述目標(biāo)文件具有對(duì)應(yīng)的全路徑;所述句柄表位于操作系統(tǒng)內(nèi)核,其中維護(hù)有所有進(jìn)程打開的句柄信息,所述句柄信息中包括文件句柄File Handle的信息,所述文件句柄File Handle的信息中包括各文件句柄File Handle對(duì)應(yīng)的文件的全路徑,所述目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle通過所述全路徑對(duì)比獲得。在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例還可以包括以下模塊切換判斷模塊,用于判斷所述文件句柄File Handle所屬的進(jìn)程是否能切換,以及,在能切換時(shí)調(diào)用進(jìn)程切換模塊。在本發(fā)明的一種優(yōu)選實(shí)施例中,所述句柄關(guān)閉操作發(fā)起模塊具體可以包括以下子模塊請(qǐng)求發(fā)起子模塊,用于以所述進(jìn)程的名義發(fā)起文件句柄關(guān)閉操作請(qǐng)求; 例程調(diào)用子模塊,用于依據(jù)所述請(qǐng)求調(diào)用Windows操作系統(tǒng)內(nèi)核態(tài)的句柄關(guān)閉例程ZwClose,所述ZwClose例程執(zhí)行文件句柄關(guān)閉操作。針對(duì)文件解鎖和粉碎的應(yīng)用而言,在所述目標(biāo)文件句柄的關(guān)閉操作完成后,所述目標(biāo)文件即被清除。由于所述裝置實(shí)施例基本相應(yīng)于前述方法實(shí)施例,故本實(shí)施例的描述中未詳盡之處,可以參見前述實(shí)施例中的相關(guān)說明,在此就不贅述了。本發(fā)明可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。本發(fā)明可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。以上對(duì)本發(fā)明所提供的一種文件解鎖的方法和一種文件解鎖的裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種文件解鎖的方法,其特征在于,包括 判斷目標(biāo)文件是否存在句柄占用的情形; 若是,則遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄FileHandle,并獲取所述文件句柄File Handle所屬的進(jìn)程; 切換到所述進(jìn)程,基于所述進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作。
2.如權(quán)利要求I所述的方法,其特征在于,在判斷目標(biāo)文件是否存在句柄占用的情形之前,還包括 嘗試打開或刪除目標(biāo)文件; 若無法打開或刪除目標(biāo)文件,則讀取返回的錯(cuò)誤碼信息; 所述目標(biāo)文件是否存在句柄占用的情形依據(jù)所述錯(cuò)誤碼信息判斷。
3.如權(quán)利要求2所述的方法,其特征在于,若所述錯(cuò)誤碼信息為STATUS_DELETE_PENDING,數(shù)值為0xC0000056L ;或?yàn)?,ERROR_ACCESS_DENIED,數(shù)值為5,則判定所述目標(biāo)文件存在句柄占用的情形。
4.如權(quán)利要求2或3所述的方法,其特征在于,還包括 所述目標(biāo)文件句柄的關(guān)閉操作完成后,所述目標(biāo)文件被清除。
5.如權(quán)利要求1、2或3所述的方法,其特征在于,所述目標(biāo)文件具有對(duì)應(yīng)的全路徑;所述句柄表位于操作系統(tǒng)內(nèi)核,其中維護(hù)有所有進(jìn)程打開的句柄信息,所述句柄信息中包括文件句柄File Handle的信息,所述文件句柄File Handle的信息中包括各文件句柄FileHandle對(duì)應(yīng)的文件的全路徑,所述遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle的步驟包括 將目標(biāo)文件的全路徑與各文件句柄File Handle對(duì)應(yīng)的文件的全路徑進(jìn)行對(duì)比,若找到一致的文件全路徑,則提取該文件全路徑對(duì)應(yīng)的文件句柄File Handle為所述目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle。
6.如權(quán)利要求5所述的方法,其特征在于,還包括 判斷所述文件句柄File Handle所屬的進(jìn)程是否能切換,若在能切換時(shí)執(zhí)行所述切換至進(jìn)程的步驟。
7.如權(quán)利要求6所述的方法,其特征在于,所述切換到所述進(jìn)程的操作是通過調(diào)用操作系統(tǒng)應(yīng)用程序接口 API的堆棧連接進(jìn)程例程KeStackAttachProcess執(zhí)行的;所述遍歷操作系統(tǒng)的句柄表的操作是通過調(diào)用操作系統(tǒng)應(yīng)用程序接口 API的系統(tǒng)信息查詢例程ZwQuerySystemInformation 中的句柄信息系統(tǒng) SystemHandleInformation 的功能執(zhí)行的。
8.如權(quán)利要求I所述的方法,其特征在于,所述基于進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作的步驟包括 以所述進(jìn)程的名義發(fā)起文件句柄關(guān)閉操作請(qǐng)求; 依據(jù)所述請(qǐng)求調(diào)用Windows操作系統(tǒng)內(nèi)核態(tài)的句柄關(guān)閉例程ZwClose,所述ZwClose例程執(zhí)行文件句柄關(guān)閉操作。
9.一種文件解鎖的裝置,其特征在于,包括 判斷模塊,用于判斷目標(biāo)文件是否存在句柄占用的情形;若是,則調(diào)用句柄表遍歷模塊; 句柄表遍歷模塊,用于遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄FiIeHandle ; 進(jìn)程獲取模塊,用于獲取所述文件句柄File Handle所屬的進(jìn)程; 進(jìn)程切換模塊,用于切換到所述進(jìn)程; 句柄關(guān)閉操作發(fā)起模塊,用于基于所述進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作。
10.如權(quán)利要求9所述的裝置,其特征在于,所述目標(biāo)文件是否存在句柄占用的情形依據(jù)所述錯(cuò)誤碼信息判斷,所述的裝置還包括 文件操作模塊,用于嘗試打開或刪除目標(biāo)文件; 錯(cuò)誤碼讀取模塊,用于在無法打開或刪除目標(biāo)文件時(shí),讀取返回的錯(cuò)誤碼信息。
11.如權(quán)利要求9或10所述的裝置,其特征在于,所述目標(biāo)文件具有對(duì)應(yīng)的全路徑;所 述句柄表位于操作系統(tǒng)內(nèi)核,其中維護(hù)有所有進(jìn)程打開的句柄信息,所述句柄信息中包括文件句柄File Handle的信息,所述文件句柄File Handle的信息中包括各文件句柄FileHandle對(duì)應(yīng)的文件的全路徑,所述目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle通過所述全路徑對(duì)比獲得。
12.如權(quán)利要求11所述的裝置,其特征在于,還包括 切換判斷模塊,用于判斷所述文件句柄File Handle所屬的進(jìn)程是否能切換,以及,在能切換時(shí)調(diào)用進(jìn)程切換模塊。
13.如權(quán)利要求10所述的裝置,其特征在于,所述句柄關(guān)閉操作發(fā)起模塊包括 請(qǐng)求發(fā)起子模塊,用于以所述進(jìn)程的名義發(fā)起文件句柄關(guān)閉操作請(qǐng)求; 例程調(diào)用子模塊,用于依據(jù)所述請(qǐng)求調(diào)用Windows操作系統(tǒng)內(nèi)核態(tài)的句柄關(guān)閉例程ZwClose,所述ZwClose例程執(zhí)行文件句柄關(guān)閉操作。
全文摘要
本發(fā)明提供了一種文件解鎖的方法和裝置,其中,所述方法包括判斷目標(biāo)文件是否存在句柄占用的情形;若是,則遍歷操作系統(tǒng)的句柄表,獲得目標(biāo)文件對(duì)應(yīng)的文件句柄File Handle,并獲取所述文件句柄File Handle所屬的進(jìn)程;切換到所述進(jìn)程,基于所述進(jìn)程發(fā)起目標(biāo)文件句柄的關(guān)閉操作。本發(fā)明所提供的文件解鎖、粉碎、粉碎機(jī)制不僅安全、可靠、成功率高,并且可以在復(fù)雜的客戶端環(huán)境中識(shí)別惡意程序的文件自保護(hù)行為并加以對(duì)抗,增強(qiáng)了和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力。
文檔編號(hào)G06F21/56GK102855437SQ201110175549
公開日2013年1月2日 申請(qǐng)日期2011年6月27日 優(yōu)先權(quán)日2011年6月27日
發(fā)明者王宇, 鄭文彬 申請(qǐng)人:奇智軟件(北京)有限公司