本發(fā)明涉及系統(tǒng)安全技術(shù)領(lǐng)域,尤其涉及一種監(jiān)控攝像頭打開的方法、裝置及電子設(shè)備。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)發(fā)展,病毒、木馬等惡意程序技術(shù)層出不窮,個別惡意程序在后臺偷偷運行,偷偷打開用戶電腦上安裝的攝像頭,遠(yuǎn)程發(fā)送視頻數(shù)據(jù),導(dǎo)致用戶隱私被泄漏。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供一種監(jiān)控攝像頭打開的方法、裝置及電子設(shè)備,以解決現(xiàn)有技術(shù)中攝像頭被惡意程序偷偷打開,導(dǎo)致用戶隱私泄露的問題。
第一方面,本發(fā)明實施例提供一種監(jiān)控攝像頭打開的方法,包括:
創(chuàng)建用于過濾的設(shè)備對象;
將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,其中,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂;
對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控;
判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
結(jié)合第一方面,在第一方面的第一種實施方式中,在創(chuàng)建用于過濾的設(shè)備對象之前,所述方法還包括:
獲取系統(tǒng)中所有的設(shè)備對象;
從獲取的所述所有的設(shè)備對象中,獲取所述攝像頭驅(qū)動程序的設(shè)備對象。
結(jié)合第一方面的第一種實施方式,在第一方面的第二種實施方式中,所述從獲取的所述所有的設(shè)備對象中,獲取所述攝像頭驅(qū)動程序的設(shè)備對象,包括:
根據(jù)獲取的所述所有的設(shè)備對象,確定出其中每一個設(shè)備對象的設(shè)備名;
將獲取的每一個設(shè)備對象的設(shè)備名與預(yù)先設(shè)置的攝像頭設(shè)備名識別規(guī)則進(jìn)行匹配;
根據(jù)匹配結(jié)果,將匹配成功的所述設(shè)備名對應(yīng)的設(shè)備對象作為攝像頭驅(qū)動程序的設(shè)備對象。
結(jié)合第一方面的第二種實施方式,在第一方面的第三種實施方式中,在根據(jù)匹配結(jié)果,將匹配成功的所述設(shè)備名對應(yīng)的設(shè)備對象作為攝像頭驅(qū)動程序的設(shè)備對象之后,所述方法還包括:
根據(jù)獲取的所述攝像頭驅(qū)動程序的設(shè)備對象構(gòu)建所述攝像頭驅(qū)動程序的設(shè)備對象棧。
結(jié)合第一方面,在第一方面的第四種實施方式中,所述判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,包括:
查詢預(yù)設(shè)的惡意進(jìn)程列表;
若發(fā)出所述打開攝像頭的請求消息的進(jìn)程的名稱包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則確定發(fā)出所述打開攝像頭的請求消息的進(jìn)程是惡意進(jìn)程。
結(jié)合第一方面,或結(jié)合第一方面的第四種實施方式,在第一方面的第五種實現(xiàn)方式中,所述攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息,包括:
將所述請求消息的返回狀態(tài)設(shè)置為拒絕訪問狀態(tài),同時調(diào)用完成請求內(nèi)核函數(shù)將所述請求消息完成。
第二方面,本發(fā)明實施例提供一種監(jiān)控攝像頭打開的裝置,包括:
創(chuàng)建模塊,用于創(chuàng)建用于過濾的設(shè)備對象;
綁定模塊,用于將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,其中,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂;
監(jiān)控模塊,用于對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控;
攔截模塊,用于判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
結(jié)合第二方面,在第二方面的第一種實施方式中,所述裝置還包括:
第一獲取模塊,用于獲取系統(tǒng)中所有的設(shè)備對象;
第二獲取模塊,用于從獲取的所述所有的設(shè)備對象中,獲取所述攝像頭驅(qū)動程序的設(shè)備對象。
結(jié)合第二方面的第一種實施方式,在第二方面的第二種實施方式中,所述第二獲取模塊包括:
獲取單元,用于根據(jù)獲取的所述所有的設(shè)備對象,確定出其中每一個設(shè)備對象的設(shè)備名;
匹配單元,用于將獲取的每一個設(shè)備對象的設(shè)備名與預(yù)先設(shè)置的攝像頭設(shè)備名識別規(guī)則進(jìn)行匹配;
確定單元,用于根據(jù)匹配結(jié)果,將匹配成功的所述設(shè)備名對應(yīng)的設(shè)備對象作為攝像頭驅(qū)動程序的設(shè)備對象。
結(jié)合第二方面的第二種實施方式,在第二方面的第三種實施方式中,所述第二獲取模塊還包括:構(gòu)建單元;
所述構(gòu)建單元,用于根據(jù)獲取的所述攝像頭驅(qū)動程序的設(shè)備對象構(gòu)建所述攝像頭驅(qū)動程序的設(shè)備對象棧。
結(jié)合第二方面,在第二方面的第四種實施方式中,所述攔截模塊包括:
查詢單元,用于查詢預(yù)設(shè)的惡意進(jìn)程列表;
確定單元,用于若發(fā)出所述打開攝像頭的請求消息的進(jìn)程的名稱包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則確定發(fā)出所述打開攝像頭的請求消息的進(jìn)程是惡意進(jìn)程。
結(jié)合第二方面,或結(jié)合第二方面的第四種實施方式,在第二方面的第五種實施方式中,所述攔截模塊還包括:
攔截單元,用于將所述請求消息的返回狀態(tài)設(shè)置為拒絕訪問狀態(tài),同時調(diào)用完成請求內(nèi)核函數(shù)將所述請求消息完成。
第三方面,本發(fā)明實施例提供一種電子設(shè)備,所述電子設(shè)備包括:殼體、處理器、存儲器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲器設(shè)置在電路板上;電源電路,用于為上述電子設(shè)備的各個電路或器件供電;存儲器用于存儲可執(zhí)行程序代碼;處理器通過讀取存儲器中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行前述任一所述的監(jiān)控攝像頭打開的方法。
本發(fā)明實施例提供的一種監(jiān)控攝像頭打開的方法、裝置及電子設(shè)備,通過創(chuàng)建用于過濾的設(shè)備對象;將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂;對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控;判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息,這樣,對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控,從而攔截惡意進(jìn)程發(fā)送的打開攝像頭的請求消息,防止攝像頭被惡意程序偷偷打開而導(dǎo)致用戶隱私的泄露。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明的實施例監(jiān)控攝像頭打開的方法流程示意圖;
圖2為本發(fā)明的實施例監(jiān)控攝像頭打開的方法具體流程示意圖;
圖3為本發(fā)明的實施例監(jiān)控攝像頭打開的裝置結(jié)構(gòu)示意圖;
圖4為本發(fā)明電子設(shè)備一個實施例的結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明實施例進(jìn)行詳細(xì)描述。
應(yīng)當(dāng)明確,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明的實施例監(jiān)控攝像頭打開的方法流程示意圖,如圖1所示,本實施例的方法可以包括:
步驟101、創(chuàng)建用于過濾的設(shè)備對象。
本實施例中,可以通過殺毒軟件的驅(qū)動程序創(chuàng)建一個用于過濾的設(shè)備對象,例如,可以通過殺毒軟件驅(qū)動程序中預(yù)定的創(chuàng)建設(shè)備對象的內(nèi)核函數(shù),例如,函數(shù)IoCreateDevice,創(chuàng)建一個用于過濾的設(shè)備對象。
步驟102、將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,其中,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂。
本實施例中,攝像頭是攝像頭設(shè)備加攝像頭驅(qū)動程序才可以工作的,這是一個設(shè)備驅(qū)動,會生成攝像頭驅(qū)動程序的設(shè)備對象,將新創(chuàng)建的設(shè)備對象綁定到所述攝像頭驅(qū)動程序的設(shè)備對象棧上,且綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂,這樣,新創(chuàng)建的設(shè)備對象可以作為過濾設(shè)備對象,即可實現(xiàn)攝像頭的各種行為監(jiān)控,例如,攝像頭的打開,關(guān)閉等行為,在此不作限定。
本實施例中,在綁定之前,所述攝像頭驅(qū)動程序的設(shè)備對象棧是由系統(tǒng)中的攝像頭驅(qū)動程序的設(shè)備對象構(gòu)成的,所述攝像頭驅(qū)動程序的設(shè)備對象棧中攝像頭驅(qū)動程序的設(shè)備對象可以有一個或多個。
本實施例中,將新創(chuàng)建的設(shè)備對象綁定到所述攝像頭驅(qū)動程序的設(shè)備對象棧上,具體地,可以調(diào)用預(yù)定的綁定設(shè)備對象的內(nèi)核函數(shù),例如,函數(shù)IoAttachDeviceToDeviceStack,將新創(chuàng)建的用于過濾的設(shè)備對象綁定到所述攝像頭驅(qū)動程序的設(shè)備對象棧上,以實現(xiàn)一種過濾設(shè)備對象。
步驟103、對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控。
本實施例中,當(dāng)系統(tǒng)中有進(jìn)程操作攝像頭時,如,打開攝像頭時,即先打開位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象,然后再執(zhí)行到所述攝像頭驅(qū)動程序的設(shè)備對象,那么新創(chuàng)建的設(shè)備對象就有了過濾功能,有了監(jiān)控能力。
本實施例中,設(shè)備對象都有自身的消息處理機制,例如,攝像頭驅(qū)動程序的設(shè)備對象的消息處理機制可以包括:一些常用的消息分發(fā)函數(shù),如IRP_MJ_CREATE(攝像頭的打開),IRP_MJ_CLOSE(攝像頭的關(guān)閉),新創(chuàng)建用于過濾的設(shè)備對象主要用于監(jiān)控攝像頭的打開這一消息分發(fā)函數(shù),即是監(jiān)控攝像頭的打開分發(fā)函數(shù),具體的,可以定義消息函數(shù)IrpCreate監(jiān)控攝像頭的打開分發(fā)函數(shù)。
步驟104、判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
本實施例中,當(dāng)系統(tǒng)中有進(jìn)程(包括:惡意進(jìn)程)在打開攝像頭時,即會先執(zhí)行到函數(shù)IrpCreate,通過函數(shù)IrpCreate判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息;否則,放行。
本實施例中,具體的,可以先獲取發(fā)送所述打開攝像頭的請求消息的進(jìn)程的名稱;再查詢獲取到的所述進(jìn)程的名稱是否包含在預(yù)設(shè)的惡意進(jìn)程列表中,若包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
本實施例中,作為一可選實施例,所述判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,包括:
查詢預(yù)設(shè)的惡意進(jìn)程列表;
若發(fā)出所述打開攝像頭的請求消息的進(jìn)程的名稱包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則確定發(fā)出所述打開攝像頭的請求消息的進(jìn)程是惡意進(jìn)程。
本實施例中,所述預(yù)設(shè)的惡意進(jìn)程列表用于保存打開攝像頭的惡意進(jìn)程的名稱,例如,所述惡意進(jìn)程列表可以包括:av2.exe,ac2.exe,secc.exe等已知惡意進(jìn)程的名稱,但是一些正常的打開攝像頭的進(jìn)程名稱不包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,例如,QQ.exe。
本實施例中,若獲取到的發(fā)出所述打開攝像頭的請求消息的進(jìn)程的名稱為av2,則包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,可以通過函數(shù)IrpCreate攔截進(jìn)程av2發(fā)送的所述打開攝像頭的請求消息。
本實施例中,所述預(yù)設(shè)的惡意進(jìn)程列表是可擴展的惡意進(jìn)程列表,以便于用戶能夠根據(jù)實際應(yīng)用情況更新所述惡意進(jìn)程列表。
本實施例中,作為又一實施例,所述攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息,包括:
將所述請求消息的返回狀態(tài)設(shè)置為拒絕訪問狀態(tài),同時調(diào)用完成請求內(nèi)核函數(shù)將所述請求消息完成。
本實施例中,在函數(shù)IrpCreate中,消息是系統(tǒng)的IO管理器以IO請求包的形式發(fā)送的。也就是說,在函數(shù)IrpCreate中,打開攝像頭的請求消息是以IO請求包的形式發(fā)送的。
本實施例中,通過函數(shù)IrpCreate攔截惡意進(jìn)程發(fā)送的所述打開攝像頭的請求消息具體步驟可以包括:
把IO請求包的返回狀態(tài)設(shè)置為拒絕訪問狀態(tài),同時調(diào)用完成請求內(nèi)核函數(shù)將所述請求消息完成,即不執(zhí)行到所述攝像頭驅(qū)動程序的設(shè)備對象上,其中,所述完成請求內(nèi)核函數(shù)的名稱可以表示為IoCompleteRequest。
本實施例中,若發(fā)送所述打開攝像頭的請求消息的進(jìn)程的名稱沒有包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則放行,即不用設(shè)置所述IO請求包的返回狀態(tài)為拒絕訪問,并調(diào)用預(yù)定的內(nèi)核函數(shù),例如,函數(shù)IoCallDriver,將所述IO請求包往下傳遞,直至執(zhí)行到所述攝像頭驅(qū)動程序的設(shè)備對象上,攝像頭就會打開成功。
本發(fā)明實施例提供的監(jiān)控攝像頭打開的方法,通過創(chuàng)建用于過濾的設(shè)備對象;將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂;對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控;判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息,這樣,對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控,從而攔截惡意進(jìn)程發(fā)送的打開攝像頭的請求消息,防止攝像頭被惡意程序偷偷打開而導(dǎo)致用戶隱私的泄露。此外,本發(fā)明實施例無需通過掛鉤內(nèi)核函數(shù)監(jiān)控打開攝像頭的操作,實現(xiàn)方法更穩(wěn)定,且能夠運行在32位和64位操作系統(tǒng)上,通用性強。
圖2為本發(fā)明實施例監(jiān)控攝像頭打開的方法具體流程流程圖,如圖2所示,本實施例的方法可以包括:
步驟201、獲取系統(tǒng)中所有的設(shè)備對象。
本實施例中,攝像頭是攝像頭設(shè)備加攝像頭驅(qū)動程序才可以工作的,這是一個設(shè)備驅(qū)動,會生成攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,可以調(diào)用獲取系統(tǒng)上所有設(shè)備對象的內(nèi)核函數(shù),例如,調(diào)用內(nèi)核函數(shù)IoEnumerateDeviceObjectList獲取系統(tǒng)中所有的設(shè)備對象。
本實施例中,當(dāng)通過內(nèi)核函數(shù)IoEnumerateDeviceObjectList獲取系統(tǒng)中所有的設(shè)備對象時,獲取到的是每一個設(shè)備對象對應(yīng)的設(shè)備對象指針。
步驟202、從獲取的所述所有的設(shè)備對象中,獲取所述攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,作為一可選實施例,所述從獲取的所述所有的設(shè)備對象中,獲取所述攝像頭驅(qū)動程序的設(shè)備對象,包括:
根據(jù)獲取的所述所有的設(shè)備對象,確定出其中每一個設(shè)備對象的設(shè)備名;
將獲取的每一個設(shè)備對象的設(shè)備名與預(yù)先設(shè)置的攝像頭設(shè)備名識別規(guī)則進(jìn)行匹配;
根據(jù)匹配結(jié)果,將匹配成功的所述設(shè)備名對應(yīng)的設(shè)備對象作為攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,以逐個設(shè)備對象指針為參數(shù),調(diào)用獲取設(shè)備名的內(nèi)核函數(shù),例如,ObQueryNameString,獲取每一個設(shè)備對象的設(shè)備名,例如,可以獲取到類似\\Device\kisknl、\\Device\carmera這樣的設(shè)備名。
本實施例中,例如,預(yù)先設(shè)置的攝像頭設(shè)備名識別規(guī)則為當(dāng)獲取到的設(shè)備對象的設(shè)備名中包含”carmera”時,則判定所述設(shè)備名對應(yīng)的設(shè)備對象為攝像頭驅(qū)動程序的的設(shè)備對象,例如,若獲取到的某一設(shè)備對象的設(shè)備名為\\Device\carmera,則判斷所述設(shè)備名對應(yīng)的設(shè)備對象為攝像頭驅(qū)動程序的設(shè)備對象。
步驟203、根據(jù)獲取的所述攝像頭驅(qū)動程序的設(shè)備對象構(gòu)建所述攝像頭驅(qū)動程序的設(shè)備對象棧。
步驟204、創(chuàng)建用于過濾的設(shè)備對象。
本實施例中,步驟204的過程和上述方法實施例的步驟101類似,此處不再贅述。
步驟205、將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,其中,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂。
本實施例中,步驟205的過程和上述方法實施例的步驟102類似,此處不再贅述。
步驟206、對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控。
本實施例中,步驟206的過程和上述方法實施例的步驟103類似,此處不再贅述。
步驟207、判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
本實施例中,步驟207的過程和上述方法實施例的步驟104類似,此處不再贅述。
本發(fā)明實施例提供的監(jiān)控攝像頭打開的方法,通過創(chuàng)建用于過濾的設(shè)備對象;將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂;對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控;判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息,這樣,對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控,從而攔截惡意進(jìn)程發(fā)送的打開攝像頭的請求消息,防止攝像頭被惡意程序偷偷打開而導(dǎo)致用戶隱私的泄露。此外,本發(fā)明實施例無需通過掛鉤內(nèi)核函數(shù)監(jiān)控打開攝像頭的操作,實現(xiàn)方法更穩(wěn)定,且能夠運行在32位和64位操作系統(tǒng)上,通用性強。
圖3為本發(fā)明監(jiān)控攝像頭打開的裝置實施例的結(jié)構(gòu)示意圖,如圖3所示,本實施例的裝置可以包括:創(chuàng)建模塊11、綁定模塊12、監(jiān)控模塊13及攔截模塊14,其中,
所述創(chuàng)建模塊11,用于創(chuàng)建用于過濾的設(shè)備對象。
本實施例中,可以通過殺毒軟件的驅(qū)動程序創(chuàng)建一個用于過濾的設(shè)備對象,例如,可以通過殺毒軟件驅(qū)動程序中預(yù)定的創(chuàng)建設(shè)備對象的內(nèi)核函數(shù),例如,函數(shù)IoCreateDevice,創(chuàng)建一個用于過濾的設(shè)備對象。
本實施例中,為了獲取攝像頭驅(qū)動程序的設(shè)備對象,作為一可選實施例,所述裝置還包括:第一獲取模塊及第二獲取模塊;
所述第一獲取模塊,用于獲取系統(tǒng)中所有的設(shè)備對象。
本實施例中,攝像頭是攝像頭設(shè)備加攝像頭驅(qū)動程序才可以工作的,這是一個設(shè)備驅(qū)動,會生成攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,可以調(diào)用獲取系統(tǒng)上所有設(shè)備對象的內(nèi)核函數(shù),例如,調(diào)用內(nèi)核函數(shù)IoEnumerateDeviceObjectList獲取系統(tǒng)中所有的設(shè)備對象。
本實施例中,當(dāng)通過內(nèi)核函數(shù)IoEnumerateDeviceObjectList獲取系統(tǒng)中所有的設(shè)備對象時,獲取到的是每一個設(shè)備對象對應(yīng)的設(shè)備對象指針。
所述第二獲取模塊,用于從獲取的所述所有的設(shè)備對象中,獲取所述攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,作為又一可選實施例,所述第二獲取模塊包括:
獲取單元,用于根據(jù)獲取的所述所有的設(shè)備對象,確定出其中每一個設(shè)備對象的設(shè)備名;
匹配單元,用于將獲取的每一個設(shè)備對象的設(shè)備名與預(yù)先設(shè)置的攝像頭設(shè)備名識別規(guī)則進(jìn)行匹配;
確定單元,用于根據(jù)匹配結(jié)果,將匹配成功的所述設(shè)備名對應(yīng)的設(shè)備對象作為攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,以逐個設(shè)備對象指針為參數(shù),調(diào)用獲取設(shè)備名的內(nèi)核函數(shù),例如,ObQueryNameString,獲取每一個設(shè)備對象的設(shè)備名,例如,可以獲取到類似\\Device\kisknl、\\Device\carmera這樣的設(shè)備名。
本實施例中,例如,預(yù)先設(shè)置的攝像頭設(shè)備名識別規(guī)則為當(dāng)獲取到的設(shè)備對象的設(shè)備名中包含”carmera”時,則判定所述設(shè)備名對應(yīng)的設(shè)備對象為攝像頭驅(qū)動程序的的設(shè)備對象,例如,若獲取到的某一設(shè)備對象的設(shè)備名為\\Device\carmera,則判斷所述設(shè)備名對應(yīng)的設(shè)備對象為攝像頭驅(qū)動程序的設(shè)備對象。
本實施例中,作為再一可選實施例,所述第二獲取模塊還包括:構(gòu)建單元;
所述構(gòu)建單元,用于根據(jù)獲取的所述攝像頭驅(qū)動程序的設(shè)備對象構(gòu)建所述攝像頭驅(qū)動程序的設(shè)備對象棧。
所述綁定模塊12,用于將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,其中,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂。
本實施例中,攝像頭是攝像頭設(shè)備加攝像頭驅(qū)動程序才可以工作的,這是一個設(shè)備驅(qū)動,會生成攝像頭驅(qū)動程序的設(shè)備對象,將新創(chuàng)建的設(shè)備對象綁定到所述攝像頭驅(qū)動程序的設(shè)備對象棧上,且綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂,這樣,新創(chuàng)建的設(shè)備對象可以作為過濾設(shè)備對象,即可實現(xiàn)攝像頭的各種行為監(jiān)控,例如,攝像頭的打開,關(guān)閉等行為,在此不作限定。
本實施例中,在綁定之前,所述攝像頭驅(qū)動程序的設(shè)備對象棧是由系統(tǒng)中的攝像頭驅(qū)動程序的設(shè)備對象構(gòu)成的,所述攝像頭驅(qū)動程序的設(shè)備對象棧中攝像頭驅(qū)動程序的設(shè)備對象可以有一個或多個。
本實施例中,將新創(chuàng)建的設(shè)備對象綁定到所述攝像頭驅(qū)動程序的設(shè)備對象棧上,具體地,可以調(diào)用預(yù)定的綁定設(shè)備對象的內(nèi)核函數(shù),例如,函數(shù)IoAttachDeviceToDeviceStack,將新創(chuàng)建的用于過濾的設(shè)備對象綁定到所述攝像頭驅(qū)動程序的設(shè)備對象棧上,以實現(xiàn)一種過濾設(shè)備對象。
所述監(jiān)控模塊13,用于對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控。
本實施例中,當(dāng)系統(tǒng)中有進(jìn)程操作攝像頭時,如,打開攝像頭時,即先打開位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象,然后再執(zhí)行到所述攝像頭驅(qū)動程序的設(shè)備對象,那么新創(chuàng)建的設(shè)備對象就有了過濾功能,有了監(jiān)控能力。
本實施例中,設(shè)備對象都有自身的消息處理機制,例如,攝像頭驅(qū)動程序的設(shè)備對象的消息處理機制可以包括:一些常用的消息分發(fā)函數(shù),如IRP_MJ_CREATE(攝像頭的打開),IRP_MJ_CLOSE(攝像頭的關(guān)閉),新創(chuàng)建用于過濾的設(shè)備對象主要用于監(jiān)控攝像頭的打開這一消息分發(fā)函數(shù),即是監(jiān)控攝像頭的打開分發(fā)函數(shù),具體的,可以定義消息函數(shù)IrpCreate監(jiān)控攝像頭的打開分發(fā)函數(shù)。
所述攔截模塊14,用于判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
本實施例中,當(dāng)系統(tǒng)中有進(jìn)程(包括:惡意進(jìn)程)在打開攝像頭時,即會先執(zhí)行到函數(shù)IrpCreate,通過函數(shù)IrpCreate判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息;否則,放行。
本實施例中,具體的,可以先獲取發(fā)送所述打開攝像頭的請求消息的進(jìn)程的名稱;再查詢獲取到的所述進(jìn)程的名稱是否包含在預(yù)設(shè)的惡意進(jìn)程列表中,若包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息。
本實施例中,作為一可選實施例,所述攔截模塊14包括:
查詢單元,用于查詢預(yù)設(shè)的惡意進(jìn)程列表;
確定單元,用于若發(fā)出所述打開攝像頭的請求消息的進(jìn)程的名稱包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則確定發(fā)出所述打開攝像頭的請求消息的進(jìn)程是惡意進(jìn)程。
本實施例中,所述預(yù)設(shè)的惡意進(jìn)程列表用于保存打開攝像頭的惡意進(jìn)程的名稱,例如,所述惡意進(jìn)程列表可以包括:av2.exe,ac2.exe,secc.exe等已知惡意進(jìn)程的名稱,但是一些正常的打開攝像頭的進(jìn)程名稱不包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,例如,QQ.exe。
本實施例中,若獲取到的發(fā)出所述打開攝像頭的請求消息的進(jìn)程的名稱為av2,則包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,可以通過函數(shù)IrpCreate攔截進(jìn)程av2發(fā)送的所述打開攝像頭的請求消息。
本實施例中,所述預(yù)設(shè)的惡意進(jìn)程列表是可擴展的惡意進(jìn)程列表,以便于用戶能夠根據(jù)實際應(yīng)用情況更新所述惡意進(jìn)程列表。
本實施例中,作為又一可選實施例,所述攔截模塊14還包括:
攔截單元,用于將所述請求消息的返回狀態(tài)設(shè)置為拒絕訪問狀態(tài),同時調(diào)用完成請求內(nèi)核函數(shù)將所述請求消息完成。
本實施例中,在函數(shù)IrpCreate中,消息是系統(tǒng)的IO管理器以IO請求包的形式發(fā)送的。也就是說,在函數(shù)IrpCreate中,打開攝像頭的請求消息是以IO請求包的形式發(fā)送的。
本實施例中,通過函數(shù)IrpCreate攔截惡意進(jìn)程發(fā)送的所述打開攝像頭的請求消息具體步驟可以包括:
把IO請求包的返回狀態(tài)設(shè)置為拒絕訪問狀態(tài),同時調(diào)用完成請求內(nèi)核函數(shù)將所述請求消息完成,即不執(zhí)行到所述攝像頭驅(qū)動程序的設(shè)備對象上,其中,所述完成請求內(nèi)核函數(shù)的名稱可以表示為IoCompleteRequest。
本實施例中,若發(fā)送所述打開攝像頭的請求消息的進(jìn)程的名稱沒有包含在所述預(yù)設(shè)的惡意進(jìn)程列表中,則放行,即不用設(shè)置所述IO請求包的返回狀態(tài)為拒絕訪問,并調(diào)用預(yù)定的內(nèi)核函數(shù),例如,函數(shù)IoCallDriver,將所述IO請求包往下傳遞,直至執(zhí)行到所述攝像頭驅(qū)動程序的設(shè)備對象上,攝像頭就會打開成功。
本發(fā)明實施例提供的監(jiān)控攝像頭打開的裝置,通過創(chuàng)建用于過濾的設(shè)備對象;將創(chuàng)建的所述用于過濾的設(shè)備對象綁定到攝像頭驅(qū)動程序的設(shè)備對象棧上,綁定后的所述用于過濾的設(shè)備對象位于所述攝像頭驅(qū)動程序的設(shè)備對象棧的棧頂;對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控;判斷發(fā)出所述打開攝像頭的請求消息的進(jìn)程是否是惡意進(jìn)程,若是惡意進(jìn)程,則攔截所述進(jìn)程發(fā)送的所述打開攝像頭的請求消息,這樣,對位于棧頂?shù)乃鲇糜谶^濾的設(shè)備對象接收的打開攝像頭的請求消息進(jìn)行監(jiān)控,從而攔截惡意進(jìn)程發(fā)送的打開攝像頭的請求消息,防止攝像頭被惡意程序偷偷打開而導(dǎo)致用戶隱私的泄露。此外,本發(fā)明實施例無需通過掛鉤內(nèi)核函數(shù)監(jiān)控打開攝像頭的操作,實現(xiàn)方法更穩(wěn)定,且能夠運行在32位和64位操作系統(tǒng)上,通用性強。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關(guān)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。
尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認(rèn)為是用于實現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實現(xiàn)在任何計算機可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計算機的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,"計算機可讀介質(zhì)"可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計算機可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個或多個布線的電連接部(電子裝置),便攜式計算機盤盒(磁裝置),隨機存取存儲器(RAM),只讀存儲器(ROM),可擦除可編輯只讀存儲器(EPROM或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(CDROM)。另外,計算機可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因為可以例如通過對紙或其他介質(zhì)進(jìn)行光學(xué)掃描,接著進(jìn)行編輯、解譯或必要時以其他合適方式進(jìn)行處理來以電子方式獲得所述程序,然后將其存儲在計算機存儲器中。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。
在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項或他們的組合來實現(xiàn):具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。
本發(fā)明實施例還提供一種電子設(shè)備。圖4為本發(fā)明電子設(shè)備一個實施例的結(jié)構(gòu)示意圖,可以實現(xiàn)本發(fā)明圖1-3所示實施例的流程,如圖4所示,上述電子設(shè)備可以包括:殼體41、處理器42、存儲器43、電路板44和電源電路45,其中,電路板44安置在殼體41圍成的空間內(nèi)部,處理器42和存儲器43設(shè)置在電路板44上;電源電路45,用于為上述電子設(shè)備的各個電路或器件供電;存儲器43用于存儲可執(zhí)行程序代碼;處理器42通過讀取存儲器43中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行前述任一實施例所述的監(jiān)控攝像頭打開的方法。
處理器42對上述步驟的具體執(zhí)行過程以及處理器42通過運行可執(zhí)行程序代碼來進(jìn)一步執(zhí)行的步驟,可以參見本發(fā)明圖1-3所示實施例的描述,在此不再贅述。
該電子設(shè)備以多種形式存在,包括但不限于:
(1)移動通信設(shè)備:這類設(shè)備的特點是具備移動通信功能,并且以提供話音、數(shù)據(jù)通信為主要目標(biāo)。這類終端包括:智能手機(例如iPhone)、多媒體手機、功能性手機,以及低端手機等。
(2)超移動個人計算機設(shè)備:這類設(shè)備屬于個人計算機的范疇,有計算和處理功能,一般也具備移動上網(wǎng)特性。這類終端包括:PDA、MID和UMPC設(shè)備等,例如iPad。
(3)便攜式娛樂設(shè)備:這類設(shè)備可以顯示和播放多媒體內(nèi)容。該類設(shè)備包括:音頻、視頻播放器(例如iPod),掌上游戲機,電子書,以及智能玩具和便攜式車載導(dǎo)航設(shè)備。
(4)服務(wù)器:提供計算服務(wù)的設(shè)備,服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務(wù)器和通用的計算機架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴展性、可管理性等方面要求較高。
(5)其他具有數(shù)據(jù)交互功能的電子設(shè)備。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實現(xiàn)上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。
為了描述的方便,描述以上裝置是以功能分為各種單元/模塊分別描述。當(dāng)然,在實施本發(fā)明時可以把各單元/模塊的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
通過以上的實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實施方式,但本發(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)。