本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,更具體的說,是涉及一種注入DLL文件的方法及裝置。
背景技術(shù):
注入(Inject)是指將一段第三方邏輯代碼放置到應(yīng)用程序內(nèi)存中并執(zhí)行,目前業(yè)界普遍采用的第三方邏輯代碼多為DLL(Dynamic Link Library,動(dòng)態(tài)鏈接庫)文件,也即,目前業(yè)界普遍采用的是DLL注入技術(shù)?,F(xiàn)有技術(shù)中,各大安全廠商所使用的主流DLL注入技術(shù)主要包括注冊(cè)表注入DLL以及遠(yuǎn)程線程注入DLL。
但是,目前眾多的應(yīng)用程序客戶端發(fā)布后會(huì)對(duì)可執(zhí)行程序進(jìn)行加殼處理,而且,安裝應(yīng)用程序客戶端的終端設(shè)備上也多會(huì)安裝很多安全軟件。在這種情況下,注冊(cè)表注入DLL或者遠(yuǎn)程線程注入DLL容易被加殼后的應(yīng)用程序本身或者安全軟件識(shí)別并處理,導(dǎo)致DLL注入失敗。比如,很多游戲測(cè)試工具以及游戲外掛都是通過將DLL文件注入至游戲進(jìn)程中,執(zhí)行Hook代碼,Hook游戲函數(shù)或者系統(tǒng)函數(shù),從而達(dá)到監(jiān)控測(cè)試指標(biāo)或者關(guān)鍵數(shù)據(jù)的目的。但是,由于游戲客戶端的可執(zhí)行程序進(jìn)行了加殼處理,導(dǎo)致很多游戲測(cè)試工具以及游戲外掛無法將DLL文件注入至游戲進(jìn)程中,進(jìn)而導(dǎo)致無法監(jiān)控測(cè)試指標(biāo)或者關(guān)鍵數(shù)據(jù)。
基于以上所述,創(chuàng)建一套不受被加殼后的應(yīng)用程序本身或者安全軟件影響的DLL注入方法顯得尤為必要。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種注入DLL文件的方法及裝置,以克服現(xiàn)有技術(shù)中注冊(cè)表注入DLL或者遠(yuǎn)程線程注入DLL容易被加殼后的應(yīng)用程序本身或者安全軟件識(shí)別并處理,導(dǎo)致DLL注入失敗的問題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種注入DLL文件的方法,所述方法包括:
獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;
根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);
當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;
其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。
本發(fā)明實(shí)施例還提供一種注入DLL文件的裝置,所述裝置包括:
獲取模塊,用于獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;
判斷模塊,用于根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);
注入模塊,用于當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;
其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。
經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明提供了一種注入DLL文件的方法及裝置,獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。上述注入DLL文件的方法及裝置,不受被加殼后的應(yī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í)施例提供的一種注入DLL文件的方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的另一種注入DLL文件的方法的流程圖;
圖3為本發(fā)明實(shí)施例提供的一種將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝在WinSock目錄中的方法流程圖;
圖4為本發(fā)明實(shí)施例提供的注入DLL文件的方法的應(yīng)用例示意圖;
圖5為本發(fā)明實(shí)施例提供的一種注入DLL文件的裝置的結(jié)構(gòu)框圖;
圖6為本發(fā)明實(shí)施例提供的另一種注入DLL文件的裝置的結(jié)構(gòu)框圖;
圖7為本發(fā)明實(shí)施例提供的安裝模塊的結(jié)構(gòu)框圖;
圖8為本發(fā)明實(shí)施例提供的注入DLL文件的裝置的硬件結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例提供的注入DLL文件的方法的流程圖,參照?qǐng)D1,該方法可以包括:
步驟S100、獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息。
目標(biāo)應(yīng)用程序可以為安裝在用戶終端設(shè)備(如,電腦、手機(jī)等)上的任一需要聯(lián)網(wǎng)運(yùn)行的應(yīng)用程序,比如游戲類應(yīng)用程序,購物類應(yīng)用程序等等。用戶終端設(shè)備的操作系統(tǒng)可以獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息。
步驟S110、根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng),當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),執(zhí)行步驟S120,當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程未啟動(dòng)時(shí),執(zhí)行步驟S130。
用戶終端設(shè)備的操作系統(tǒng)獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息之后,能夠根據(jù)上述運(yùn)行狀態(tài)信息確定所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng)。
步驟S120、采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中。
在本實(shí)施例中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。
需要說明的是:操作系統(tǒng)的不同,操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制也不同,比如,當(dāng)所述操作系統(tǒng)為Windows操作系統(tǒng)時(shí),所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制則為L(zhǎng)SP(Layered Service Provider,分層服務(wù)提供商)的機(jī)制,LSP是Windows平臺(tái)的通信架構(gòu)WinSock(Windows Sockets,是操作系統(tǒng)提供的Windows操作系統(tǒng)應(yīng)用層的網(wǎng)絡(luò)通信架構(gòu)和規(guī)范的縮寫)中特有的一個(gè)機(jī)制?;诖?,其他操作系統(tǒng)的情況,也在本發(fā)明的保護(hù)范圍之內(nèi)。
步驟S130、判斷是否超時(shí),如果未超時(shí),則返回執(zhí)行步驟S110,如果超時(shí),則結(jié)束流程。
本實(shí)施例提供了一種注入DLL文件的方法,獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。上述注入DLL文件的方法,不受被加殼后的應(yīng)用程序本身或者安全軟件影響,注入成功率高。
基于圖1所示的注入DLL文件的方法,圖2示出了本發(fā)明實(shí)施例提供的另一種注入DLL文件的方法的流程圖,該方法可以包括如下步驟:
步驟S200、獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息。
步驟S210、根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng),當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),執(zhí)行步驟S220,當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程未啟動(dòng)時(shí),執(zhí)行步驟S230。
步驟S220、采用分層服務(wù)提供商LSP的機(jī)制將安裝在WinSock目錄中的目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中。
在本實(shí)施例中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足分層服務(wù)提供商LSP的規(guī)范的動(dòng)態(tài)鏈接庫DLL文件。
需要說明的是,若想要DLL文件符合LSP的規(guī)范,關(guān)鍵就是要在DLL文件中導(dǎo)出WSPStartup函數(shù)。在本實(shí)施例中,可以采用如下偽代碼實(shí)現(xiàn)上述關(guān)鍵技術(shù):
步驟S230、判斷是否超時(shí),如果未超時(shí),則返回執(zhí)行步驟S210,如果超時(shí),則結(jié)束流程。
可選的,在采用分層服務(wù)提供商LSP的機(jī)制將安裝在WinSock目錄中的目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中之前,還需將所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝在WinSock目錄中。
具體的,圖3示出了本發(fā)明實(shí)施例提供的一種將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝在WinSock目錄中的方法流程圖,該方法可以包括如下步驟:
步驟S300、獲取當(dāng)前安裝在WinSock目錄中的LSP鏈,所述LSP鏈中包括至少一個(gè)LSP;
步驟S310、將所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝至所述LSP鏈;
步驟S320、調(diào)整所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件在所述LSP鏈中的順序,使所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件在所述LSP鏈的最前端,以使所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件的調(diào)用優(yōu)先級(jí)高于所述至少一個(gè)LSP的調(diào)用優(yōu)先級(jí)。
在本實(shí)施例中,可以采用如下偽代碼實(shí)現(xiàn)上述將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝在WinSock目錄中的方法:
//獲取當(dāng)前協(xié)議鏈(LSP鏈)
pProtocolInfo=EnumerateProviders(eCatalog,&iTotalProtocols);
//為這些鏈條上的目錄分配空間,Alloc分配空間即可
pdwCatalogIdArray=(DWORD*)LspAlloc(sizeof(DWORD)*dwCatalogIdArrayCount,&rc);
//安裝所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件
InstallLsp()
//調(diào)整LSP鏈的順序,讓所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件優(yōu)先調(diào)用
WriteOrder()
由于LSP會(huì)被所有聯(lián)網(wǎng)的應(yīng)用程序加載,為了防止對(duì)其他非宿主進(jìn)程產(chǎn)生干擾,本發(fā)明提供了一種方式實(shí)現(xiàn)對(duì)宿主進(jìn)程進(jìn)行過濾,具體的,可在目標(biāo)動(dòng)態(tài)鏈接庫DLL文件的main函數(shù)中添加一段邏輯g_Processid=GetProcessID(GetCurrentProcess());將所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí)(如ID)進(jìn)行保存,并在所述采用分層服務(wù)提供商LSP的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中之后,獲取已經(jīng)啟動(dòng)的所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí);判斷所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí)與所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的宿主進(jìn)程的標(biāo)識(shí)是否一致;所述宿主進(jìn)程為適用于所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式的進(jìn)程;當(dāng)所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí)與所述宿主進(jìn)程的標(biāo)識(shí)一致時(shí),按照所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作;當(dāng)所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí)與所述宿主進(jìn)程的標(biāo)識(shí)不一致時(shí),則不按照所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作。
可選的,所述按照所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作,包括:
在所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中導(dǎo)出WSPStartup函數(shù);
執(zhí)行所述WSPStartup函數(shù)中記載的第三方Hook代碼。
可選的,在所述按照所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作之后,所述方法還包括:
獲取對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作生成的數(shù)據(jù);
輸出所述數(shù)據(jù)。
本發(fā)明實(shí)施例提供的注入DLL文件的方法的應(yīng)用例可以如下:
一游戲開發(fā)人員預(yù)先編好一個(gè)符合LSP規(guī)范的DLL文件,該文件注入一個(gè)游戲的進(jìn)程中后,可以測(cè)試該游戲的性能。
對(duì)用戶側(cè)來說,該游戲開發(fā)人員將Windows MFC技術(shù)編寫界面用于一個(gè)客戶端性能采集工具上,具體如圖4所示。當(dāng)該游戲開發(fā)人員需要用上述客戶端性能采集工具測(cè)試一個(gè)游戲的性能時(shí),只需開啟圖4所示的客戶端性能采集工具,并在目標(biāo)進(jìn)程列表中輸入待測(cè)試游戲的可執(zhí)行文件名稱(例如,***.exe),并點(diǎn)擊增加按鈕,此時(shí),目標(biāo)進(jìn)程列表中則包含了待測(cè)試游戲的進(jìn)程名稱,然后點(diǎn)擊開始記錄,即可實(shí)現(xiàn)對(duì)該游戲的性能測(cè)試。
對(duì)Windows操作系統(tǒng)側(cè)來說,Windows操作系統(tǒng)在獲取用戶點(diǎn)擊開始記錄的操作之后,將游戲開發(fā)人員預(yù)先編好的符合LSP規(guī)范的DLL文件安裝到Winsock目錄中,然后,獲取該游戲的運(yùn)行狀態(tài)信息,當(dāng)該游戲的運(yùn)行狀態(tài)信息表明該游戲的進(jìn)程已經(jīng)啟動(dòng)時(shí),則將游戲開發(fā)人員預(yù)先編好的符合LSP規(guī)范的DLL文件注入至該游戲的進(jìn)程中,注入之后,獲取該游戲進(jìn)程的ID,如果該ID與宿主進(jìn)程的ID一致,則執(zhí)行所述DLL文件中的第三方Hook代碼對(duì)該游戲進(jìn)行監(jiān)控,監(jiān)控結(jié)束之后,輸出性能參數(shù),如果該ID與宿主進(jìn)程的ID不一致,則不對(duì)該游戲進(jìn)行監(jiān)控。
下面對(duì)本發(fā)明實(shí)施例提供的注入DLL文件的裝置進(jìn)行介紹,下文描述的注入DLL文件的裝置可與上文注入DLL文件的方法相互對(duì)應(yīng)參照。
圖5為本發(fā)明實(shí)施例提供的注入DLL文件的裝置的結(jié)構(gòu)框圖,參照?qǐng)D5,該注入DLL文件的裝置可以包括:
獲取模塊10,用于獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;
判斷模塊11,用于根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);
注入模塊12,用于當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;
其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。
基于圖5所示的注入DLL文件的裝置,圖6示出了本發(fā)明實(shí)施例提供的另一種注入DLL文件的裝置的結(jié)構(gòu)框圖,該裝置可以包括:
獲取模塊20,用于獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;
判斷模塊21,用于根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);
安裝模塊22,用于將所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝在WinSock目錄中。
注入模塊23,用于采用分層服務(wù)提供商LSP的機(jī)制將安裝在WinSock目錄中的目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;
其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足分層服務(wù)提供商LSP的規(guī)范的動(dòng)態(tài)鏈接庫DLL文件。
可選的,圖7示出了安裝模塊的結(jié)構(gòu)框圖,參閱圖7,該安裝模塊具體包括:
LSP鏈獲取單元30,用于獲取當(dāng)前安裝在WinSock目錄中的LSP鏈,所述LSP鏈中包括至少一個(gè)LSP;
安裝單元31,用于將所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件安裝至所述LSP鏈;
調(diào)整單元32,用于調(diào)整所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件在所述LSP鏈中的順序,使所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件在所述LSP鏈的最前端,以使所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件的調(diào)用優(yōu)先級(jí)高于所述至少一個(gè)LSP的調(diào)用優(yōu)先級(jí)。
可選的,所述獲取模塊還用于,在所述采用分層服務(wù)提供商LSP的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中之后,獲取已經(jīng)啟動(dòng)的所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí);
則所述判斷模塊,還用于判斷所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí)與所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的宿主進(jìn)程的標(biāo)識(shí)是否一致;所述宿主進(jìn)程為適用于所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式的進(jìn)程;
所述裝置還包括:操作執(zhí)行模塊,用于當(dāng)所述目標(biāo)應(yīng)用程序的進(jìn)程的標(biāo)識(shí)與所述宿主進(jìn)程的標(biāo)識(shí)一致時(shí),按照所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作。
可選的,所述操作執(zhí)行模塊具體用于:
在所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中導(dǎo)出WSPStartup函數(shù);
執(zhí)行所述WSPStartup函數(shù)中記載的第三方Hook代碼。
可選的,所述獲取模塊還用于,在所述按照所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件中記載的操作方式對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作之后,獲取對(duì)所述目標(biāo)應(yīng)用程序的進(jìn)程進(jìn)行操作生成的數(shù)據(jù);輸出所述數(shù)據(jù)。
可選的,注入DLL文件的裝置可以為硬件設(shè)備,上文描述的模塊、單元可以設(shè)置于注入DLL文件的裝置內(nèi)的功能模塊。圖8示出了注入DLL文件的裝置的硬件結(jié)構(gòu)框圖,參照?qǐng)D8,登錄移動(dòng)游戲的裝置可以包括:處理器1,通信接口2,存儲(chǔ)器3和通信總線4;其中處理器1、通信接口2、存儲(chǔ)器3通過通信總線4完成相互間的通信;可選的,通信接口2可以為通信模塊的接口,如GSM模塊的接口;
處理器1,用于執(zhí)行程序;存儲(chǔ)器3,用于存放程序;程序可以包括程序代碼,所述程序代碼包括計(jì)算機(jī)操作指令;
處理器1可能是一個(gè)中央處理器CPU,或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路;存儲(chǔ)器3可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器。
其中,程序可具體用于:
獲取目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息;
根據(jù)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息判斷所述目標(biāo)應(yīng)用程序的進(jìn)程是否啟動(dòng);
當(dāng)所述目標(biāo)應(yīng)用程序的運(yùn)行狀態(tài)信息表示所述目標(biāo)應(yīng)用程序的進(jìn)程已經(jīng)啟動(dòng)時(shí),采用操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制將目標(biāo)動(dòng)態(tài)鏈接庫DLL文件注入所述目標(biāo)應(yīng)用程序的進(jìn)程中;
其中,所述目標(biāo)動(dòng)態(tài)鏈接庫DLL文件為滿足所述操作系統(tǒng)中負(fù)責(zé)所述目標(biāo)應(yīng)用程序的網(wǎng)絡(luò)訪問操作的機(jī)制的動(dòng)態(tài)鏈接庫DLL文件。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。