本發(fā)明涉及系統(tǒng)安全技術(shù)領(lǐng)域,尤其涉及一種攔截惡意程序關(guān)機(jī)的方法、裝置及電子設(shè)備。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)發(fā)展,病毒、木馬等惡意程序?qū)映霾桓F,為了提高系統(tǒng)的安全性,金山毒霸等安全軟件要適應(yīng)發(fā)展。個(gè)別惡意程序在安全軟件檢測(cè)到其存在時(shí),或者在結(jié)束惡意程序進(jìn)程時(shí),惡意程序會(huì)向系統(tǒng)發(fā)一個(gè)關(guān)機(jī)消息,讓計(jì)算機(jī)關(guān)機(jī),這使得安全軟件不能輕易殺掉這類惡意程序的進(jìn)程。
首先,來了解一下程序(包括,惡意程序)發(fā)送關(guān)機(jī)本地過程調(diào)用(Local Procedure Call,LPC)消息的流程:
程序以關(guān)機(jī)LPC消息為參數(shù),依次調(diào)用ndtll模塊的發(fā)送關(guān)機(jī)LPC消息的函數(shù)、內(nèi)核層的發(fā)送關(guān)機(jī)LPC消息的內(nèi)核函數(shù)、再由系統(tǒng)解析所述關(guān)機(jī)LPC消息并調(diào)用關(guān)機(jī)功能的內(nèi)核函數(shù),從而完成計(jì)算機(jī)關(guān)機(jī)操作,其中,Ndtll模塊是微軟提供的一個(gè)基礎(chǔ)模塊,實(shí)現(xiàn)一些常用函數(shù),比如讀寫文件,讀寫注冊(cè)表等功能,運(yùn)行在應(yīng)用層;LPC是系統(tǒng)子系統(tǒng)和客戶進(jìn)程之間通訊的機(jī)制,Windows有N個(gè)子系統(tǒng),各個(gè)子系統(tǒng)之前一般是LPC通信的,比如,進(jìn)程管理子系統(tǒng),服務(wù)管理,IO管理器,內(nèi)存管理器等子系統(tǒng)。
現(xiàn)有技術(shù)中,可以通過掛鉤關(guān)機(jī)功能的內(nèi)核函數(shù)實(shí)現(xiàn)惡意關(guān)機(jī)消息的攔截,杜絕惡意程序傳播破壞系統(tǒng),但是,由于關(guān)機(jī)功能的內(nèi)核函數(shù)位于發(fā)送關(guān)機(jī)LPC消息流程的底層,通過掛鉤所述關(guān)機(jī)功能的內(nèi)核函數(shù)去攔截惡意關(guān)機(jī)指令,實(shí)現(xiàn)過程復(fù)雜,且易被惡意程序繞開。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種攔截惡意程序關(guān)機(jī)的方法、裝置及電子設(shè)備,以解決現(xiàn)有的掛鉤關(guān)機(jī)功能的內(nèi)核函數(shù)攔截惡意關(guān)機(jī)指令,實(shí)現(xiàn)過程復(fù)雜,且易被惡意程序繞開的問題。
第一方面,本發(fā)明實(shí)施例提供一種攔截惡意程序關(guān)機(jī)的方法,包括:
通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù);
通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件;
若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息。
結(jié)合第一方面,在第一方面的第一種實(shí)施方式中,在通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息之前,所述方法還包括:
查詢預(yù)設(shè)的系統(tǒng)服務(wù)描述符表,獲取發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址,并保存獲取的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址;
創(chuàng)建鉤子函數(shù),獲取所述鉤子函數(shù)的函數(shù)地址;
在所述系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為所述鉤子函數(shù)的函數(shù)地址。
結(jié)合第一方面,在第一方面的第二種實(shí)施方式中,所述關(guān)機(jī)本地過程調(diào)用消息包括:目標(biāo)端口的句柄值和操作命令值;
所述預(yù)定的攔截條件包括:預(yù)定的關(guān)機(jī)端口句柄值及預(yù)定的關(guān)機(jī)操作命令值,其中,所述預(yù)定的關(guān)機(jī)端口句柄值為關(guān)機(jī)或重啟端口的句柄值,所述預(yù)定的關(guān)機(jī)操作命令值包括:關(guān)機(jī)和重啟;
所述通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件包括:
通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息中的目標(biāo)端口的句柄值是否與預(yù)定的關(guān)機(jī)端口句柄值相同;
若與預(yù)定的關(guān)機(jī)端口句柄值相同,則判斷所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值是否為關(guān)機(jī)或重啟;
若所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值為關(guān)機(jī)或重啟,則所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件。
結(jié)合第一方面,在第一方面的第三種實(shí)施方式中,所述若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息包括:
若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,則通過所述鉤子函數(shù)獲取所述操作進(jìn)程的安裝路徑;
從獲取的所述操作進(jìn)程的安裝路徑中,提取所述操作進(jìn)程的名稱;
查詢預(yù)設(shè)的惡意程序進(jìn)程列表,若所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則攔截所述關(guān)機(jī)本地過程調(diào)用消息。
結(jié)合第一方面的第三種實(shí)施方式,在第一方面的第四種實(shí)施方式中,所述攔截所述關(guān)機(jī)本地過程調(diào)用消息包括:
退出所述鉤子函數(shù),不將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
結(jié)合第一方面,在第一方面的第五種實(shí)現(xiàn)方式中,所述方法還包括:
若所述關(guān)機(jī)本地過程調(diào)用消息不符合預(yù)定的攔截條件,或者,所述操作進(jìn)程的名稱沒有包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
結(jié)合第一方面的第五種實(shí)施方式,在第一方面的第六種實(shí)現(xiàn)方式中,所述通過所述鉤子函數(shù)將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)之前,所述方法還包括:
在系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為已保存的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的原始地址。
結(jié)合第一方面,或結(jié)合第一方面的第一種至第六種中任一種實(shí)施方式,在第一方面的第七種實(shí)施方式中,所述惡意程序進(jìn)程列表是可擴(kuò)展的惡意程序進(jìn)程列表。
第二方面,本發(fā)明實(shí)施例提供一種攔截惡意程序關(guān)機(jī)的裝置,包括:
監(jiān)聽模塊,用于通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù);
判斷模塊,用于通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件;
攔截模塊,用于若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息。
結(jié)合第二方面,在第二方面的第一種實(shí)施方式中,所述裝置還包括:掛鉤模塊;所述掛鉤模塊包括:
第一獲取單元,用于查詢預(yù)設(shè)的系統(tǒng)服務(wù)描述符表,獲取發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址,并保存獲取的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址;
第二獲取單元,用于創(chuàng)建鉤子函數(shù),獲取所述鉤子函數(shù)的函數(shù)地址;
地址更新單元,用于在所述系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為所述鉤子函數(shù)的函數(shù)地址。
結(jié)合第二方面,在第二方面的第二種實(shí)施方式中,所述關(guān)機(jī)本地過程調(diào)用消息包括:目標(biāo)端口的句柄值和操作命令值;
所述預(yù)定的攔截條件包括:預(yù)定的關(guān)機(jī)端口句柄值及預(yù)定的關(guān)機(jī)操作命令值,其中,所述預(yù)定的關(guān)機(jī)端口句柄值為關(guān)機(jī)或重啟端口的句柄值,所述預(yù)定的關(guān)機(jī)操作命令值包括:關(guān)機(jī)和重啟;
所述判斷模塊包括:
第一判斷單元,用于通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息中的目標(biāo)端口的句柄值是否與預(yù)定的關(guān)機(jī)端口句柄值相同;
第二判斷單元,用于若與預(yù)定的關(guān)機(jī)端口句柄值相同,則判斷所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值是否為關(guān)機(jī)或重啟;
消息確定單元,用于若所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值為關(guān)機(jī)或重啟,則所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件。
結(jié)合第二方面,在第二方面的第三種實(shí)施方式中,所述攔截模塊包括:
獲取單元,用于若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,則通過所述鉤子函數(shù)獲取所述操作進(jìn)程的安裝路徑;
提取單元,用于從獲取的所述操作進(jìn)程的安裝路徑中,提取所述操作進(jìn)程的名稱;
攔截單元,用于查詢預(yù)設(shè)的惡意程序進(jìn)程列表,若所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則攔截所述關(guān)機(jī)本地過程調(diào)用消息。
結(jié)合第二方面的第三種實(shí)施方式,在第二方面的第四種實(shí)施方式中,所述攔截單元,具體用于退出所述鉤子函數(shù),不將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
結(jié)合第二方面,在第二方面的第五種實(shí)施方式中,所述攔截模塊,還用于若所述關(guān)機(jī)本地過程調(diào)用消息不符合預(yù)定的攔截條件,或者,所述操作進(jìn)程的名稱沒有包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
結(jié)合第二方面的第五種實(shí)施方式,在第二方面的第六種實(shí)施方式中,所述攔截模塊,還用于在系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為已保存的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的原始地址。
結(jié)合第二方面,或結(jié)合第二方面的第一種至第六種中任一種實(shí)施方式,在第二方面的第七種實(shí)施方式中,所述惡意程序進(jìn)程列表是可擴(kuò)展的惡意程序進(jìn)程列表。
第三方面,本發(fā)明實(shí)施例提供一種電子設(shè)備,所述電子設(shè)備包括:殼體、處理器、存儲(chǔ)器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲(chǔ)器設(shè)置在電路板上;電源電路,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲(chǔ)器用于存儲(chǔ)可執(zhí)行程序代碼;處理器通過讀取存儲(chǔ)器中存儲(chǔ)的可執(zhí)行程序代碼來運(yùn)行與可執(zhí)行程序代碼對(duì)應(yīng)的程序,用于執(zhí)行前述任一所述的攔截惡意程序關(guān)機(jī)的方法。
本發(fā)明實(shí)施例提供的一種攔截惡意程序關(guān)機(jī)的方法、裝置及電子設(shè)備,通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù);通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件;若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息,這樣,通過掛鉤發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的所述鉤子函數(shù),攔截符合預(yù)定攔截條件且由惡意操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息,由于,發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)位于關(guān)機(jī)功能的內(nèi)核函數(shù)的上層,實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,且穩(wěn)定不易被惡意程序繞開,有利于維護(hù)系統(tǒng)安全。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明的實(shí)施例攔截惡意程序關(guān)機(jī)的方法流程示意圖;
圖2為本發(fā)明的實(shí)施例攔截惡意程序關(guān)機(jī)的方法具體流程示意圖;
圖3為本發(fā)明的實(shí)施例的實(shí)施例攔截惡意程序關(guān)機(jī)的裝置結(jié)構(gòu)示意圖;
圖4為本發(fā)明電子設(shè)備一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。
應(yīng)當(dāng)明確,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明的實(shí)施例攔截惡意程序關(guān)機(jī)的方法流程示意圖,如圖1所示,本實(shí)施例的方法可以包括:
步驟101、通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息,則操作進(jìn)程發(fā)送關(guān)機(jī)LPC消息的流程包括:
操作進(jìn)程以關(guān)機(jī)LPC消息為參數(shù)->調(diào)用ndtll模塊的發(fā)送關(guān)機(jī)LPC消息的函數(shù)->本實(shí)施例提供的鉤子函數(shù)->內(nèi)核層的發(fā)送關(guān)機(jī)LPC消息的內(nèi)核函數(shù)->再由系統(tǒng)解析所述關(guān)機(jī)LPC消息并調(diào)用關(guān)機(jī)功能的內(nèi)核函數(shù),從而完成計(jì)算機(jī)關(guān)機(jī)操作。
本實(shí)施例中,假設(shè),調(diào)用ndtll模塊的發(fā)送關(guān)機(jī)LPC消息的函數(shù)為ndtll模塊的NtAlpcSendWaitReceivePort函數(shù);本實(shí)施例提供的鉤子函數(shù)為NewNtAlpcSendWaitReceivePort函數(shù);內(nèi)核層的發(fā)送關(guān)機(jī)LPC消息的內(nèi)核函數(shù)為內(nèi)核層的NtAlpcSendWaitReceivePort函數(shù);所述關(guān)機(jī)功能的內(nèi)核函數(shù)為NtShutdownSystem函數(shù)。
本實(shí)施例中,從操作進(jìn)程發(fā)送關(guān)機(jī)LPC消息的流程可知,掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort或者內(nèi)核函數(shù)NtShutdownSystem都可以實(shí)現(xiàn)惡意關(guān)機(jī)LPC消息的攔截,但是,鉤子函數(shù)掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort攔截惡意關(guān)機(jī)LPC消息時(shí),由于,發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort位于關(guān)機(jī)功能的內(nèi)核函數(shù)NtShutdownSystem的上層,實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,且能更容易更穩(wěn)定地實(shí)現(xiàn)惡意關(guān)機(jī)LPC消息的攔截。
本實(shí)施例中,鉤子函數(shù)NewNtAlpcSendWaitReceivePort掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort的步驟包括:
查詢系統(tǒng)中預(yù)設(shè)的服務(wù)描述符表(System Services Descriptor Table,SSDT),獲取發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort的當(dāng)前地址,并保存獲取的所述當(dāng)前地址;創(chuàng)建鉤子函數(shù)NewNtAlpcSendWaitReceivePort,獲取所述鉤子函數(shù)的函數(shù)地址;在所述系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort的當(dāng)前地址更新為所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort的函數(shù)地址,從而實(shí)現(xiàn)了NewNtAlpcSendWaitReceivePort函數(shù)的掛鉤。
本實(shí)施例中,作為一可選實(shí)施例,在通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息之前,所述方法還包括:
查詢預(yù)設(shè)的系統(tǒng)服務(wù)描述符表,獲取發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址,并保存獲取的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址;
創(chuàng)建鉤子函數(shù),獲取所述鉤子函數(shù)的函數(shù)地址;
在所述系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為所述鉤子函數(shù)的函數(shù)地址。
步驟102、通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件。
本實(shí)施例中,所述關(guān)機(jī)LPC消息至少包括:目標(biāo)端口的句柄值和操作命令值。
本實(shí)施例中,所述預(yù)定的攔截條件包括:預(yù)定的關(guān)機(jī)端口句柄值及預(yù)定的關(guān)機(jī)操作命令值,其中,所述預(yù)定的關(guān)機(jī)端口句柄值為關(guān)機(jī)或重啟端口的句柄值,關(guān)機(jī)端口的句柄值與重啟端口的句柄值可以相同,也可以不同,二者統(tǒng)稱為關(guān)機(jī)端口句柄值;所述預(yù)定的關(guān)機(jī)操作命令值包括:關(guān)機(jī)和重啟。
本實(shí)施例中,通過所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort判斷所述關(guān)機(jī)LPC消息是否符合預(yù)定的攔截條件。
步驟103、若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息。
本實(shí)施例中,當(dāng)所述關(guān)機(jī)LPC消息符合預(yù)定的攔截條件時(shí),在鉤子函數(shù)NewNtAlpcSendWaitReceivePort中,還需判斷所述操作進(jìn)程是否為惡意程序,具體的,可以調(diào)用ZwQueryInformationProcess等內(nèi)核函數(shù)獲取操作進(jìn)程的安裝路徑,如C:\windows\system32\av2.exe;從獲取的所述操作進(jìn)程的安裝路徑中,提取所述操作進(jìn)程的名稱,例如,av2.exe;接著,查詢預(yù)設(shè)的惡意程序進(jìn)程列表,若所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則攔截所述關(guān)機(jī)LPC消息。
本實(shí)施例中,作為一可選實(shí)施例,所述若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息包括:
若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,則通過所述鉤子函數(shù)獲取所述操作進(jìn)程的安裝路徑;
從獲取的所述操作進(jìn)程的安裝路徑中,提取所述操作進(jìn)程的名稱;
查詢預(yù)設(shè)的惡意程序進(jìn)程列表,若所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則攔截所述關(guān)機(jī)本地過程調(diào)用消息。
本實(shí)施例中,當(dāng)系統(tǒng)正常關(guān)機(jī)或重啟時(shí),也會(huì)發(fā)送關(guān)機(jī)LPC消息,所以預(yù)設(shè)的惡意程序進(jìn)程列表中,不能包含CSRSS_EXE,SMSS_EXE,LSASS_EXE,WINLOGON_EXE等系統(tǒng)進(jìn)程,所述預(yù)設(shè)的惡意程序進(jìn)程列表可以包括已知的惡意關(guān)機(jī)進(jìn)程的名稱,例如,av2.exe,ad2.exe,kei3.exe等。作為又一可選實(shí)施例,所述惡意程序進(jìn)程列表是可擴(kuò)展的惡意程序進(jìn)程列表,以便于用戶能夠根據(jù)實(shí)際應(yīng)用情況更新所述惡意程序進(jìn)程列表。
本實(shí)施例中,當(dāng)操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort攔截所述關(guān)機(jī)本地過程調(diào)用消息,退出所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort,不繼續(xù)執(zhí)行內(nèi)核函數(shù)NtAlpcSendWaitReceivePort,則所述關(guān)機(jī)LPC消息發(fā)送失敗,關(guān)閉計(jì)算機(jī)的操作就會(huì)失敗。
本實(shí)施例中,作為再一可選實(shí)施例,所述攔截所述關(guān)機(jī)本地過程調(diào)用消息包括:
退出所述鉤子函數(shù),不將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,若操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息不符合預(yù)定的攔截條件,或者,所述操作進(jìn)程的名稱沒有包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort會(huì)繼續(xù)調(diào)用執(zhí)行內(nèi)核函數(shù)NtAlpcSendWaitReceivePort,所述關(guān)機(jī)LPC消息發(fā)送成功,關(guān)閉計(jì)算機(jī)的操作就會(huì)成功。
本實(shí)施例中,作為又一可選實(shí)施例,所述方法還包括:
若所述關(guān)機(jī)本地過程調(diào)用消息不符合預(yù)定的攔截條件,或者,所述操作進(jìn)程的名稱沒有包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,為了所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort能夠?qū)⑺鲫P(guān)機(jī)LPC消息傳送給內(nèi)核函數(shù)NtAlpcSendWaitReceivePort,在所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort調(diào)用執(zhí)行所述內(nèi)核函數(shù)NtAlpcSendWaitReceivePort之前,在系統(tǒng)服務(wù)描述符表中,需將發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的當(dāng)前地址更新為已保存的發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的原始地址。
本實(shí)施例中,作為再一可選實(shí)施例,所述通過所述鉤子函數(shù)將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)之前,所述方法還包括:
在系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為已保存的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的原始地址。
本發(fā)明實(shí)施例提供的一種攔截惡意程序關(guān)機(jī)的方法,通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù);通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件;若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息,這樣,通過掛鉤發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的所述鉤子函數(shù),攔截符合預(yù)定攔截條件且由惡意操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息,由于,發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)位于關(guān)機(jī)功能的內(nèi)核函數(shù)的上層,實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,且穩(wěn)定不易被惡意程序繞開,有利于維護(hù)系統(tǒng)安全。
圖2為本發(fā)明實(shí)施例攔截惡意程序關(guān)機(jī)的方法具體流程示意圖,如圖2所示,本實(shí)施例的方法可以包括:
步驟201、通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,步驟201的過程和上述方法實(shí)施例的步驟101類似,此處不再贅述。
步驟202、通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息中的目標(biāo)端口的句柄值是否與預(yù)定的關(guān)機(jī)端口句柄值相同。
本實(shí)施例中,所述關(guān)機(jī)LPC消息至少包括:目標(biāo)端口的句柄值和操作命令值。
本實(shí)施例中,當(dāng)有操作進(jìn)程發(fā)送關(guān)機(jī)LPC消息時(shí),就會(huì)執(zhí)行到所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort,所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort的參數(shù)列表中有一個(gè)參數(shù)為目標(biāo)端口句柄參數(shù),由所述目標(biāo)端口句柄參數(shù)接收所述關(guān)機(jī)LPC消息中的目標(biāo)端口的句柄值,并由所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort調(diào)用指定的內(nèi)核函數(shù),例如,ObReferenceObjectByName,獲取預(yù)定的關(guān)機(jī)端口句柄值,若函數(shù)ObReferenceObjectByName返回的關(guān)機(jī)端口句柄值于參數(shù)中的目標(biāo)端口的句柄值相同,則說明操作進(jìn)程是往關(guān)機(jī)端口發(fā)送關(guān)機(jī)LPC消息,則繼續(xù)執(zhí)行步驟203。
本實(shí)施例中,所述預(yù)定的關(guān)機(jī)端口句柄值包含在預(yù)定的攔截條件中,所述預(yù)定的攔截條件還包括:預(yù)定的關(guān)機(jī)操作命令值;其中,所述預(yù)定的關(guān)機(jī)端口句柄值為關(guān)機(jī)或重啟端口的句柄值,關(guān)機(jī)端口的句柄值與重啟端口的句柄值可以相同,也可以不同,二者統(tǒng)稱為關(guān)機(jī)端口句柄值;所述預(yù)定的關(guān)機(jī)操作命令值包括:關(guān)機(jī)和重啟。
步驟203、若與預(yù)定的關(guān)機(jī)端口句柄值相同,則判斷所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值是否為關(guān)機(jī)或重啟。
本實(shí)施例中,所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort的參數(shù)列表中還有一個(gè)PPORT_MESSAGE類型的數(shù)據(jù)結(jié)構(gòu),即是向關(guān)機(jī)端口發(fā)送的數(shù)據(jù)結(jié)構(gòu),此數(shù)據(jù)結(jié)構(gòu)為一個(gè)pData成員指針,指向一個(gè)PSHUTDOWN_WINDOW_MESSAGE類型的結(jié)構(gòu),PSHUTDOWN_WINDOW_MESSAGE就是關(guān)機(jī)LPC消息的數(shù)據(jù)結(jié)構(gòu),其中,有一個(gè)操作命令值,用于接收所述關(guān)機(jī)LPC消息中的操作命令值。
本實(shí)施例中,若操作進(jìn)程是往關(guān)機(jī)端口發(fā)送關(guān)機(jī)LPC消息,還需進(jìn)一步判斷所述關(guān)機(jī)LPC消息中的操作命令值是否為預(yù)定的關(guān)機(jī)或重啟操作命令值。
步驟204、若所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值為關(guān)機(jī)或重啟,則所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件。
本實(shí)施例中,如果PSHUTDOWN_WINDOW_MESSAGE數(shù)據(jù)結(jié)構(gòu)接收到的操作命令值等于SHUTDOWN_PORT_ID(關(guān)機(jī)),或者RESTART_PORT_ID(重啟),則說明所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,繼續(xù)執(zhí)行步驟205。
步驟205、若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息。
本實(shí)施例中,步驟205的過程和上述方法實(shí)施例的步驟103類似,此處不再贅述。
本發(fā)明實(shí)施例提供的一種攔截惡意程序關(guān)機(jī)的方法,通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù);通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件;若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息,這樣,通過掛鉤發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的所述鉤子函數(shù),攔截符合預(yù)定攔截條件且由惡意操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息,由于,發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)位于關(guān)機(jī)功能的內(nèi)核函數(shù)的上層,實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,且穩(wěn)定不易被惡意程序繞開,有利于維護(hù)系統(tǒng)安全。
圖3為本發(fā)明攔截惡意程序關(guān)機(jī)的裝置結(jié)構(gòu)示意圖,如圖3所示,本實(shí)施例的裝置可以包括:監(jiān)聽模塊11、判斷模塊12和攔截模塊13,其中,
所述監(jiān)聽模塊11,用于通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息,則操作進(jìn)程發(fā)送關(guān)機(jī)LPC消息的流程包括:
操作進(jìn)程以關(guān)機(jī)LPC消息為參數(shù)->調(diào)用ndtll模塊的發(fā)送關(guān)機(jī)LPC消息的函數(shù)->本實(shí)施例提供的鉤子函數(shù)->內(nèi)核層的發(fā)送關(guān)機(jī)LPC消息的內(nèi)核函數(shù)->再由系統(tǒng)解析所述關(guān)機(jī)LPC消息并調(diào)用關(guān)機(jī)功能的內(nèi)核函數(shù),從而完成計(jì)算機(jī)關(guān)機(jī)操作。
本實(shí)施例中,假設(shè),調(diào)用ndtll模塊的發(fā)送關(guān)機(jī)LPC消息的函數(shù)為ndtll模塊的NtAlpcSendWaitReceivePort函數(shù);本實(shí)施例提供的鉤子函數(shù)為NewNtAlpcSendWaitReceivePort函數(shù);內(nèi)核層的發(fā)送關(guān)機(jī)LPC消息的內(nèi)核函數(shù)為內(nèi)核層的NtAlpcSendWaitReceivePort函數(shù);所述關(guān)機(jī)功能的內(nèi)核函數(shù)為NtShutdownSystem函數(shù)。
本實(shí)施例中,從操作進(jìn)程發(fā)送關(guān)機(jī)LPC消息的流程可知,掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort或者內(nèi)核函數(shù)NtShutdownSystem都可以實(shí)現(xiàn)惡意關(guān)機(jī)LPC消息的攔截,但是,鉤子函數(shù)掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort攔截惡意關(guān)機(jī)LPC消息時(shí),由于,發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort位于關(guān)機(jī)功能的內(nèi)核函數(shù)NtShutdownSystem的上層,實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,且能更容易更穩(wěn)定地實(shí)現(xiàn)惡意關(guān)機(jī)LPC消息的攔截。
本實(shí)施例中,可以通過掛鉤模塊實(shí)現(xiàn)鉤子函數(shù)NewNtAlpcSendWaitReceivePort掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort。
本實(shí)施例中,作為一可選實(shí)施例,所述裝置還包括:掛鉤模塊;所述掛鉤模塊包括:
第一獲取單元,用于查詢預(yù)設(shè)的系統(tǒng)服務(wù)描述符表,獲取發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址,并保存獲取的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址;
第二獲取單元,用于創(chuàng)建鉤子函數(shù),獲取所述鉤子函數(shù)的函數(shù)地址;
地址更新單元,用于在所述系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為所述鉤子函數(shù)的函數(shù)地址。
本實(shí)施例中,鉤子函數(shù)NewNtAlpcSendWaitReceivePort掛鉤內(nèi)核層的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort的步驟包括:
查詢系統(tǒng)中預(yù)設(shè)的服務(wù)描述符表(System Services Descriptor Table,SSDT),獲取發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort的當(dāng)前地址,并保存獲取的所述當(dāng)前地址;創(chuàng)建鉤子函數(shù)NewNtAlpcSendWaitReceivePort,獲取所述鉤子函數(shù)的函數(shù)地址;在所述系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)NtAlpcSendWaitReceivePort的當(dāng)前地址更新為所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort的函數(shù)地址,從而實(shí)現(xiàn)了NewNtAlpcSendWaitReceivePort函數(shù)的掛鉤。
所述判斷模塊12,用于通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件。
本實(shí)施例中,所述關(guān)機(jī)LPC消息至少包括:目標(biāo)端口的句柄值和操作命令值。
本實(shí)施例中,所述預(yù)定的攔截條件包括:預(yù)定的關(guān)機(jī)端口句柄值及預(yù)定的關(guān)機(jī)操作命令值,其中,所述預(yù)定的關(guān)機(jī)端口句柄值為關(guān)機(jī)或重啟端口的句柄值,關(guān)機(jī)端口的句柄值與重啟端口的句柄值可以相同,也可以不同,二者統(tǒng)稱為關(guān)機(jī)端口句柄值;所述預(yù)定的關(guān)機(jī)操作命令值包括:關(guān)機(jī)和重啟。
本實(shí)施例中,通過所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort判斷所述關(guān)機(jī)LPC消息是否符合預(yù)定的攔截條件。
本實(shí)施例中,所述判斷模塊12包括:第一判斷單元、第二判斷單元及消息確定單元,其中,
所述第一判斷單元,用于通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息中的目標(biāo)端口的句柄值是否與預(yù)定的關(guān)機(jī)端口句柄值相同。
本實(shí)施例中,當(dāng)有操作進(jìn)程發(fā)送關(guān)機(jī)LPC消息時(shí),就會(huì)執(zhí)行到所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort,所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort的參數(shù)列表中有一個(gè)參數(shù)為目標(biāo)端口句柄參數(shù),由所述目標(biāo)端口句柄參數(shù)接收所述關(guān)機(jī)LPC消息中的目標(biāo)端口的句柄值,并由所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort調(diào)用指定的內(nèi)核函數(shù),例如,ObReferenceObjectByName,獲取預(yù)定的關(guān)機(jī)端口句柄值,若函數(shù)ObReferenceObiectByName返回的關(guān)機(jī)端口句柄值于參數(shù)中的目標(biāo)端口的句柄值相同,則說明操作進(jìn)程是往關(guān)機(jī)端口發(fā)送關(guān)機(jī)LPC消息。
所述第二判斷單元,用于若與預(yù)定的關(guān)機(jī)端口句柄值相同,則判斷所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值是否為關(guān)機(jī)或重啟。
本實(shí)施例中,所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort的參數(shù)列表中還有一個(gè)PPORT_MESSAGE類型的數(shù)據(jù)結(jié)構(gòu),即是向關(guān)機(jī)端口發(fā)送的數(shù)據(jù)結(jié)構(gòu),此數(shù)據(jù)結(jié)構(gòu)為一個(gè)pData成員指針,指向一個(gè)PSHUTDOWN_WINDOW_MESSAGE類型的結(jié)構(gòu),PSHUTDOWN_WINDOW_MESSAGE就是關(guān)機(jī)LPC消息的數(shù)據(jù)結(jié)構(gòu),其中,有一個(gè)操作命令值,用于接收所述關(guān)機(jī)LPC消息中的操作命令值。
本實(shí)施例中,若操作進(jìn)程是往關(guān)機(jī)端口發(fā)送關(guān)機(jī)LPC消息,還需進(jìn)一步判斷所述關(guān)機(jī)LPC消息中的操作命令值是否為預(yù)定的關(guān)機(jī)或重啟操作命令值。
所述消息確定單元,用于若所述關(guān)機(jī)本地過程調(diào)用消息中的操作命令值為關(guān)機(jī)或重啟,則所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件。
本實(shí)施例中,如果PSHUTDOWN_WINDOW_MESSAGE數(shù)據(jù)結(jié)構(gòu)接收到的操作命令值等于SHUTDOWN_PORT_ID(關(guān)機(jī)),或者RESTART_PORT_ID(重啟),則說明所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件。
所述攔截模塊13,用于若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息。
本實(shí)施例中,當(dāng)所述關(guān)機(jī)LPC消息符合預(yù)定的攔截條件時(shí),在鉤子函數(shù)NewNtAlpcSendWaitReceivePort中,還需判斷所述操作進(jìn)程是否為惡意程序,具體的,可以調(diào)用ZwQueryInformationProcess等內(nèi)核函數(shù)獲取操作進(jìn)程的安裝路徑,如C:\windows\system32\av2.exe;從獲取的所述操作進(jìn)程的安裝路徑中,提取所述操作進(jìn)程的名稱,例如,av2.exe;接著,查詢預(yù)設(shè)的惡意程序進(jìn)程列表,若所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則攔截所述關(guān)機(jī)LPC消息。
本實(shí)施例中,作為一可選實(shí)施例,所述攔截模塊13包括:
獲取單元,用于若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,則通過所述鉤子函數(shù)獲取所述操作進(jìn)程的安裝路徑;
提取單元,用于從獲取的所述操作進(jìn)程的安裝路徑中,提取所述操作進(jìn)程的名稱;
攔截單元,用于查詢預(yù)設(shè)的惡意程序進(jìn)程列表,若所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則攔截所述關(guān)機(jī)本地過程調(diào)用消息。
本實(shí)施例中,當(dāng)系統(tǒng)正常關(guān)機(jī)或重啟時(shí),也會(huì)發(fā)送關(guān)機(jī)LPC消息,所以預(yù)設(shè)的惡意程序進(jìn)程列表中,不能包含CSRSS_EXE,SMSS_EXE,LSASS_EXE,WINLOGON_EXE等系統(tǒng)進(jìn)程,所述預(yù)設(shè)的惡意程序進(jìn)程列表可以包括已知的惡意關(guān)機(jī)進(jìn)程的名稱,例如,av2.exe,ad2.exe,kei3.exe等。作為又一可選實(shí)施例,所述惡意程序進(jìn)程列表是可擴(kuò)展的惡意程序進(jìn)程列表,以便于用戶能夠根據(jù)實(shí)際應(yīng)用情況更新所述惡意程序進(jìn)程列表。
本實(shí)施例中,當(dāng)操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort攔截所述關(guān)機(jī)本地過程調(diào)用消息,退出所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort,不繼續(xù)執(zhí)行內(nèi)核函數(shù)NtAlpcSendWaitReceivePort,則所述關(guān)機(jī)LPC消息發(fā)送失敗,關(guān)閉計(jì)算機(jī)的操作就會(huì)失敗。
本實(shí)施例中,作為再一可選實(shí)施例,所述攔截單元,具體用于退出所述鉤子函數(shù),不將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,若操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息不符合預(yù)定的攔截條件,或者,所述操作進(jìn)程的名稱沒有包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort會(huì)繼續(xù)調(diào)用執(zhí)行內(nèi)核函數(shù)NtAlpcSendWaitReceivePort,所述關(guān)機(jī)LPC消息發(fā)送成功,關(guān)閉計(jì)算機(jī)的操作就會(huì)成功。
本實(shí)施例中,作為又一可選實(shí)施例,所述攔截模塊13,還用于若所述關(guān)機(jī)本地過程調(diào)用消息不符合預(yù)定的攔截條件,或者,所述操作進(jìn)程的名稱沒有包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)將所述關(guān)機(jī)本地過程調(diào)用消息傳送給發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)。
本實(shí)施例中,為了所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort能夠?qū)⑺鲫P(guān)機(jī)LPC消息傳送給內(nèi)核函數(shù)NtAlpcSendWaitReceivePort,在所述鉤子函數(shù)NewNtAlpcSendWaitReceivePort調(diào)用執(zhí)行所述內(nèi)核函數(shù)NtAlpcSendWaitReceivePort之前,在系統(tǒng)服務(wù)描述符表中,需將發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的當(dāng)前地址更新為已保存的發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的原始地址。
本實(shí)施例中,作為再一可選實(shí)施例,所述攔截模塊13,還用于在系統(tǒng)服務(wù)描述符表中,將發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的當(dāng)前地址更新為已保存的發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù)的原始地址。
本實(shí)施例提供的一種攔截惡意程序關(guān)機(jī)的裝置,通過鉤子函數(shù)監(jiān)聽操作進(jìn)程發(fā)送的關(guān)機(jī)本地過程調(diào)用消息,其中,所述鉤子函數(shù)掛鉤發(fā)送所述關(guān)機(jī)本地過程調(diào)用消息的內(nèi)核函數(shù);通過所述鉤子函數(shù)判斷所述關(guān)機(jī)本地過程調(diào)用消息是否符合預(yù)定的攔截條件;若所述關(guān)機(jī)本地過程調(diào)用消息符合預(yù)定的攔截條件,且所述操作進(jìn)程的名稱包含在預(yù)設(shè)的惡意程序進(jìn)程列表中,則通過所述鉤子函數(shù)攔截所述關(guān)機(jī)本地過程調(diào)用消息,這樣,通過掛鉤發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)的所述鉤子函數(shù),攔截符合預(yù)定攔截條件且由惡意操作進(jìn)程發(fā)送的關(guān)機(jī)LPC消息,由于,發(fā)送所述關(guān)機(jī)LPC消息的內(nèi)核函數(shù)位于關(guān)機(jī)功能的內(nèi)核函數(shù)的上層,實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,且穩(wěn)定不易被惡意程序繞開,有利于維護(hù)系統(tǒng)安全。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)......”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個(gè)實(shí)施例均采用相關(guān)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。
尤其,對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認(rèn)為是用于實(shí)現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實(shí)現(xiàn)在任何計(jì)算機(jī)可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計(jì)算機(jī)的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,″計(jì)算機(jī)可讀介質(zhì)″可以是任何可以包含、存儲(chǔ)、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計(jì)算機(jī)可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個(gè)或多個(gè)布線的電連接部(電子裝置),便攜式計(jì)算機(jī)盤盒(磁裝置),隨機(jī)存取存儲(chǔ)器(RAM),只讀存儲(chǔ)器(ROM),可擦除可編輯只讀存儲(chǔ)器(EPROM或閃速存儲(chǔ)器),光纖裝置,以及便攜式光盤只讀存儲(chǔ)器(CDROM)。另外,計(jì)算機(jī)可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因?yàn)榭梢岳缤ㄟ^對(duì)紙或其他介質(zhì)進(jìn)行光學(xué)掃描,接著進(jìn)行編輯、解譯或必要時(shí)以其他合適方式進(jìn)行處理來以電子方式獲得所述程序,然后將其存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。
在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。例如,如果用硬件來實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場(chǎng)可編程門陣列(FPGA)等。
本發(fā)明實(shí)施例還提供一種電子設(shè)備。圖4為本發(fā)明電子設(shè)備一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,可以實(shí)現(xiàn)本發(fā)明圖1-3所示實(shí)施例的流程,如圖4所示,上述電子設(shè)備可以包括:殼體41、處理器42、存儲(chǔ)器43、電路板44和電源電路45,其中,電路板44安置在殼體41圍成的空間內(nèi)部,處理器42和存儲(chǔ)器43設(shè)置在電路板44上;電源電路45,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲(chǔ)器43用于存儲(chǔ)可執(zhí)行程序代碼;處理器42通過讀取存儲(chǔ)器43中存儲(chǔ)的可執(zhí)行程序代碼來運(yùn)行與可執(zhí)行程序代碼對(duì)應(yīng)的程序,用于執(zhí)行前述任一實(shí)施例所述的攔截惡意程序關(guān)機(jī)的方法。
處理器42對(duì)上述步驟的具體執(zhí)行過程以及處理器42通過運(yùn)行可執(zhí)行程序代碼來進(jìn)一步執(zhí)行的步驟,可以參見本發(fā)明圖1-3所示實(shí)施例的描述,在此不再贅述。
該電子設(shè)備以多種形式存在,包括但不限于:
(1)移動(dòng)通信設(shè)備:這類設(shè)備的特點(diǎn)是具備移動(dòng)通信功能,并且以提供話音、數(shù)據(jù)通信為主要目標(biāo)。這類終端包括:智能手機(jī)(例如iPhone)、多媒體手機(jī)、功能性手機(jī),以及低端手機(jī)等。
(2)超移動(dòng)個(gè)人計(jì)算機(jī)設(shè)備:這類設(shè)備屬于個(gè)人計(jì)算機(jī)的范疇,有計(jì)算和處理功能,一般也具備移動(dòng)上網(wǎng)特性。這類終端包括:PDA、MID和UMPC設(shè)備等,例如iPad。
(3)便攜式娛樂設(shè)備:這類設(shè)備可以顯示和播放多媒體內(nèi)容。該類設(shè)備包括:音頻、視頻播放器(例如iPod),掌上游戲機(jī),電子書,以及智能玩具和便攜式車載導(dǎo)航設(shè)備。
(4)服務(wù)器:提供計(jì)算服務(wù)的設(shè)備,服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務(wù)器和通用的計(jì)算機(jī)架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴(kuò)展性、可管理性等方面要求較高。
(5)其他具有數(shù)據(jù)交互功能的電子設(shè)備。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。
為了描述的方便,描述以上裝置是以功能分為各種單元/模塊分別描述。當(dāng)然,在實(shí)施本發(fā)明時(shí)可以把各單元/模塊的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory,ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。