一種攔截驅(qū)動加載的方法及終端的制作方法
【專利摘要】本發(fā)明實施例公開了一種攔截驅(qū)動加載的方法,包括:監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息;當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;當確定所述應用程序為惡意程序時,對所述消息進行攔截。本發(fā)明實施例還公開了一種終端。采用本發(fā)明,降低終端攔截驅(qū)動加載的處理壓力,節(jié)省終端的運行資源,并提高終端的攔截準確性,從而提升終端的自身安全。
【專利說明】
一種攔截驅(qū)動加載的方法及終端
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及電子技術(shù)領(lǐng)域,尤其涉及一種攔截驅(qū)動加載的方法及終端。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)發(fā)展,病毒,木馬等惡意軟件技術(shù)層出不窮。惡意程序可利用特殊惡意代碼進行惡意行為攻擊服務系統(tǒng)。目前許多惡意程序多是在用戶未知的情況下可進行加載驅(qū)動行為,并當惡意程序加載驅(qū)動成功時,惡意程序可以刪除掉任意安全應用程序,這給終端帶來了重大的安全隱患。
[0003]為了避免惡意程序進行惡意加載驅(qū)動行為,目前終端可在進行加載驅(qū)動文件時,對獲取到的加載驅(qū)動文件以及相關(guān)文件進行掃描,并綜合判斷是否需進行攔截加載驅(qū)動,并當確定需進行攔截時,終端將中斷加載驅(qū)動文件。但是,由于終端已準備進行加載驅(qū)動文件,若當終端確定進行攔截加載驅(qū)動時,這使得終端將浪費資源在加載驅(qū)動文件的前期準備工作上,從而浪費了終端的運行資源,使得終端的處理壓力過重。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實施例所要解決的技術(shù)問題在于,提供一種攔截驅(qū)動加載的方法及終端??山档徒K端攔截驅(qū)動加載的處理壓力,節(jié)省終端的運行資源。
[0005]為了解決上述技術(shù)問題,本發(fā)明實施例提供了一種攔截驅(qū)動加載的方法,包括:
[0006]監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息;
[0007]當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;
[0008]當確定所述應用程序為惡意程序時,對所述消息進行攔截,以對所述應用程序通過所述消息進行加載驅(qū)動的行為進行攔截。
[0009]其中,所述判斷所述消息是否為用于指示加載驅(qū)動的消息包括:
[0010]檢測所述消息是否攜帶加載驅(qū)動標識符;
[0011]當確定所述消息攜帶所述加載驅(qū)動標識符,確定所述消息為用于指示加載驅(qū)動的消息。
[0012]其中,所述對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序之前包括:
[0013]當確定所述消息為用于指示加載驅(qū)動的消息時,根據(jù)所述消息確定所述應用程序所要加載的驅(qū)動文件;
[0014]對所述驅(qū)動文件進行安全檢測,判斷所述驅(qū)動文件是否為危險文件;
[0015]當確定所述驅(qū)動文件不是危險文件時,執(zhí)行所述對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序步驟;
[0016]當確定所述驅(qū)動文件是危險文件時,對所述消息進行攔截。
[0017]其中,所述消息攜帶所述驅(qū)動文件的存儲路徑;
[0018]所述根據(jù)所述消息確定所述應用程序所要加載的驅(qū)動文件包括:
[0019]根據(jù)所述驅(qū)動文件的存儲路徑確定所述驅(qū)動文件。
[0020]其中,所述對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序之前包括:
[0021 ]獲取所述消息的發(fā)送進程路徑;
[0022]根據(jù)所述消息的發(fā)送進程路徑確定所述應用程序。
[0023 ]相應地,本發(fā)明實施例還提供了一種終端,所述終端包括:
[0024]判斷單元,用于監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息;
[0025]第一安全檢測單元,用于當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;
[0026]攔截單元,用于當確定所述應用程序為惡意程序時,對所述消息進行攔截,以對所述應用程序通過所述消息進行加載驅(qū)動的行為進行攔截。
[0027]其中,所述第一判斷單元包括:
[0028]檢測子單元,用于檢測所述消息是否攜帶加載驅(qū)動標識符;
[0029]確定子單元,用于當所述檢測子單元確定所述消息攜帶所述加載驅(qū)動標識符,確定所述消息為用于指示加載驅(qū)動的消息。
[0030]其中,所述終端還包括:
[0031]第一確定單元,用于當所述第一判斷單元確定所述消息為用于指示加載驅(qū)動的消息時,根據(jù)所述消息確定所述應用程序所要加載的驅(qū)動文件;
[0032]第二安全檢測單元,用于對所述驅(qū)動文件進行安全檢測,判斷所述驅(qū)動文件是否為危險文件;
[0033]當所述第二安全檢測單元確定所述驅(qū)動文件不是危險文件時,通知所述第一安全檢測單元對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;
[0034]當所述第二安全檢測單元確定所述驅(qū)動文件是危險文件時,通知所述攔截單元對所述消息進行攔截。
[0035]其中,所述消息攜帶所述驅(qū)動文件的存儲路徑;
[0036]所述確定單元具體用于:
[0037]根據(jù)所述驅(qū)動文件的存儲路徑確定所述驅(qū)動文件。
[0038]其中,所述終端還包括:
[0039]獲取單元,用于獲取所述消息的發(fā)送進程路徑;
[0040]第二確定單元,用于根據(jù)所述消息的發(fā)送進程路徑確定所述應用程
[0041]實施本發(fā)明實施例,具有如下有益效果:
[0042]在本發(fā)明實施例中,終端監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息;當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;當確定所述應用程序為惡意程序時,對所述消息進行攔截,這使得終端僅通過對消息的攔截即能實現(xiàn)對惡意程序加載驅(qū)動的行為進行攔截,從而簡便終端的攔截操作,降低終端攔截驅(qū)動加載的處理壓力,節(jié)省終端的運行資源,并提高終端的攔截準確性,從而提升終端的自身安全。
【附圖說明】
[0043]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0044]圖1是本發(fā)明實施例提供的一種攔截驅(qū)動加載的方法的第一實施例流程示意圖;
[0045]圖2是本發(fā)明實施例提供的一種終端的第一實施例結(jié)構(gòu)圖。
【具體實施方式】
[0046]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0047]本發(fā)明實施例中的執(zhí)行主體可以為終端,所描述的終端可包括:電腦、平板電腦、筆記本等智能終端,上述終端僅是舉例,而非窮舉,包含但不限于上述終端。
[0048]參見圖1,是本發(fā)明實施例提供的一種攔截驅(qū)動加載的方法第一實施例流程示意圖。本發(fā)明實施例的一種攔截驅(qū)動加載的方法包括如下步驟:
[0049]S100,監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息。
[°°50] 在本發(fā)明實施例中,終端上運行的系統(tǒng)可以為Windows系統(tǒng),Windows系統(tǒng)下可包括支持的多個子系統(tǒng),如進程管理子系統(tǒng),內(nèi)存管理子系統(tǒng),1管理子系統(tǒng)和服務管理子系統(tǒng)等,其中,進程管理子系統(tǒng)用于管理終端的進程,內(nèi)存管理子系統(tǒng)用于管理終端的內(nèi)存,1管理子系統(tǒng)用于管理終端的10,服務管理子系統(tǒng)用于管理終端的服務。在本發(fā)明實施例中,子系統(tǒng)可以為服務管理子系統(tǒng),服務管理子系統(tǒng)可統(tǒng)一管理注冊表中的服務信息數(shù)據(jù),以實現(xiàn)服務的創(chuàng)建、刪除以及驅(qū)動的加載等。其中,當終端的應用程序需進行加載驅(qū)動時,應用程序可通過LPC(local process call,本地過程調(diào)用)向服務管理子系統(tǒng)發(fā)送的消息,消息為用于指示加載驅(qū)動的消息,以使子系統(tǒng)響應消息進行加載驅(qū)動,其中,消息為驅(qū)動的相關(guān)消息。
[0051]在本發(fā)明實施例中,終端可監(jiān)控終端中的應用程序通過LPC向服務管理子系統(tǒng)發(fā)送的消息,判斷消息是否為用于指示加載驅(qū)動的消息,其中,終端可對通過LPC向子系統(tǒng)發(fā)送的消息進行逐個檢測,檢測消息是否攜帶加載驅(qū)動標識符。當檢測到消息攜帶加載驅(qū)動標識符時,終端可確定消息為用于指示加載驅(qū)動的消息。
[0052]在具體實施中,當應用程序需通過LPC向服務管理子系統(tǒng)發(fā)送消息時,應用程序調(diào)用內(nèi)核層NtRequestWaitReplyPort函數(shù)使用LPC向服務管理子系統(tǒng)發(fā)送的消息。因此,終端可預置一個鉤子函數(shù) NewNtRequestWaitRep IyPort 函數(shù)替換原始 NtRequestWaitRep IyPort函數(shù)對應用程序通過LPC向子系統(tǒng)發(fā)送的消息進行監(jiān)測。具體的,可在系統(tǒng)的SSDT(SyStemServices Descriptor Table,系統(tǒng)服務描述符表)表中找到NtRequestWaitReplyPort函數(shù),保存 NtRequestWaitRep IyPort 函數(shù)地址,并定義 NewNtRequestWaitRep IyPort 函數(shù)替換原始 NtRequestWaitRep IyPort 函數(shù)地址,實現(xiàn)了 NewNtRequestWaitRep IyPort 函數(shù)的掛鉤。當應用程序調(diào)用NtRequestWaitReplyPort函數(shù)使用LPC向服務管理子系統(tǒng)發(fā)送的消息時,則實際上應用程序是調(diào)用NewNtRequestWaitReplyPort函數(shù)使用LPC向服務管理子系統(tǒng)發(fā)送的消息。其中,在鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)中,第一個參數(shù)是端口句柄,即為發(fā)送目標的端口句柄。當應用程序調(diào)用鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)進行發(fā)送消息時,終端可獲取鉤子函數(shù)的第一個參數(shù)端口句柄,通過內(nèi)核函數(shù)ObReferenceObjectByHandle函數(shù)將端口句柄進行轉(zhuǎn)換為發(fā)送端口的結(jié)構(gòu)指針,并通過內(nèi)核函數(shù)ObRef erenceObjectByName函數(shù)將發(fā)送端口的結(jié)構(gòu)指針轉(zhuǎn)換為發(fā)送端口的名稱,判斷發(fā)送端口的名稱是否匹配“\\RPC ControlWntsvcs”端口,當判斷匹配時,說明應用程序往名為ntsvcs端口發(fā)送消息。當終端確認應用程序往名為ntsvcs端口發(fā)送的消息時,終端可根據(jù)消息控制服務管理子系統(tǒng)進行服務管理。因此,當終端通過鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)判斷應用程序往名為ntsvcs端口發(fā)送消息時,終端可確定該消息為服務的相關(guān)消息,如創(chuàng)建服務消息、刪除服務消息、打開服務消息或加載服務驅(qū)動等等消息。
[0053]進一步的,在具體實施中,鉤子函數(shù)NewNtRequestWaitReplyPort的第二個參數(shù)為發(fā)送的消息數(shù)據(jù),消息數(shù)據(jù)上攜帶標識符,該標識符為int類型的標識符。具體的,標識符的具體位置可在XP系統(tǒng)中的結(jié)構(gòu)指針+OxlC位置上,WIN7系統(tǒng)中的結(jié)構(gòu)指針+0x2C位置上。當標識符的標識值為于(Instal IDevOrQueryConfig = OxlD)時,則標識符可為加載驅(qū)動標識符。并當標識符為加載驅(qū)動標識符時,則為應用程序通知子系統(tǒng)進行加載驅(qū)動。終端可通過鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)讀取標識符,判斷標識值是否為(InstallDevOrQueryConfig = OxlD),當判斷標識符的標識值為(Instal IDevOrQueryConfig = OxlD)時,確定消息攜帶加載驅(qū)動標識符,可判斷消息為用于指示加載驅(qū)動的消息。
[0054]SlOl,當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序。
[0055]在本發(fā)明實施例中,當終端監(jiān)控到消息為用于指示加載驅(qū)動的消息時,終端可根據(jù)消息確定應用程序所要加載的驅(qū)動文件。其中,消息攜帶驅(qū)動文件的存儲路徑,從而終端可根據(jù)驅(qū)動文件的存儲路徑確定驅(qū)動文件。
[0056]在具體應用中,鉤子函數(shù)NewNtRequestWaitReplyPort的第二個參數(shù)中的PP0RT_MESSAGE結(jié)構(gòu)類型指針+0x38(XP系統(tǒng))的位置保存一個PSC_RPC_STRINGA結(jié)構(gòu)指針,此結(jié)構(gòu)指針保存驅(qū)動文件的存儲路徑,終端可解析此結(jié)構(gòu)指針,獲取到驅(qū)動文件的存儲路徑。從而終端可根據(jù)解析到的驅(qū)動文件的存儲路徑確定應用程序所要加載的驅(qū)動文件。
[0057]在本發(fā)明實施例中,當終端確定了所要加載的驅(qū)動文件時,終端可調(diào)用安全殺毒應用程序?qū)︱?qū)動文件進行安全檢測,判斷驅(qū)動文件是否為危險文件。其中,安全殺毒應用程序可如毒霸應用程序,360安全衛(wèi)士等安全應用程序。當安全殺毒應用程序判斷其為危險文件或為未知文件時,則終端可確定驅(qū)動文件為危險文件,當安全殺毒應用程序判斷其為安全文件時,終端可確定驅(qū)動文件為安全文件。在具體實施中,終端調(diào)用上層文件查殺系統(tǒng)進行判斷驅(qū)動文件的狀態(tài),如果狀態(tài)是灰,紅(灰代表未知文件,紅代表危險文件)時,且即為危險文件。當終端判斷驅(qū)動文件是危險文件時,終端可對消息進行攔截,如刪除消息。
[0058]在本發(fā)明實施例中,當終端判斷驅(qū)動文件不是危險文件時,終端可掃描發(fā)送消息的應用程序,對應用程序進行安全檢測,判斷應用程序是否為惡意程序,其中,終端可調(diào)用安全殺毒應用程序?qū)Πl(fā)送消息的應用程序進行安全檢測,判斷是否為惡意程序,其中,安全殺毒應用程序在具體的應用程序中可如毒霸應用程序,360安全衛(wèi)士等安全應用程序。當安全殺毒應用程序判斷其為危險文件或為未知文件時,則終端可確定應用程序為惡意程序,當安全殺毒應用程序判斷其安全文件時,終端可確定應用程序不是惡意程序。
[0059]在本發(fā)明實施例中,終端可獲取消息的發(fā)送進程路徑,通過消息的發(fā)送進程路徑確定應用程序,從而終端調(diào)用安全殺毒應用程序?qū)ζ溥M行安全檢測。在具體應用中,可以是,鉤子函數(shù) NewNtRequestWai tReplyPort調(diào)用內(nèi)核函數(shù)PsGetCurrentProcessId函數(shù)和ZwQuery Inf ormat i onProcess函數(shù)獲取當前監(jiān)測的消息的發(fā)送進程路徑,根據(jù)發(fā)送進程路徑確定應用程序,并調(diào)用上層文件查殺系統(tǒng)進行判斷應用程序的狀態(tài),如果狀態(tài)是灰,紅(灰代表未知文件,紅代表危險文件)時,且即為惡意程序。
[0060]S102,當確定所述應用程序為惡意程序時,對所述消息進行攔截。
[0061]在本發(fā)明實施例中,當終端確定應用程序為惡意程序,終端可對消息進行攔截,如刪掉消息,或者鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)退出,不執(zhí)行原始NtRequestWaitReplyPort函數(shù),使得惡意程序加載驅(qū)動失敗。當終端確定應用程序不是惡意程序時,鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)退出,并調(diào)用NtRequestWai tReplyPort函數(shù)進行處理應用程序發(fā)送的消息。
[0062]在本發(fā)明實施例中,終端監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息;當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;當確定所述應用程序為惡意程序時,對所述消息進行攔截,這使得終端僅通過對消息的攔截即能實現(xiàn)對惡意程序加載驅(qū)動的行為進行攔截,從而簡便終端的攔截操作,降低終端攔截驅(qū)動加載的處理壓力,節(jié)省終端的運行資源,并提高終端的攔截準確性,從而提升終端的自身安全。
[0063]參見圖2,是本發(fā)明實施例提供的一種終端的第一實施例結(jié)構(gòu)圖。本發(fā)明實施例中所描述的終端包括:
[0064]判斷單元100,用于監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息。
[0065]第一安全檢測單元200,用于當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序。
[0066]攔截單元300,用于當確定所述應用程序為惡意程序時,對所述消息進行攔截,以攔截所述應用程序通過所述消息進行加載驅(qū)動。
[0067]在本發(fā)明實施例中,終端上運行的系統(tǒng)可以為Windows系統(tǒng),Windows系統(tǒng)下可包括支持的多個子系統(tǒng),如進程管理子系統(tǒng),內(nèi)存管理子系統(tǒng),10管理子系統(tǒng)和服務管理子系統(tǒng)等,其中,進程管理子系統(tǒng)用于管理終端的進程,內(nèi)存管理子系統(tǒng)用于管理終端的內(nèi)存,10管理子系統(tǒng)用于管理終端的10,服務管理子系統(tǒng)用于管理終端的服務。在本發(fā)明實施例中,子系統(tǒng)可以為服務管理子系統(tǒng),服務管理子系統(tǒng)可統(tǒng)一管理注冊表中的服務信息數(shù)據(jù),以實現(xiàn)服務的創(chuàng)建、刪除以及驅(qū)動的加載等。其中,當終端的應用程序需進行加載驅(qū)動時,應用程序可通過LPC(local process call,本地過程調(diào)用)向服務管理子系統(tǒng)發(fā)送的消息,消息為用于指示加載驅(qū)動的消息,以使子系統(tǒng)響應消息進行加載驅(qū)動,其中,消息為驅(qū)動的相關(guān)消息。
[0068]在本發(fā)明實施例中,判斷單元100可監(jiān)控終端中的應用程序通過LPC向服務管理子系統(tǒng)發(fā)送的消息,判斷消息是否為用于指示加載驅(qū)動的消息,其中,判斷單元100可對通過LPC向子系統(tǒng)發(fā)送的消息進行逐個檢測,檢測消息是否攜帶加載驅(qū)動標識符。當檢測到消息攜帶加載驅(qū)動標識符時,判斷單元100可確定消息為用于指示加載驅(qū)動的消息。
[0069]在具體實施中,當應用程序需通過LPC向服務管理子系統(tǒng)發(fā)送消息時,應用程序調(diào)用內(nèi)核層NtRequestWai tReplyPort函數(shù)使用LPC向服務管理子系統(tǒng)發(fā)送的消息。因此,終端可預置一個鉤子函數(shù) NewNtRequestWai tReplyPort 函數(shù)替換原始 NtRequestWai tReplyPort函數(shù)對應用程序通過LPC向子系統(tǒng)發(fā)送的消息進行監(jiān)測。具體的,可在系統(tǒng)的SSDT(SyStemServices Descriptor Table,系統(tǒng)服務描述符表)表中找到NtRequestWaitReplyPort函數(shù),保存 NtRequestWai tReplyPort 函數(shù)地址,并定義 NewNtRequestWai tReplyPort 函數(shù)替換原始 NtRequestWai tReplyPort 函數(shù)地址,實現(xiàn)了 NewNtRequestWai tReplyPort 函數(shù)的掛鉤。當應用程序調(diào)用NtRequestWaitReplyPort函數(shù)使用LPC向服務管理子系統(tǒng)發(fā)送的消息時,則實際上應用程序是調(diào)用NewNtRequestWai tReplyPort函數(shù)使用LPC向服務管理子系統(tǒng)發(fā)送的消息。其中,在鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)中,第一個參數(shù)是端口句柄,即為發(fā)送目標的端口句柄。當應用程序調(diào)用鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)進行發(fā)送消息時,終端可獲取鉤子函數(shù)的第一個參數(shù)端口句柄,通過內(nèi)核函數(shù)ObReferenceObjectByHandle函數(shù)將端口句柄進行轉(zhuǎn)換為發(fā)送端口的結(jié)構(gòu)指針,并通過內(nèi)核函數(shù)ObReferenceObjectByName函數(shù)將發(fā)送端口的結(jié)構(gòu)指針轉(zhuǎn)換為發(fā)送端口的名稱,判斷發(fā)送端口的名稱是否匹配“\\RPC ControlWntsvcs”端口,當判斷匹配時,說明應用程序往名為ntsvcs端口發(fā)送消息。當終端確認應用程序往名為ntsvcs端口發(fā)送的消息時,終端可根據(jù)消息控制服務管理子系統(tǒng)進行服務管理。因此,當終端通過鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)判斷應用程序往名為ntsvcs端口發(fā)送消息時,終端可確定該消息為服務的相關(guān)消息,如創(chuàng)建服務消息、刪除服務消息、打開服務消息或加載服務驅(qū)動等等消息。
[0070]進一步的,在具體實施中,鉤子函數(shù)NewNtRequestWaitReplyPort的第二個參數(shù)為發(fā)送的消息數(shù)據(jù),消息數(shù)據(jù)上攜帶標識符,該標識符為int類型的標識符。具體的,標識符的具體位置可在XP系統(tǒng)中的結(jié)構(gòu)指針+OxlC位置上,WIN7系統(tǒng)中的結(jié)構(gòu)指針+0x2C位置上。當標識符的標識值為于(Instal IDevOrQueryConfig = OxlD)時,則標識符可為加載驅(qū)動標識符。并當標識符為加載驅(qū)動標識符時,則為應用程序通知子系統(tǒng)進行加載驅(qū)動。判斷單元100可通過鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)讀取標識符,判斷標識值是否為(InstallDevOrQueryConfig = OxlD),當判斷標識符的標識值為(Instal IDevOrQueryConfig = OxlD)時,確定消息攜帶加載驅(qū)動標識符,可判斷消息為用于指示加載驅(qū)動的消息。
[0071]在本發(fā)明實施例中,當判斷單元100監(jiān)控到消息為用于指示加載驅(qū)動的消息時,終端可根據(jù)消息確定應用程序所要加載的驅(qū)動文件。其中,消息攜帶驅(qū)動文件的存儲路徑,從而終端可根據(jù)驅(qū)動文件的存儲路徑確定驅(qū)動文件。
[0072]在具體應用中,鉤子函數(shù)NewNtRequestWaitReplyPort的第二個參數(shù)中的PP0RT_MESSAGE結(jié)構(gòu)類型指針+0x38(XP系統(tǒng))的位置保存一個PSC_RPC_STRINGA結(jié)構(gòu)指針,此結(jié)構(gòu)指針保存驅(qū)動文件的存儲路徑,終端可解析此結(jié)構(gòu)指針,獲取到驅(qū)動文件的存儲路徑。從而終端可根據(jù)解析到的驅(qū)動文件的存儲路徑確定應用程序所要加載的驅(qū)動文件。
[0073]在本發(fā)明實施例中,當終端確定了所要加載的驅(qū)動文件時,終端可調(diào)用安全殺毒應用程序?qū)︱?qū)動文件進行安全檢測,判斷驅(qū)動文件是否為危險文件。其中,安全殺毒應用程序可如毒霸應用程序,360安全衛(wèi)士等安全應用程序。當安全殺毒應用程序判斷其為危險文件或為未知文件時,則終端可確定驅(qū)動文件為危險文件,當安全殺毒應用程序判斷其為安全文件時,終端可確定驅(qū)動文件為安全文件。在具體實施中,終端調(diào)用上層文件查殺系統(tǒng)進行判斷驅(qū)動文件的狀態(tài),如果狀態(tài)是灰,紅(灰代表未知文件,紅代表危險文件)時,且即為危險文件。當終端判斷驅(qū)動文件是危險文件時,終端可對消息進行攔截,如刪除消息。
[0074]在本發(fā)明實施例中,當終端判斷驅(qū)動文件不是危險文件時,第一安全檢測單元200可掃描發(fā)送消息的應用程序,對應用程序進行安全檢測,判斷應用程序是否為惡意程序,其中,第一安全檢測單元200可調(diào)用安全殺毒應用程序?qū)Πl(fā)送消息的應用程序進行安全檢測,判斷是否為惡意程序,其中,安全殺毒應用程序在具體的應用程序中可如毒霸應用程序,360安全衛(wèi)士等安全應用程序。當安全殺毒應用程序判斷其為危險文件或為未知文件時,則第一安全檢測單元200可確定應用程序為惡意程序,當安全殺毒應用程序判斷其安全文件時,第一安全檢測單元200可確定應用程序不是惡意程序。
[0075]在本發(fā)明實施例中,第一安全檢測單元200可獲取消息的發(fā)送進程路徑,通過消息的發(fā)送進程路徑確定應用程序,從而第一安全檢測單元200調(diào)用安全殺毒應用程序?qū)ζ溥M行安全檢測。在具體應用中,可以是,鉤子函數(shù)NewNtRequestWaitReplyPort調(diào)用內(nèi)核函數(shù)PsGetCurrentProcessId函數(shù)和ZwQuery Informat1nProcess函數(shù)獲取當前監(jiān)測的消息的發(fā)送進程路徑,根據(jù)發(fā)送進程路徑確定應用程序,并調(diào)用上層文件查殺系統(tǒng)進行判斷應用程序的狀態(tài),如果狀態(tài)是灰,紅(灰代表未知文件,紅代表危險文件)時,且即為惡意程序。
[0076]在本發(fā)明實施例中,當?shù)谝话踩珯z測單元200確定應用程序為惡意程序,攔截單元可對消息進行攔截,如刪掉消息,或者攔截單元控制鉤子函數(shù)Ne wNt Re qu e s t Wa i t Re PI y Po r t函數(shù)退出,不執(zhí)行原始NtRequestWaitReplyPort函數(shù),使得惡意程序加載驅(qū)動失敗。當?shù)谝话踩珯z測單元2 O O確定應用程序不是惡意程序時,終端控制鉤子函數(shù)NewNtRequestWaitReplyPort函數(shù)退出,并調(diào)用NtRequestWaitReplyPort函數(shù)進行處理應用程序發(fā)送的消息。
[0077]其中,所述判斷單元包括:
[0078]檢測子單元,用于檢測所述消息是否攜帶加載驅(qū)動標識符。
[0079]確定子單元,用于當所述檢測子單元確定所述消息攜帶所述加載驅(qū)動標識符,確定所述消息為用于指示加載驅(qū)動的消息。
[0080]其中,所述終端還包括:
[0081]第一確定單元,用于當所述第一判斷單元確定所述消息為用于指示加載驅(qū)動的消息時,根據(jù)所述消息確定所述應用程序所要加載的驅(qū)動文件。
[0082]第二安全檢測單元,用于對所述驅(qū)動文件進行安全檢測,判斷所述驅(qū)動文件是否為危險文件。
[0083]當所述第二安全檢測單元確定所述驅(qū)動文件不是危險文件時,通知所述第一安全檢測單元200對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序.
[0084]當所述第二安全檢測單元確定所述驅(qū)動文件是危險文件時,通知所述攔截單元300對所述消息進行攔截。
[0085]其中,所述消息攜帶所述驅(qū)動文件的存儲路徑;
[0086]所述確定單元具體用于:
[0087]根據(jù)所述驅(qū)動文件的存儲路徑確定所述驅(qū)動文件。
[0088]其中,所述終端還包括:
[0089]獲取單元,用于獲取所述消息的發(fā)送進程路徑。
[0090]第二確定單元,用于根據(jù)所述消息的發(fā)送進程路徑確定所述應用程序。
[0091 ]可以理解的是,本實施例的終端中的單元的各功能模塊的功能可根據(jù)上述方法實施例中的方法具體實現(xiàn),其具體實現(xiàn)過程可以參照上述方法實施例的相關(guān)描述,此處不再進行贅述。
[0092]在本發(fā)明實施例中,終端監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于指示加載驅(qū)動的消息;當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;當確定所述應用程序為惡意程序時,對所述消息進行攔截,這使得終端僅通過對消息的攔截即能實現(xiàn)對惡意程序加載驅(qū)動的行為進行攔截,從而簡便終端的攔截操作,降低終端攔截驅(qū)動加載的處理壓力,節(jié)省終端的運行資源,并提高終端的攔截準確性,從而提升終端的自身安全。
[0093]本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random AccessMemory,RAM)等。
[0094]以上所揭露的僅為本發(fā)明較佳實施例而已,當然不能以此來限定本發(fā)明之權(quán)利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【主權(quán)項】
1.一種攔截驅(qū)動加載的方法,其特征在于,所述方法包括:監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消息是否為用于 指示加載驅(qū)動的消息;當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應用程序進行安全檢測,判 斷所述應用程序是否為惡意程序;當確定所述應用程序為惡意程序時,對所述消息進行攔截,以對所述應用程序通過所 述消息進行加載驅(qū)動的行為進行攔截。2.如權(quán)利要求1所述的方法,其特征在于,所述判斷所述消息是否為用于指示加載驅(qū)動 的消息包括:檢測所述消息是否攜帶加載驅(qū)動標識符;當確定所述消息攜帶所述加載驅(qū)動標識符,確定所述消息為用于指示加載驅(qū)動的消息。3.如權(quán)利要求1所述的方法,其特征在于,所述對所述應用程序進行安全檢測,判斷所 述應用程序是否為惡意程序之前包括:當確定所述消息為用于指示加載驅(qū)動的消息時,根據(jù)所述消息確定所述應用程序所要 加載的驅(qū)動文件;對所述驅(qū)動文件進行安全檢測,判斷所述驅(qū)動文件是否為危險文件;當確定所述驅(qū)動文件不是危險文件時,執(zhí)行所述對所述應用程序進行安全檢測,判斷 所述應用程序是否為惡意程序步驟;當確定所述驅(qū)動文件是危險文件時,對所述消息進行攔截。4.如權(quán)利要求3所述的方法,其特征在于,所述消息攜帶所述驅(qū)動文件的存儲路徑;所述根據(jù)所述消息確定所述應用程序所要加載的驅(qū)動文件包括:根據(jù)所述驅(qū)動文件的存儲路徑確定所述驅(qū)動文件。5.如權(quán)利要求1所述的方法,其特征在于,所述對所述應用程序進行安全檢測,判斷所 述應用程序是否為惡意程序之前包括:獲取所述消息的發(fā)送進程路徑;根據(jù)所述消息的發(fā)送進程路徑確定所述應用程序。6.—種終端,其特征在于,所述終端包括:判斷單元,用于監(jiān)控應用程序通過本地過程調(diào)用LPC向子系統(tǒng)發(fā)送的消息,判斷所述消 息是否為用于指示加載驅(qū)動的消息;第一安全檢測單元,用于當監(jiān)控到所述消息為用于指示加載驅(qū)動的消息時,對所述應 用程序進行安全檢測,判斷所述應用程序是否為惡意程序;攔截單元,用于當確定所述應用程序為惡意程序時,對所述消息進行攔截,以對所述應 用程序通過所述消息進行加載驅(qū)動的行為進行攔截。7.如權(quán)利要求6所述的終端,其特征在于,所述判斷單元包括:檢測子單元,用于檢測所述消息是否攜帶加載驅(qū)動標識符;確定子單元,用于當所述檢測子單元確定所述消息攜帶所述加載驅(qū)動標識符,確定所 述消息為用于指示加載驅(qū)動的消息。8.如權(quán)利要求6所述的終端,其特征在于,所述終端還包括:第一確定單元,用于當所述第一判斷單元確定所述消息為用于指示加載驅(qū)動的消息 時,根據(jù)所述消息確定所述應用程序所要加載的驅(qū)動文件;第二安全檢測單元,用于對所述驅(qū)動文件進行安全檢測,判斷所述驅(qū)動文件是否為危 險文件;當所述第二安全檢測單元確定所述驅(qū)動文件不是危險文件時,通知所述第一安全檢測 單元對所述應用程序進行安全檢測,判斷所述應用程序是否為惡意程序;當所述第二安全檢測單元確定所述驅(qū)動文件是危險文件時,通知所述攔截單元對所述 消息進行攔截。9.如權(quán)利要求8所述的終端,其特征在于,所述消息攜帶所述驅(qū)動文件的存儲路徑;所述確定單元具體用于:根據(jù)所述驅(qū)動文件的存儲路徑確定所述驅(qū)動文件。10.如權(quán)利要求6所述的終端,其特征在于,所述終端還包括:獲取單元,用于獲取所述消息的發(fā)送進程路徑;第二確定單元,用于根據(jù)所述消息的發(fā)送進程路徑確定所述應用程序。
【文檔編號】G06F21/51GK105956461SQ201610288375
【公開日】2016年9月21日
【申請日】2016年5月3日
【發(fā)明人】李文靖
【申請人】北京金山安全軟件有限公司