專利名稱:一種注冊(cè)表操作的執(zhí)行方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作系統(tǒng)穿透的技術(shù)領(lǐng)域,特別是涉及一種注冊(cè)表操作的執(zhí)行方法和一種注冊(cè)表操作的執(zhí)行裝置。
背景技術(shù):
在面對(duì)復(fù)雜問(wèn)題的時(shí)候,人們往往會(huì)采用分而治之的方法分割、縮小問(wèn)題的范圍,這一點(diǎn)在操作系統(tǒng)的設(shè)計(jì)中亦是如此,Windows操作系統(tǒng)借助分層的設(shè)計(jì)思想解決復(fù)雜的問(wèn)題,這一做法帶來(lái)了可移植性、可擴(kuò)展性等優(yōu)點(diǎn)。不過(guò),由于在設(shè)計(jì)理論上存在著安全性缺陷(例如缺乏完整性校驗(yàn)機(jī)制等),高可擴(kuò)展性的另一方面也意味著系統(tǒng)存在大量的被篡改可能。例如,安全軟件在操作(創(chuàng)建、打開(kāi)、枚舉、讀寫(xiě)、刪除等)自身、系統(tǒng)或惡意程序的注冊(cè)表鍵值時(shí),往往希望訪問(wèn)的過(guò)程真實(shí)可信,但是微軟Windows操作系統(tǒng)的分層式結(jié) 構(gòu)決定了其調(diào)用鏈上存在數(shù)據(jù)流被篡改的風(fēng)險(xiǎn)。因此,保證注冊(cè)表操作過(guò)程的真實(shí)、可靠成了安全軟件的一個(gè)基本要求。從操作系統(tǒng)的角度看,注冊(cè)表操作的執(zhí)行過(guò)程存在著如下潛在的桌改點(diǎn)參考圖I所示的操作系統(tǒng)注冊(cè)表操作執(zhí)行流的示意圖,在執(zhí)行注冊(cè)表操作采用如下分層調(diào)用的方式調(diào)用者101調(diào)用內(nèi)核接口層102,內(nèi)核接口層102調(diào)用內(nèi)核執(zhí)行層103,內(nèi)核執(zhí)行層103調(diào)用注冊(cè)表解析例程104,注冊(cè)表解析例程104調(diào)用Cm*注冊(cè)表實(shí)現(xiàn)例程105,Cm*注冊(cè)表實(shí)現(xiàn)例程105調(diào)用第三方驅(qū)動(dòng)106和HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程等107。其中,調(diào)用者101和內(nèi)核接口層102屬于操作系統(tǒng)用戶態(tài),內(nèi)核執(zhí)行層103、注冊(cè)表解析例程104、Cm*注冊(cè)表實(shí)現(xiàn)例程105、第三方驅(qū)動(dòng)106和HvpGetCellPaged/HvpGetCellMapped對(duì)象例程等107屬于操作系統(tǒng)內(nèi)核態(tài)。從操作系統(tǒng)的角度看,注冊(cè)表操作執(zhí)行流存在著如下潛在的篡改點(diǎn)I)內(nèi)核接口層的用戶態(tài) IAT Hook (Import Address Table Hook,導(dǎo)入表鉤掛)/EAT Hook (Export Address Table Hook,導(dǎo)出表鉤掛);2)內(nèi)核接口層的用戶態(tài)Inline Hook(內(nèi)聯(lián)鉤掛);3)內(nèi)核接口層調(diào)用內(nèi)核執(zhí)行層時(shí)的Int 2E(中斷)/SysEnter Hook(用戶態(tài)進(jìn)入內(nèi)核態(tài)鉤掛);4)內(nèi)核執(zhí)行層的 Native API SSDT Hook (System Service Dispatch Table Hook,系統(tǒng)服務(wù)分派表鉤掛);5)內(nèi)核執(zhí)行層的 Native API Inline Hook ;6)注冊(cè)表解析例程的Object Parse Routine Hook (對(duì)象解析例程鉤掛);7) Cm* 注冊(cè)表實(shí)現(xiàn)例程的 Cm*Routine Hook ;8) Cm*注冊(cè)表實(shí)現(xiàn)例程105調(diào)用第三方驅(qū)動(dòng)106時(shí)的CmpCallBack回調(diào)機(jī)制;9)HvpGetCelIPaged/HvpGetCelIMapped Object Routine Hook(對(duì)象例程鉤掛)。傳統(tǒng)安全軟件廠商雖然意識(shí)到了種種注冊(cè)表操作調(diào)用被劫持的可能性,但是現(xiàn)有的解決方案大多只考慮了操作系統(tǒng)用戶態(tài)的劫持風(fēng)險(xiǎn),在操作系統(tǒng)內(nèi)核態(tài)的攻防上往往體現(xiàn)出較為明顯的能力缺失,驅(qū)動(dòng)級(jí)惡意程序(Rootkit)對(duì)抗能力偏弱。因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問(wèn)題就是提出一種注冊(cè)表操作的執(zhí)行機(jī)制,以增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力,并避免因注冊(cè)表操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種注冊(cè)表操作的執(zhí)行方法,以增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力,并避免因注冊(cè)表操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性。本發(fā)明還提供了一種注冊(cè)表操作的執(zhí)行裝置,用以保證上述方法在實(shí)際中的應(yīng)用及實(shí)現(xiàn)。
為了解決上述問(wèn)題,本發(fā)明實(shí)施例公開(kāi)了一種注冊(cè)表操作的執(zhí)行方法,包括獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯;執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。優(yōu)選的是,所述的方法還包括在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回變化值。優(yōu)選的是,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)包括注冊(cè)表對(duì)象解析例程鉤掛;Cm*注冊(cè)表實(shí)現(xiàn)例程調(diào)用第三方驅(qū)動(dòng)時(shí)的CmpCallBack回調(diào)機(jī)制;Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤;HvpGetCelIPaged/HvpGetCelIMapped 對(duì)象例程鉤掛。優(yōu)選的是,所述檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí)恢復(fù)所述篡改點(diǎn)原始值的步驟具體包括子步驟SI、檢測(cè)注冊(cè)表對(duì)象解析例程鉤掛的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S2,否則,執(zhí)行子步驟S3;子步驟S2、恢復(fù)所述注冊(cè)表對(duì)象解析例程鉤掛的原始值,轉(zhuǎn)子步驟S3 ;子步驟S3、調(diào)用Cm*注冊(cè)表實(shí)現(xiàn)例程,檢測(cè)Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S4,否則,執(zhí)行子步驟S5 ;子步驟S4、恢復(fù)所述Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤的原始值,轉(zhuǎn)子步驟S5 ;子步驟S5、阻斷CmpCallBack回調(diào)機(jī)制,轉(zhuǎn)子步驟S6 ;子步驟S6、檢測(cè)HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S7,否則結(jié)束;子步驟S7、恢復(fù)所述HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛的原始值。
優(yōu)選的是,所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值在初始化時(shí)獲得,所述內(nèi)核執(zhí)行流篡改點(diǎn)的變化值緩存在內(nèi)核內(nèi)存中。優(yōu)選的是,在獲取注冊(cè)表操作請(qǐng)求之前,還包括調(diào)用者發(fā)起注冊(cè)表操作請(qǐng)求,調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口例程;其中,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);依據(jù)系統(tǒng)平臺(tái)的類(lèi)型構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù),依據(jù)所述內(nèi)核態(tài)結(jié)構(gòu)參數(shù)生成相應(yīng)的注冊(cè)表操作控制碼,并發(fā)送至操作系統(tǒng)內(nèi)核態(tài)。優(yōu)選的是,各注冊(cè)表操作接口例程包括窄字符例程和寬字符例程,在構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù)之前,所述的方法還包括 所述注冊(cè)表操作接口窄字符例程將調(diào)用者輸入?yún)?shù)中的ANSI相關(guān)參數(shù)轉(zhuǎn)換為UNICODE類(lèi)型,并調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口寬字符例程。優(yōu)選的是,在設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯之前,所述的方法還包括依據(jù)所述注冊(cè)表操作請(qǐng)求校驗(yàn)調(diào)用者輸入?yún)?shù),若校驗(yàn)通過(guò),則執(zhí)行設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯的步驟。優(yōu)選的是,所述調(diào)用者輸入?yún)?shù)具有用戶態(tài)地址;在設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯之前,所述的方法還包括重構(gòu)所述用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間。優(yōu)選的是,所述的方法,還包括若調(diào)用所述注冊(cè)表的函數(shù)成功,則返回相應(yīng)的句柄;若調(diào)用所述注冊(cè)表的函數(shù)失敗,則生成錯(cuò)誤碼并返回用戶態(tài)。優(yōu)選的是,所述注冊(cè)表操作接口例程與WINDOWS標(biāo)準(zhǔn)API —致,包括注冊(cè)表鍵創(chuàng)建例程BRegCreateKey、注冊(cè)表增強(qiáng)鍵創(chuàng)建例程BRegCreateKeyEx、注冊(cè)表鍵打開(kāi)例程BRegOpenKey、注冊(cè)表增強(qiáng)鍵打開(kāi)例程BRegOpenKeyEx、注冊(cè)表增強(qiáng)查詢值例程BRegQueryValueEx、注冊(cè)表設(shè)置值例程BRegSetValueEx、注冊(cè)表枚舉鍵例程BRegEnumKey、注冊(cè)表增強(qiáng)枚舉鍵例程BRegEnumKeyEx、注冊(cè)表枚舉值例程BRegEnumValue、注冊(cè)表刪除鍵例程BRegDeIeteKey、注冊(cè)表增強(qiáng)刪除鍵例程BRegDeIeteKeyEx、注冊(cè)表刪除值例程BRegDeleteValue和/或注冊(cè)表關(guān)閉句柄例程BRegCloseKey。優(yōu)選的是,所述控制碼包括注冊(cè)表創(chuàng)建控制碼REGCTL_CREATE_KEY、注冊(cè)表打開(kāi)控制碼REGCTL_OPEN_KEY、注冊(cè)表查詢值控制碼REGCTL_QUERY_VALUE_KEY、注冊(cè)表設(shè)置值控制碼REGCTL_SET_VALUE_KEY、注冊(cè)表枚舉鍵控制碼REGCTL_ENUMERATE_KEY、注冊(cè)表枚舉值控制碼REGCTL_ENUMERATE_VALUE_KEY、注冊(cè)表刪除鍵控制碼REGCTL_DELETE_KEY和/或注冊(cè)表刪除值控制碼REGCTL_DELETE_VALUE_KEY。本發(fā)明實(shí)施例還公開(kāi)了一種注冊(cè)表操作的執(zhí)行裝置,包括請(qǐng)求獲取模塊,用于獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);內(nèi)核執(zhí)行邏輯設(shè)置模塊,用于依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯;篡改點(diǎn)檢測(cè)修復(fù)邏輯執(zhí)行模塊,用于執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;
注冊(cè)表函數(shù)調(diào)用邏輯執(zhí)行模塊,用于采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。優(yōu)選的是,所述的裝置還包括篡改點(diǎn)回寫(xiě)模塊,用于在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回變化值。優(yōu)選的是,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)包括注冊(cè)表對(duì)象解析例程鉤掛;Cm*注冊(cè)表實(shí)現(xiàn)例程調(diào)用第三方驅(qū)動(dòng)時(shí)的CmpCallBack回調(diào)機(jī)制; Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤;HvpGetCelIPaged/HvpGetCelIMapped 對(duì)象例程鉤掛。優(yōu)選的是,所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值在初始化時(shí)獲得,所述內(nèi)核執(zhí)行流篡改點(diǎn)的變化值緩存在內(nèi)核內(nèi)存中。優(yōu)選的是,所述的裝置還包括用戶態(tài)請(qǐng)求發(fā)送模塊,用于發(fā)起注冊(cè)表操作請(qǐng)求,調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口例程;其中,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);控制碼發(fā)送模塊,用于依據(jù)系統(tǒng)平臺(tái)的類(lèi)型構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù),依據(jù)所述內(nèi)核態(tài)結(jié)構(gòu)參數(shù)生成相應(yīng)的注冊(cè)表操作控制碼,并發(fā)送至操作系統(tǒng)內(nèi)核態(tài)。優(yōu)選的是,所述的裝置還包括參數(shù)校驗(yàn)?zāi)K,用于依據(jù)所述注冊(cè)表操作請(qǐng)求校驗(yàn)調(diào)用者輸入?yún)?shù),若校驗(yàn)通過(guò),則調(diào)用內(nèi)核執(zhí)行邏輯設(shè)置模塊。優(yōu)選的是,所述調(diào)用者輸入?yún)?shù)具有用戶態(tài)地址;所述的裝置還包括地址重構(gòu)模塊,用于重構(gòu)所述用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間。優(yōu)選的是,所述的裝置還包括句柄返回模塊,用于在調(diào)用所述注冊(cè)表的函數(shù)成功時(shí),返回相應(yīng)的句柄;錯(cuò)誤碼返回模塊,用于在調(diào)用所述注冊(cè)表的函數(shù)失敗時(shí),生成錯(cuò)誤碼并返回用戶態(tài)。與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn)本發(fā)明基于注冊(cè)表行為的全生命周期構(gòu)建注冊(cè)表操作的可信環(huán)境,在操作系統(tǒng)用戶態(tài)接口完整實(shí)現(xiàn)一套注冊(cè)表操作調(diào)用庫(kù),內(nèi)核態(tài)驅(qū)動(dòng)接收并校驗(yàn)來(lái)自用戶態(tài)的請(qǐng)求,通過(guò)自己模擬內(nèi)核執(zhí)行層的行為,檢測(cè)/恢復(fù)對(duì)象解析掛鉤、阻斷內(nèi)核注冊(cè)表回調(diào)機(jī)制等方法,使第三方驅(qū)動(dòng)被穿透(或稱之為旁路,bypass),從而保證注冊(cè)表操作請(qǐng)求環(huán)境的真實(shí)、可信。并且,內(nèi)核同步調(diào)用返回用戶態(tài)句柄信息以及調(diào)用狀態(tài)。本發(fā)明提出了一種注冊(cè)表穿透操作的整體解決方案,不僅提供了操作系統(tǒng)用戶態(tài)的攻防,還進(jìn)一步提供了操作系統(tǒng)內(nèi)核態(tài)的攻防,該方案一方面可有效避免因注冊(cè)表操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性;另一方面,該方案能有效增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力。
圖I是一種操作系統(tǒng)注冊(cè)表操作執(zhí)行過(guò)程的示意圖;圖2是本發(fā)明的一種注冊(cè)表操作的執(zhí)行方法實(shí)施例I的步驟流程圖3是本發(fā)明中檢測(cè)/恢復(fù)內(nèi)核執(zhí)行流篡改點(diǎn)的步驟流程圖;圖4是本發(fā)明的一種注冊(cè)表操作的執(zhí)行方法實(shí)施例2的步驟流程圖;圖5是本發(fā)明的一種注冊(cè)表操作的執(zhí)行裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。本發(fā)明實(shí)施例的核心構(gòu)思之一在于,基于注冊(cè)表行為的全生命周期構(gòu)建注冊(cè)表操作的可信環(huán)境,在操作系統(tǒng)用戶態(tài)接口完整實(shí)現(xiàn)一套注冊(cè)表操作調(diào)用庫(kù),內(nèi)核態(tài)驅(qū)動(dòng)接收并校驗(yàn)來(lái)自用戶態(tài)的請(qǐng)求,通過(guò)自己模擬內(nèi)核執(zhí)行層的行為,檢測(cè)/恢復(fù)對(duì)象解析掛鉤、阻 斷內(nèi)核注冊(cè)表回調(diào)機(jī)制等方法,使第三方驅(qū)動(dòng)被穿透(或稱之為旁路,bypass),從而保證注冊(cè)表操作請(qǐng)求環(huán)境的真實(shí)、可信。并且,內(nèi)核同步調(diào)用返回用戶態(tài)句柄信息以及調(diào)用狀態(tài)。本發(fā)明提出了一種注冊(cè)表穿透操作的整體解決方案,不僅提供了操作系統(tǒng)用戶態(tài)的攻防,還進(jìn)一步提供了操作系統(tǒng)內(nèi)核態(tài)的攻防,該方案一方面可有效避免因注冊(cè)表操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性;另一方面,該方案能有效增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力。參考圖2,示出了本發(fā)明的一種注冊(cè)表操作的執(zhí)行方法實(shí)施例I的步驟流程圖,具體可以包括以下步驟步驟201、獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);步驟202、依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯;在具體實(shí)現(xiàn)中,當(dāng)獲取到注冊(cè)表操作請(qǐng)求,會(huì)對(duì)請(qǐng)求中包含的調(diào)用者輸入?yún)?shù)進(jìn)行校驗(yàn),若校驗(yàn)通過(guò),則可以通過(guò)構(gòu)建_PARSE_CONTEXT (上下文解析)結(jié)構(gòu)來(lái)設(shè)置注冊(cè)表函數(shù)調(diào)用邏輯,以及,設(shè)置在注冊(cè)表函數(shù)調(diào)用之前執(zhí)行的篡改點(diǎn)檢測(cè)修復(fù)邏輯。本實(shí)施例即通過(guò)主動(dòng)去“模擬”內(nèi)核執(zhí)行層,自己實(shí)現(xiàn)構(gòu)建_PARSE_C0NTEXT結(jié)構(gòu)后,再去調(diào)用系統(tǒng)底層函數(shù)。在本發(fā)明的另一種優(yōu)選實(shí)施例中,還可以通過(guò)“偽造”內(nèi)核的方法,把磁盤(pán)上的內(nèi)核文件影射到內(nèi)存,結(jié)合重定位后,完整的提取出相關(guān)執(zhí)行層函數(shù)(因?yàn)槭峭暾崛。云鋬?nèi)部包括“構(gòu)建_PARSE_C0NTEXT結(jié)構(gòu)”)。當(dāng)然,上述設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯的方法僅僅用作示例,本領(lǐng)域技術(shù)人員根據(jù)實(shí)際情況采用任一種方式設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯均是可行的,本發(fā)明對(duì)此不作限制。步驟203、執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;在具體實(shí)現(xiàn)中,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)可以包括注冊(cè)表對(duì)象解析例程鉤掛;Cm*注冊(cè)表實(shí)現(xiàn)例程調(diào)用第三方驅(qū)動(dòng)時(shí)的CmpCallBack回調(diào)機(jī)制;Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤;以及,HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛。各內(nèi)核執(zhí)行流篡改點(diǎn)的原始值可以在系統(tǒng)初始化時(shí)獲得。當(dāng)然,上述內(nèi)核執(zhí)行流篡改點(diǎn)僅僅用作示例,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)可以由本領(lǐng)域技術(shù)人員按照實(shí)際需求任意設(shè)置,本發(fā)明對(duì)此無(wú)需加以限制。
參考圖3,在本發(fā)明的一種優(yōu)選實(shí)施例中,所述檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí)恢復(fù)所述篡改點(diǎn)原始值的步驟具體可以包括以下子步驟子步驟SI、檢測(cè)注冊(cè)表對(duì)象解析例程鉤掛的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S2,否則,執(zhí)行子步驟S3;子步驟S2、恢復(fù)所述注冊(cè)表對(duì)象解析例程鉤掛的原始值,轉(zhuǎn)子步驟S3 ;子步驟S3、調(diào)用Cm*注冊(cè)表實(shí)現(xiàn)例程,檢測(cè)Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S4,否則,執(zhí)行子步驟S5 ;子步驟S4、恢復(fù)所述Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤的原始值,轉(zhuǎn)子步驟S5 ;子步驟S5、阻斷CmpCallBack回調(diào)機(jī)制,轉(zhuǎn)子步驟S6 ;
子步驟S6、檢測(cè)HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S7,否則結(jié)束;子步驟S7、恢復(fù)所述HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛的原始值。在具體實(shí)現(xiàn)中,如檢測(cè)到某個(gè)內(nèi)核執(zhí)行流篡改點(diǎn)發(fā)生變化,則可記錄其變化值在內(nèi)核態(tài)內(nèi)存空間,以便在注冊(cè)表函數(shù)調(diào)用完成后進(jìn)行回寫(xiě)。當(dāng)然,上述篡改點(diǎn)的檢測(cè)及修復(fù)方法僅僅用作示例,本領(lǐng)域技術(shù)人員依據(jù)實(shí)際需求任意設(shè)置所述篡改點(diǎn)的檢測(cè)及修復(fù)操作過(guò)程都是可行的,例如,可以先統(tǒng)一檢測(cè),再對(duì)發(fā)生變化的篡改點(diǎn)統(tǒng)一恢復(fù),本發(fā)明對(duì)此不作限制。步驟204、采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例還可以包括如下步驟步驟205、在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回
變化值。在實(shí)際中,某些內(nèi)核執(zhí)行流篡改點(diǎn)是因?yàn)楸黄渌陌踩浖膶?xiě)而發(fā)生變化,故在系統(tǒng)底層注冊(cè)表的實(shí)現(xiàn)函數(shù)調(diào)用完成后,為保證其它安全軟件的正常運(yùn)行,需要對(duì)所述內(nèi)核執(zhí)行流篡改點(diǎn)進(jìn)行回寫(xiě),具體可以從內(nèi)核態(tài)內(nèi)存空間中提取在恢復(fù)原始值過(guò)程中保存的變化值,將對(duì)應(yīng)的內(nèi)核執(zhí)行流篡改點(diǎn)寫(xiě)回該變化值。當(dāng)注冊(cè)表函數(shù)調(diào)用完成后,注冊(cè)表操作執(zhí)行流將繼續(xù)調(diào)用注冊(cè)表解析例程,再由注冊(cè)表解析例程調(diào)用Cm*注冊(cè)表實(shí)現(xiàn)例程,Cm*注冊(cè)表實(shí)現(xiàn)例程直接調(diào)用HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程;由于 CmpCallBack 回調(diào)機(jī)制被阻斷,故Cm*注冊(cè)表實(shí)現(xiàn)例程將不再調(diào)用第三方驅(qū)動(dòng),從而使得第三方驅(qū)動(dòng)(其他安全軟件、驅(qū)動(dòng)級(jí)惡意程序)被穿透。參考圖4,示出了本發(fā)明的一種注冊(cè)表操作的執(zhí)行方法實(shí)施例2的步驟流程圖,具體可以包括步驟401、加載注冊(cè)表操作接口例程,獲取預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;公知的是,例程是某個(gè)系統(tǒng)對(duì)外提供的功能接口或服務(wù)的集合。比如操作系統(tǒng)的API、服務(wù)等就是例程。作為具體應(yīng)用的一種示例,所述注冊(cè)表操作接口例程可以包括注冊(cè)表鍵創(chuàng)建例程BRegCreateKey、注冊(cè)表增強(qiáng)鍵創(chuàng)建例程BRegCreateKeyEx、注冊(cè)表鍵打開(kāi)例程BRegOpenKey、注冊(cè)表增強(qiáng)鍵打開(kāi)例程BRegOpenKeyEx、注冊(cè)表增強(qiáng)查詢值例程BRegQueryValueEx、注冊(cè)表設(shè)置值例程BRegSetValueEx、注冊(cè)表枚舉鍵例程BRegEnumKey、注冊(cè)表增強(qiáng)枚舉鍵例程BRegEnumKeyEx、注冊(cè)表枚舉值例程BRegEnumValue、注冊(cè)表刪除鍵例程BRegDeIeteKey、注冊(cè)表增強(qiáng)刪除鍵例程BRegDeIeteKeyEx、注冊(cè)表刪除值例程BRegDeleteValue和/或注冊(cè)表關(guān)閉句柄例程BRegCloseKey。所述注冊(cè)表操作接口例程的設(shè)置,如調(diào)用約定、調(diào)用參數(shù)和對(duì)應(yīng)的WINDOWS標(biāo)準(zhǔn)API —致。上述每個(gè)例程均包括窄字符例程和寬字符例程,例如對(duì)于BRegCreateKey而言,包括窄字符例程BRegCreateKeyA和寬字符例程BRegCreateKeyW,BRegCreateKeyA會(huì)轉(zhuǎn)換輸入?yún)?shù)為UNICODE類(lèi)型,BRegCreateKeyff實(shí)際完成參數(shù)轉(zhuǎn)換、控制碼通信等。步驟402、調(diào)用者發(fā)起注冊(cè)表操作請(qǐng)求,調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口例程;其中,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);步驟403、若所述注冊(cè)表操作接口例程為窄字符例程,則將調(diào)用者輸入?yún)?shù)中的 ANSI相關(guān)參數(shù)轉(zhuǎn)換為UNICODE類(lèi)型,并調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口寬字符例程;公知的是,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。(對(duì)于字符來(lái)說(shuō)ANSI以單字節(jié)存放英文字符,以雙字節(jié)存放中文等字符,而Unicode下,英文和中文的字符都以雙字節(jié)存放)。當(dāng)然,若在實(shí)際中直接調(diào)用的是寬字符例程,則無(wú)需執(zhí)行本步驟。步驟404、依據(jù)系統(tǒng)平臺(tái)的類(lèi)型構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù),依據(jù)所述內(nèi)核態(tài)結(jié)構(gòu)參數(shù)生成相應(yīng)的注冊(cè)表操作控制碼,并發(fā)送至操作系統(tǒng)內(nèi)核態(tài);所述系統(tǒng)平臺(tái)的類(lèi)型包括32位、64位以及32位兼容模式。作為本發(fā)明一種具體應(yīng)用的示例,與所述注冊(cè)表操作接口例程對(duì)應(yīng)的控制碼包括注冊(cè)表創(chuàng)建控制碼REGCTL_CREATE_KEY、注冊(cè)表打開(kāi)控制碼REGCTL_0PEN_KEY、注冊(cè)表查詢值控制碼REGCTL_QUERY_VALUE_KEY、注冊(cè)表設(shè)置值控制碼REGCTL_SET_VALUE_KEY、注冊(cè)表枚舉鍵控制碼REGCTL_ENUMERATE_KEY、注冊(cè)表枚舉值控制碼REGCTL_ENUMERATE_VALUE_KEY、注冊(cè)表刪除鍵控制碼REGCTL_DELETE_KEY和/或注冊(cè)表刪除值控制碼REGCTL_DELETE_VALUE_KEY。所述控制碼定義了操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)驅(qū)動(dòng)通信時(shí)的統(tǒng)一標(biāo)識(shí)。在實(shí)際中,操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)驅(qū)動(dòng)通信時(shí)輸入、輸出緩沖區(qū)可以采用METH0D_BUFFERED方式傳輸。METH0D_BUFFERED方式為先分配緩沖,再?gòu)倪@個(gè)緩沖copy數(shù)據(jù),緩沖區(qū)大小是輸入緩沖和輸出緩沖間空間較大的那個(gè)。讀緩沖被copy到新的緩沖。在返回前,只是copy返回值到相同的緩沖。返回值被放到I0_STATUS_BL0CK,10管理器copy數(shù)據(jù)到輸出緩沖。步驟405、操作系統(tǒng)內(nèi)核態(tài)獲取注冊(cè)表操作請(qǐng)求,校驗(yàn)調(diào)用者輸入?yún)?shù),并重構(gòu)(Captured)所述用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間;步驟406、若輸入?yún)?shù)校驗(yàn)通過(guò),則依據(jù)所述調(diào)用者輸入?yún)?shù)構(gòu)建_PARSE_CONTEXT結(jié)構(gòu),以設(shè)置注冊(cè)表函數(shù)調(diào)用邏輯,并設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯;步驟407、執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;步驟408、采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù);若調(diào)用成功,則執(zhí)行步驟409 ;若調(diào)用失敗,則執(zhí)行步驟410 ;
步驟409、返回相應(yīng)的句柄;步驟410、生成錯(cuò)誤碼并返回用戶態(tài);在具體實(shí)現(xiàn)中,如果調(diào)用失敗,用戶態(tài)接口可以設(shè)置相應(yīng)的錯(cuò)誤碼,這樣,調(diào)用者線程可以通過(guò)GetLastError例程得到詳細(xì)的錯(cuò)誤信息。步驟411、在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回
變化值。為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下通過(guò)以注冊(cè)表創(chuàng)建過(guò)程為例詳細(xì)說(shuō)明本發(fā)明。 (I)調(diào)用者進(jìn)程發(fā)起B(yǎng)RegCreateKeyA注冊(cè)表創(chuàng)建請(qǐng)求;(2) BRegCreateKeyA例程轉(zhuǎn)換ANSI相關(guān)參數(shù)為UNICODE類(lèi)型并調(diào)用BRegCreateKeyff 例程;(3) BRegCreateKeyW例程判斷系統(tǒng)平臺(tái)(32位、64位或32位兼容模式)構(gòu)建結(jié)構(gòu)參數(shù),發(fā)送控制碼REGCTL_CREATE_KEY并同步等待返回;(4) BRegCreateKeyW例程內(nèi)核部分接收用戶態(tài)請(qǐng)求,校驗(yàn)輸入?yún)?shù),Captured地址到內(nèi)核內(nèi)存;(5) BRegCreateKeyff例程構(gòu)建_PARSE_C0NTEXT結(jié)構(gòu),調(diào)用系統(tǒng)底層注冊(cè)表實(shí)現(xiàn)函數(shù);在調(diào)用之前執(zhí)行以下篡改點(diǎn)檢測(cè)修復(fù)操作Al、檢測(cè)、恢復(fù)潛在的注冊(cè)表對(duì)象解析例程掛鉤問(wèn)題;A2、檢測(cè)、恢復(fù)潛在的CmpCallback內(nèi)核回調(diào)問(wèn)題;A3、檢測(cè)、恢復(fù)潛在的Cm*級(jí)注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤問(wèn)題;A4、檢測(cè)、恢復(fù)潛在的HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程掛鉤問(wèn)題。(6)如調(diào)用成功則返回相應(yīng)的句柄;如例程調(diào)用錯(cuò)誤,驅(qū)動(dòng)返回用戶態(tài)相應(yīng)的錯(cuò)誤碼。(7)同步請(qǐng)求返回,如果調(diào)用失敗,用戶態(tài)接口設(shè)置相應(yīng)的錯(cuò)誤碼,這樣,調(diào)用者線程可以通過(guò)GetLastError例程得到詳細(xì)的錯(cuò)誤信息。需要說(shuō)明的是,對(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)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。參考圖5,示出了本發(fā)明的一種注冊(cè)表操作的執(zhí)行裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括以下模塊請(qǐng)求獲取模塊51,用于獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);內(nèi)核執(zhí)行邏輯設(shè)置模塊52,用于依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯;篡改點(diǎn)檢測(cè)修復(fù)邏輯執(zhí)行模塊53,用于執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;注冊(cè)表函數(shù)調(diào)用邏輯執(zhí)行模塊54,用于采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。
在具體實(shí)現(xiàn)中,所述的裝置還可以包括以下模塊篡改點(diǎn)回寫(xiě)模塊55,用于在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回變化值。在本發(fā)明的一種優(yōu)選實(shí)施例中,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)可以包括注冊(cè)表對(duì)象解析例程鉤掛;Cm*注冊(cè)表實(shí)現(xiàn)例程調(diào)用第三方驅(qū)動(dòng)時(shí)的CmpCallBack回調(diào)機(jī)制;Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤;HvpGetCelIPaged/HvpGetCelIMapped 對(duì)象例程鉤掛。
在實(shí)際中,所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值可以在初始化時(shí)獲得,所述內(nèi)核執(zhí)行流篡改點(diǎn)的變化值可以緩存在內(nèi)核內(nèi)存中。在本發(fā)明的一種優(yōu)選實(shí)施例中,所述的裝置還可以包括以下模塊用戶態(tài)請(qǐng)求發(fā)送模塊,用于發(fā)起注冊(cè)表操作請(qǐng)求,調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口例程;其中,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);控制碼發(fā)送模塊,用于依據(jù)系統(tǒng)平臺(tái)的類(lèi)型構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù),依據(jù)所述內(nèi)核態(tài)結(jié)構(gòu)參數(shù)生成相應(yīng)的注冊(cè)表操作控制碼,并發(fā)送至操作系統(tǒng)內(nèi)核態(tài)。在具體實(shí)現(xiàn)中,所述的裝置還可以包括以下模塊參數(shù)校驗(yàn)?zāi)K,用于依據(jù)所述注冊(cè)表操作請(qǐng)求校驗(yàn)調(diào)用者輸入?yún)?shù),若校驗(yàn)通過(guò),則調(diào)用內(nèi)核執(zhí)行邏輯設(shè)置模塊。作為具體應(yīng)用的一種示例,所述調(diào)用者輸入?yún)?shù)具有用戶態(tài)地址;所述的裝置還可以包括以下模塊地址重構(gòu)模塊,用于重構(gòu)所述用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間。在具體實(shí)現(xiàn)中,所述的裝置還可以包括以下模塊句柄返回模塊,用于在調(diào)用所述注冊(cè)表的函數(shù)成功時(shí),返回相應(yīng)的句柄;錯(cuò)誤碼返回模塊,用于在調(diào)用所述注冊(cè)表的函數(shù)失敗時(shí),生成錯(cuò)誤碼并返回用戶態(tài)。由于所述裝置實(shí)施例基本相應(yīng)于前述圖2和圖4所示的方法實(shí)施例,故本實(shí)施例的描述中未詳盡之處,可以參見(jiàn)前述實(shí)施例中的相關(guān)說(shuō)明,在此就不贅述了。本發(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ù)類(lèi)型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。以上對(duì)本發(fā)明所提供的一種注冊(cè)表操作的執(zhí)行方法和一種注冊(cè)表操作的執(zhí)行裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本 說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種注冊(cè)表操作的執(zhí)行方法,其特征在于,包括 獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù); 依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯; 執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值; 采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。
2.如權(quán)利要求I所述的方法,其特征在于,還包括 在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回變化值。
3.如權(quán)利要求I或2所述的方法,其特征在于,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)包括 注冊(cè)表對(duì)象解析例程鉤掛; Cm*注冊(cè)表實(shí)現(xiàn)例程調(diào)用第三方驅(qū)動(dòng)時(shí)的CmpCallBack回調(diào)機(jī)制; Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤; HvpGetCelIPaged/HvpGetCelIMapped 對(duì)象例程鉤掛。
4.如權(quán)利要求3所述的方法,其特征在于,所述檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí)恢復(fù)所述篡改點(diǎn)原始值的步驟具體包括 子步驟SI、檢測(cè)注冊(cè)表對(duì)象解析例程鉤掛的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S2,否則,執(zhí)行子步驟S3; 子步驟S2、恢復(fù)所述注冊(cè)表對(duì)象解析例程鉤掛的原始值,轉(zhuǎn)子步驟S3 ; 子步驟S3、調(diào)用Cm*注冊(cè)表實(shí)現(xiàn)例程,檢測(cè)Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S4,否則,執(zhí)行子步驟S5 ; 子步驟S4、恢復(fù)所述Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤的原始值,轉(zhuǎn)子步驟S5 ; 子步驟S5、阻斷CmpCallBack回調(diào)機(jī)制,轉(zhuǎn)子步驟S6 ; 子步驟S6、檢測(cè)HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛的原始值是否發(fā)生改變,若是,則執(zhí)行子步驟S7,否則結(jié)束; 子步驟S7、恢復(fù)所述HvpGetCelIPaged/HvpGetCelIMapped對(duì)象例程鉤掛的原始值。
5.如權(quán)利要求4所述的方法,其特征在于,所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值在初始化時(shí)獲得,所述內(nèi)核執(zhí)行流篡改點(diǎn)的變化值緩存在內(nèi)核內(nèi)存中。
6.如權(quán)利要求I或2所述的方法,其特征在于,在獲取注冊(cè)表操作請(qǐng)求之前,還包括 調(diào)用者發(fā)起注冊(cè)表操作請(qǐng)求,調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口例程;其中,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù); 依據(jù)系統(tǒng)平臺(tái)的類(lèi)型構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù),依據(jù)所述內(nèi)核態(tài)結(jié)構(gòu)參數(shù)生成相應(yīng)的注冊(cè)表操作控制碼,并發(fā)送至操作系統(tǒng)內(nèi)核態(tài)。
7.如權(quán)利要求6所述的方法,其特征在于,各注冊(cè)表操作接口例程包括窄字符例程和寬字符例程,在構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù)之前,所述的方法還包括 所述注冊(cè)表操作接口窄字符例程將調(diào)用者輸入?yún)?shù)中的ANSI相關(guān)參數(shù)轉(zhuǎn)換為UNICODE類(lèi)型,并調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口寬字符例程。
8.如權(quán)利要求7所述的方法,其特征在于,在設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯之前,所述的方法還包括依據(jù)所述注冊(cè)表操作請(qǐng)求校驗(yàn)調(diào)用者輸入?yún)?shù),若校驗(yàn)通過(guò),則執(zhí)行設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯的步驟。
9.如權(quán)利要求8所述的方法,其特征在于,所述調(diào)用者輸入?yún)?shù)具有用戶態(tài)地址;在設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯之前,所述的方法還包括 重構(gòu)所述用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間。
10.如權(quán)利要求7、8或9所述的方法,其特征在于,還包括 若調(diào)用所述注冊(cè)表的函數(shù)成功,則返回相應(yīng)的句柄; 若調(diào)用所述注冊(cè)表的函數(shù)失敗,則生成錯(cuò)誤碼并返回用戶態(tài)。
11.如權(quán)利要求10所述的方法,其特征在于,所述注冊(cè)表操作接口例程與WINDOWS標(biāo)準(zhǔn)API —致,包括注冊(cè)表鍵創(chuàng)建例程BRegCreateKey、注冊(cè)表增強(qiáng)鍵創(chuàng)建例程BRegCreateKeyEx、注冊(cè)表鍵打開(kāi)例程BRegOpenKey、注冊(cè)表增強(qiáng)鍵打開(kāi)例程BRegOpenKeyEx、注冊(cè)表增強(qiáng)查詢值例程BRegQueryValueEx、注冊(cè)表設(shè)置值例程BRegSetValueEx、注冊(cè)表枚舉鍵例程BRegEnumKey、注冊(cè)表增強(qiáng)枚舉鍵例程BRegEnumKeyEx、注冊(cè)表枚舉值例程BRegEnumValue、注冊(cè)表刪除鍵例程BRegDeleteKey、注冊(cè)表增強(qiáng)刪除鍵例程BRegDeleteKeyEx、注冊(cè)表刪除值例程BRegDeleteValue和/或注冊(cè)表關(guān)閉句柄例程BRegCloseKey0
12.如權(quán)利要求11所述的方法,其特征在于,所述控制碼包括注冊(cè)表創(chuàng)建控制碼REGCTL_CREATE_KEY、注冊(cè)表打開(kāi)控制碼REGCTL_OPEN_KEY、注冊(cè)表查詢值控制碼REGCTL_QUERY_VALUE_KEY、注冊(cè)表設(shè)置值控制碼REGCTL_SET_VALUE_KEY、注冊(cè)表枚舉鍵控制碼REGCTL_ENUMERATE_KEY、注冊(cè)表枚舉值控制碼 REGCTL_ENUMERATE_VALUE_KEY、注冊(cè)表刪除鍵控制碼REGCTL_DELETE_KEY和/或注冊(cè)表刪除值控制碼REGCTL_DELETE_VALUE_KEY。
13.—種注冊(cè)表操作的執(zhí)行裝置,其特征在于,包括 請(qǐng)求獲取模塊,用于獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù); 內(nèi)核執(zhí)行邏輯設(shè)置模塊,用于依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯; 篡改點(diǎn)檢測(cè)修復(fù)邏輯執(zhí)行模塊,用于執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值; 注冊(cè)表函數(shù)調(diào)用邏輯執(zhí)行模塊,用于采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。
14.如權(quán)利要求13所述的裝置,其特征在于,還包括 篡改點(diǎn)回寫(xiě)模塊,用于在調(diào)用完所述注冊(cè)表的函數(shù)后,將所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值改回變化值。
15.如權(quán)利要求13或14所述的裝置,其特征在于,所述預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn)包括 注冊(cè)表對(duì)象解析例程鉤掛; Cm*注冊(cè)表實(shí)現(xiàn)例程調(diào)用第三方驅(qū)動(dòng)時(shí)的CmpCallBack回調(diào)機(jī)制; Cm*注冊(cè)表函數(shù)內(nèi)聯(lián)掛鉤; HvpGetCelIPaged/HvpGetCel!Mapped 對(duì)象例程鉤掛。
16.如權(quán)利要求15所述的裝置,其特征在于,所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值在初始化時(shí)獲得,所述內(nèi)核執(zhí)行流篡改點(diǎn)的變化值緩存在內(nèi)核內(nèi)存中。
17.如權(quán)利要求13或14所述的裝置,其特征在于,還包括 用戶態(tài)請(qǐng)求發(fā)送模塊,用于發(fā)起注冊(cè)表操作請(qǐng)求,調(diào)用對(duì)應(yīng)的注冊(cè)表操作接口例程;其中,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù); 控制碼發(fā)送模塊,用于依據(jù)系統(tǒng)平臺(tái)的類(lèi)型構(gòu)建內(nèi)核態(tài)結(jié)構(gòu)參數(shù),依據(jù)所述內(nèi)核態(tài)結(jié)構(gòu)參數(shù)生成相應(yīng)的注冊(cè)表操作控制碼,并發(fā)送至操作系統(tǒng)內(nèi)核態(tài)。
18.如權(quán)利要求17所述的裝置,其特征在于,還包括 參數(shù)校驗(yàn)?zāi)K,用于依據(jù)所述注冊(cè)表操作請(qǐng)求校驗(yàn)調(diào)用者輸入?yún)?shù),若校驗(yàn)通過(guò),則調(diào)用內(nèi)核執(zhí)行邏輯設(shè)置模塊。
19.如權(quán)利要求18所述的裝置,其特征在于,所述調(diào)用者輸入?yún)?shù)具有用戶態(tài)地址;所述的裝置還包括 地址重構(gòu)模塊,用于重構(gòu)所述用戶態(tài)地址至內(nèi)核態(tài)內(nèi)存空間。
20.如權(quán)利要求18或19所述的裝置,其特征在于,還包括 句柄返回模塊,用于在調(diào)用所述注冊(cè)表的函數(shù)成功時(shí),返回相應(yīng)的句柄; 錯(cuò)誤碼返回模塊,用于在調(diào)用所述注冊(cè)表的函數(shù)失敗時(shí),生成錯(cuò)誤碼并返回用戶態(tài)。
全文摘要
本發(fā)明提供了一種注冊(cè)表操作的執(zhí)行方法,包括獲取注冊(cè)表操作請(qǐng)求,所述請(qǐng)求中包括調(diào)用者輸入?yún)?shù);依據(jù)所述調(diào)用者輸入?yún)?shù)設(shè)置注冊(cè)表內(nèi)核執(zhí)行邏輯,所述內(nèi)核執(zhí)行邏輯包括篡改點(diǎn)檢測(cè)修復(fù)邏輯和注冊(cè)表函數(shù)調(diào)用邏輯;執(zhí)行所述篡改點(diǎn)檢測(cè)修復(fù)邏輯,具體為,檢測(cè)預(yù)置的內(nèi)核執(zhí)行流篡改點(diǎn),并在所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值發(fā)生變化時(shí),恢復(fù)所述內(nèi)核執(zhí)行流篡改點(diǎn)的原始值;采用所述注冊(cè)表函數(shù)調(diào)用邏輯,調(diào)用對(duì)應(yīng)的注冊(cè)表函數(shù)。本發(fā)明可以增強(qiáng)和驅(qū)動(dòng)級(jí)惡意程序攻防的對(duì)抗能力,并避免因注冊(cè)表操作干擾而導(dǎo)致安全軟件間產(chǎn)生不兼容的潛在可能性。
文檔編號(hào)G06F21/00GK102779030SQ201110121178
公開(kāi)日2012年11月14日 申請(qǐng)日期2011年5月11日 優(yōu)先權(quán)日2011年5月11日
發(fā)明者潘劍鋒, 王宇, 鄭文彬 申請(qǐng)人:奇智軟件(北京)有限公司