你知道,我是怎樣監(jiān)控你所有打開EXE的嗎

點擊上方藍字關(guān)注公眾號
A
技術(shù)應(yīng)用背景:
目前已知在殺毒廠商以及游戲廠商的安全對抗過程中,常常需要準確的監(jiān)控收集并進行檢測用戶創(chuàng)建打開的EXE應(yīng)用程序是否是安全的。同時也可以將此技術(shù)應(yīng)用于其他應(yīng)用的安全對抗方案中。那么如何去準確的監(jiān)控和收集用戶每次點擊打開的EXE應(yīng)用程序信息呢?接下來我就進行還原實現(xiàn)下如何準確的監(jiān)控并收集用戶每次點擊打開EXE應(yīng)用程序技術(shù)。
A
效果展示:
下圖展示的是開啟監(jiān)控程序,這是進行監(jiān)控電腦上包括系統(tǒng)自啟動EXE程序以及用戶主動點擊啟動應(yīng)用程序的信息。

A
功能代碼實現(xiàn):
實現(xiàn)監(jiān)控用戶所有創(chuàng)建打開EXE程序的數(shù)據(jù)需要以下幾個步驟:
1.通過調(diào)用CoInitializeEx函數(shù),進行對COM初始化。
2.通過調(diào)用 CoCreateInstance函數(shù), 獲得WMI的定位器。
3.通過調(diào)用IWbemLocator::ConnectServer函數(shù),并指定函數(shù)的參數(shù) strNetworkResource 的值為 "root\cimv2", 從而實現(xiàn)連接到 "IWbemServices"服務(wù)器。
4. 通過調(diào)用CoSetProxyBlanket函數(shù),進行設(shè)置 IWbemServices的代理,目的是為了WMI 服務(wù)能夠模擬客戶端角色。
5.通過調(diào)用 ExecNotificationQuery函數(shù), 來進行查詢接收事件。

下圖這部分代碼主要的目的是為了初始化COM和WMI的設(shè)置。

下面代碼主要實現(xiàn)查詢接收事件,也就是通過ExecNotificationQuery查詢來循環(huán)獲取用戶所創(chuàng)建打開的所有EXE的數(shù)據(jù)。

A
知識背景清單:
概述:WMI技術(shù)算得上是一個很古老的技術(shù),它是由微軟提供的,同時也是一種非常可靠的解決方案。WMI它還有一個非常大的優(yōu)勢,可以進行訪問遠程電腦。它是Windows操作系統(tǒng)中管理數(shù)據(jù)和操作的基礎(chǔ)模塊,它提供了一個通過操作系統(tǒng)、網(wǎng)絡(luò)和企業(yè)環(huán)境去管理本地或遠程計算機的統(tǒng)一接口集。

WMI技術(shù)可以應(yīng)用于:
查詢獲取正在運行進程信息;
查詢獲取正在運行線程信息;
查詢獲取桌面信息;
查詢獲取環(huán)境變量信息;
查詢獲取驅(qū)動信息;
查詢獲取文件夾信息;
查詢獲取系統(tǒng)信息和系統(tǒng)服務(wù);
查詢獲取硬件信息;
查詢獲取磁盤相關(guān)信息。
---
WMI相關(guān)概念
1.WBEM它的全稱:Web Based Enterprise Management(基于web的企業(yè)管理),它是一種行業(yè)規(guī)范,建立在企業(yè)網(wǎng)絡(luò)中訪問和共享管理信息的標(biāo)準。
2.WMI它的全稱:Windows Management Instrumentation(Windows管理工具),它是WBEM的Windows實現(xiàn),也就是它要遵守WBEM規(guī)則。通過WMI,我們可以獲取關(guān)于硬件和軟件的相關(guān)數(shù)據(jù),也可以提供關(guān)于硬件或軟件服務(wù)的數(shù)據(jù)給WMI。
3.COM 它的全稱:Component Object Model(組件對象模型),它是由微軟推出的一套接口規(guī)范,通過設(shè)定不同組件之間需要遵守的標(biāo)準與協(xié)議,主要用來跨語言、跨進程之間的模塊通信。
WMI相關(guān)函數(shù)
1.CoInitializeEx函數(shù)詳解

2. CoCreateInstance函數(shù)詳解

3. ConnectServer函數(shù)詳解

4. CoSetProxyBlanket函數(shù)詳解

5.ExecNotificationQuery函數(shù)詳解

WMI架構(gòu)解析
下圖的WMI架構(gòu)圖來源于MSDN,我們可以從架構(gòu)圖中很清晰的看到WMI主要分為3的層結(jié)構(gòu)。


1.WMI providersand Managed object(WMI提供者和管理對象)
WMI提供者是一個監(jiān)控一個或者多個的托管對象的COM接口。
托管對象是指邏輯或者物理組件,例如硬盤驅(qū)動器、網(wǎng)絡(luò)適配器、數(shù)據(jù)庫系統(tǒng)、操作系統(tǒng)、進程或者服務(wù)。
WMI提供者通過托管對象提供的數(shù)據(jù)向WMI服務(wù)提供數(shù)據(jù),同時將WMI服務(wù)的請求傳遞給托管對象。
WMI提供者是由實現(xiàn)邏輯的DLL和承載著描述數(shù)據(jù)和操作的類的托管對象格式MOF(Managed Object Format)文件組成。其中這個兩個文件都保存在\Windows\System32\wbem目錄下。


2.WMI Infrastructure(WMI基礎(chǔ)結(jié)構(gòu))
WMI的基礎(chǔ)結(jié)構(gòu)是Windows系統(tǒng)的系統(tǒng)組件。它主要包含兩個模塊:包含WMI Core(WMI核心)的WMI Service(WMI服務(wù))和WMI Repository(WMI存儲庫)。
WMI存儲庫是通過WMI Namespace(WMI命名空間)組織起來的。在系統(tǒng)啟動時,WMI服務(wù)會創(chuàng)建例如root\cimv2、root\default、root\subscription等等命名空間。
WMI服務(wù)扮演著WMi提供者、管理應(yīng)用和WMI存儲庫之間的協(xié)調(diào)者角色。一般來說,它是通過一個共享的服務(wù)進程svchost來實施工作的。當(dāng)?shù)谝粋€管理應(yīng)用向WMI命名空間發(fā)起連接時,WMI服務(wù)將會啟動。當(dāng)管理應(yīng)用不再調(diào)用WMI時,WMI服務(wù)將會關(guān)閉或者進入低內(nèi)存狀態(tài)。

3.WMI Consumers(WMI使用者)
它位于WMI構(gòu)架的最頂層,它是WMI技術(shù)使用的載體。對于使用C++代碼實現(xiàn)我們就可以直接通過COM技術(shù)直接與下層進行通信。對于.net平臺語言,則要使用System.Management域相關(guān)功能與下層進行通信。WMI的使用者,可以進行查詢、枚舉數(shù)據(jù),也可以運行Provider的方法,還可以向WMI訂閱消息。其中這些數(shù)據(jù)操作都是要有相應(yīng)的Provider來提供。

END


掃碼二維碼
獲取更多精彩
