亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種動態(tài)鏈接庫的注入方法及裝置的制造方法

文檔序號:10488770閱讀:215來源:國知局
一種動態(tài)鏈接庫的注入方法及裝置的制造方法
【專利摘要】本發(fā)明涉及一種鏈接庫注入方法及裝置,尤其是涉及一種動態(tài)鏈接庫的注入方法及裝置。該注入方法及裝置不通過調(diào)用Windows的LoadLibrary函數(shù)來加載動態(tài)鏈接庫,而使用遠(yuǎn)程內(nèi)存讀寫的方式加載一個動態(tài)鏈接庫,從而不會留下注入的痕跡,導(dǎo)致游戲檢測不到此模塊,從而繞過游戲的反外掛檢測。
【專利說明】
一種動態(tài)鏈接庫的注入方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及一種鏈接庫注入方法及裝置,尤其是涉及一種動態(tài)鏈接庫的注入方法及裝置。
【背景技術(shù)】
[0002]目前,直播軟件都是通過hook進程中的d3d9.dll的Present函數(shù)來獲取顯卡的顯示內(nèi)容,然后把顯示內(nèi)容通過網(wǎng)絡(luò)發(fā)送到服務(wù)端就可以實現(xiàn)直播了。目前的hook技術(shù)都是在所要hook的函數(shù)前面插粧。插粧就是把所要hook的函數(shù)頭的匯編代碼修改成jmp指令跳轉(zhuǎn)到自己的函數(shù),然后自己函數(shù)調(diào)用完后還原修改處的代碼,然后再跳轉(zhuǎn)到原先的所要hook的函數(shù)。此方法的實現(xiàn)需要修改d3d9.d11的代碼。
[0003]但是目前很多游戲尤其是第一人稱射擊類游戲(First-person shooting game,F(xiàn)PS)類型的游戲存在“外掛”,并且“外掛”功能的實現(xiàn)也會去修改d3d9.dll的代碼,所以這樣會導(dǎo)致游戲開發(fā)商尤其是FPS類型的游戲會對d3d9.dll的代碼完整性進行檢測,如果檢測到有代碼被修改則會認(rèn)定是外掛,游戲會被踢下線?!巴鈷臁辈粌H會hook Present函數(shù),還會對游戲數(shù)據(jù)進行修改,是一種不合法的調(diào)用,而直播軟件只會hookPresent函數(shù)從而獲取直播的顯示內(nèi)容,而不會對游直播數(shù)據(jù)做任何修改,是一種合法的調(diào)用,不應(yīng)該被視作非法調(diào)用。

【發(fā)明內(nèi)容】

[0004]本發(fā)明主要是解決現(xiàn)有技術(shù)所存在的動態(tài)鏈接庫容易被檢測到,從而導(dǎo)致游戲難以正常運行的技術(shù)問題,提供了一種動態(tài)鏈接庫的注入方法及裝置。該注入方法及裝置通過在目標(biāo)進程中分配可執(zhí)行空間并自加載需要注入的動態(tài)鏈接庫,不使用Windows的Load I ibrary,所以無法通過Windows的API檢測到此動態(tài)鏈接庫的存在。
[0005 ]為了解決上述問題,根據(jù)本發(fā)明的一個方面,
[0006]—種動態(tài)鏈接庫的注入方法,其特征在于,包括:
[0007]動態(tài)鏈接庫加載步驟,用于將動態(tài)鏈接庫加載到目標(biāo)進程的內(nèi)存空間中;
[0008]初始化函數(shù)注入步驟,用于將動態(tài)鏈接庫初始化函數(shù)加載至目標(biāo)進程的內(nèi)存空間中;所述動態(tài)鏈接庫初始化函數(shù)用于修復(fù)動態(tài)鏈接庫的重定位表及導(dǎo)入表并且調(diào)用動態(tài)鏈接庫的安全傳輸層協(xié)議初始化表及入口函數(shù);
[0009]動態(tài)鏈接庫映射步驟,用于將已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址;
[0010]動態(tài)鏈接庫隱藏步驟,用于抹去已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫信息,所述動態(tài)鏈接庫信息包括動態(tài)鏈接庫的名字。
[0011 ]優(yōu)選的,所述動態(tài)鏈接庫加載步驟包括以下子步驟:
[0012]句柄獲取子步驟,用于獲取目標(biāo)進程的句柄,并通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待注入動態(tài)鏈接庫的第一內(nèi)存空間;
[0013]映射加載子步驟,用于解析動態(tài)鏈接庫的各個區(qū)段,將各個區(qū)段獨立拷貝至第一內(nèi)存空間中,同時將各區(qū)段所占用的內(nèi)存單元的屬性修改為對應(yīng)區(qū)段的屬性。
[0014]優(yōu)選的,所述初始化函數(shù)注入步驟中通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待動態(tài)鏈接庫初始化函數(shù)的第二內(nèi)存空間;并且,所述動態(tài)鏈接庫初始化函數(shù)包括:
[0015]重定位表修復(fù)步驟,用于通過動態(tài)鏈接庫的格式獲取其重定位區(qū)段,然后按照各區(qū)段在目標(biāo)進程中加載的實際地址修復(fù)動態(tài)鏈接庫的重定位表;
[0016]導(dǎo)入表修復(fù)步驟,通過動態(tài)鏈接庫的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實函數(shù)地址進行填充;
[0017]初始化表調(diào)用步驟,用于調(diào)用動態(tài)鏈接庫的TLS初始化表;
[0018]入口函數(shù)調(diào)用步驟,用于調(diào)用動態(tài)鏈接庫的dllmain入口函數(shù)。
[0019]優(yōu)選的,所述動態(tài)鏈接庫映射步驟中通過創(chuàng)建一個入口函數(shù)地址為動態(tài)鏈接庫初始化函數(shù)入口地址的遠(yuǎn)程線程來將動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址。
[0020]優(yōu)選的,所述動態(tài)鏈接庫隱藏步驟中通過將動態(tài)鏈接庫的PE頭填充成O的方式抹去動態(tài)鏈接庫信息。
[0021 ] 一種動態(tài)鏈接庫的注入裝置,其特征在于,包括:
[0022]動態(tài)鏈接庫加載模塊,用于將動態(tài)鏈接庫加載到目標(biāo)進程的內(nèi)存空間中;
[0023]初始化函數(shù)注入模塊,用于將動態(tài)鏈接庫初始化函數(shù)加載至目標(biāo)進程的內(nèi)存空間中;所述動態(tài)鏈接庫初始化函數(shù)用于修復(fù)動態(tài)鏈接庫的重定位表及導(dǎo)入表并且調(diào)用動態(tài)鏈接庫的TLS初始化表及入口函數(shù);
[0024]動態(tài)鏈接庫映射模塊,用于將已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址;
[0025]動態(tài)鏈接庫隱藏模塊,用于抹去已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫信息,所述動態(tài)鏈接庫信息包括動態(tài)鏈接庫的名字。
[0026]在上述的一種動態(tài)鏈接庫的注入裝置,所述動態(tài)鏈接庫加載模塊進一步包括以下單元:
[0027]句柄獲取單元,用于獲取目標(biāo)進程的句柄,并通過VirtualAl1c函數(shù)在目標(biāo)進程中分配用于加載待注入動態(tài)鏈接庫的第一內(nèi)存空間;
[0028]映射加載單元,用于解析動態(tài)鏈接庫的各個區(qū)段,將各個區(qū)段獨立拷貝至第一內(nèi)存空間中,同時將各區(qū)段所占用的內(nèi)存單元的屬性修改為對應(yīng)區(qū)段的屬性。
[0029]優(yōu)選的,所述初始化函數(shù)注入模塊中通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待動態(tài)鏈接庫初始化函數(shù)的第二內(nèi)存空間;并且,所所述動態(tài)鏈接庫初始化函數(shù)包括:
[0030]重定位表修復(fù)單元,用于通過動態(tài)鏈接庫的格式獲取其重定位區(qū)段,然后按照各區(qū)段在目標(biāo)進程中加載的實際地址修復(fù)動態(tài)鏈接庫的重定位表;
[0031]導(dǎo)入表修復(fù)單元,通過動態(tài)鏈接庫的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實函數(shù)地址進行填充;
[0032 ]初始化表調(diào)用單元,用于調(diào)用動態(tài)鏈接庫的TLS初始化表;
[0033]入口函數(shù)調(diào)用單元,用于調(diào)用動態(tài)鏈接庫的dllmain入口函數(shù)。
[0034]優(yōu)選的,所述動態(tài)鏈接庫映射模塊中通過創(chuàng)建一個入口函數(shù)地址為動態(tài)鏈接庫初始化函數(shù)入口地址的遠(yuǎn)程線程來將動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址。
[0035]優(yōu)選的,所述動態(tài)鏈接庫隱藏模塊中通過將動態(tài)鏈接庫的PE頭填充成O的方式抹去動態(tài)鏈接庫信息。
[0036]因此,本發(fā)明通過在目標(biāo)進程中分配可執(zhí)行空間并自加載需要注入的動態(tài)鏈接庫,不使用Windows的Loadl ibrary,所以游戲無法通過Windows的API檢測到此動態(tài)鏈接庫的存在。
【附圖說明】
[0037]附圖1是本發(fā)明的系統(tǒng)連接結(jié)構(gòu)示意圖。
[0038]附圖2是本發(fā)明的方法流程示意圖。
【具體實施方式】
[0039]下面通過實施例,對本發(fā)明的技術(shù)方案作進一步具體的說明。
[0040]實施例:
[0041 ] 一種動態(tài)鏈接庫的注入方法,包括以下步驟:
[0042](I)獲取目標(biāo)進程(需要注入進程游戲)的句柄。
[0043](2)調(diào)用Windows函數(shù)VirtualAlloc在目標(biāo)進程中分配內(nèi)存空間,分配大小則是需要注入的動態(tài)鏈接庫的內(nèi)存大小。
[0044](3)將動態(tài)鏈接庫以映射的方式加載到分配的空間中,由于動態(tài)鏈接庫在磁盤中的對齊方式和在內(nèi)存的對齊方式不一致,所以需要去解析動態(tài)鏈接庫的各個區(qū)段,按照每個區(qū)段去獨立拷貝。并修改內(nèi)存屬性為對應(yīng)的每個區(qū)段的屬性。
[0045](4)調(diào)用Windows函數(shù)VirtualAlloc在目標(biāo)進程中分配內(nèi)存空間,這段內(nèi)存空間是一段本地函數(shù)代碼,主要用于初始化之前在目標(biāo)進程映射的動態(tài)鏈接庫。此段函數(shù)主要需要做如下事情:
[0046]①修復(fù)動態(tài)鏈接庫的重定位表:通過動態(tài)鏈接庫的格式獲取其重定位區(qū)段,然后按照實際在目標(biāo)進程中加載的地址進行修復(fù)。
[0047]②修復(fù)動態(tài)鏈接庫的導(dǎo)入表:通過動態(tài)鏈接庫的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實函數(shù)地址進行填充。
[0048]③調(diào)用動態(tài)鏈接庫的TLS初始化表。
[0049I④調(diào)用動態(tài)鏈接庫的入口函數(shù),即dllmain函數(shù)。
[0050](5)將上述(4)中的代碼拷貝到目標(biāo)進程中后,通過Windows函數(shù)調(diào)用CreateRemoteThread,在目標(biāo)進程中創(chuàng)建一個遠(yuǎn)程線程,入口函數(shù)地址填入(4)中的函數(shù)地址入口,從而將上述函數(shù)拷貝到目標(biāo)進程的起始地址。
[0051](6)將目標(biāo)進程映射的動態(tài)鏈接庫的PE頭填充成0,這樣就抹去了此動態(tài)鏈接庫的詳細(xì)信息,包括動態(tài)鏈接庫的名字。
[°°52] 從上述描述可知,本發(fā)明的創(chuàng)新點在于不通過調(diào)用Windows的LoadLibrary函數(shù)來加載動態(tài)鏈接庫,而使用遠(yuǎn)程內(nèi)存讀寫的方式加載一個動態(tài)鏈接庫,從而不會留下注入的痕跡,導(dǎo)致游戲檢測不到此模塊,從而繞過游戲的反外掛檢測。
[0053]本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。
【主權(quán)項】
1.一種動態(tài)鏈接庫的注入方法,其特征在于,包括: 動態(tài)鏈接庫加載步驟,用于將動態(tài)鏈接庫加載到目標(biāo)進程的內(nèi)存空間中; 初始化函數(shù)注入步驟,用于將動態(tài)鏈接庫初始化函數(shù)加載至目標(biāo)進程的內(nèi)存空間中;所述動態(tài)鏈接庫初始化函數(shù)用于修復(fù)動態(tài)鏈接庫的重定位表及導(dǎo)入表并且調(diào)用動態(tài)鏈接庫的安全傳輸層協(xié)議初始化表及入口函數(shù); 動態(tài)鏈接庫映射步驟,用于將已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址; 動態(tài)鏈接庫隱藏步驟,用于抹去已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫信息,所述動態(tài)鏈接庫信息包括動態(tài)鏈接庫的名字。2.根據(jù)權(quán)利要求1所述的一種動態(tài)鏈接庫的注入方法,其特征在于,所述動態(tài)鏈接庫加載步驟包括以下子步驟: 句柄獲取子步驟,用于獲取目標(biāo)進程的句柄,并通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待注入動態(tài)鏈接庫的第一內(nèi)存空間; 映射加載子步驟,用于解析動態(tài)鏈接庫的各個區(qū)段,將各個區(qū)段獨立拷貝至第一內(nèi)存空間中,同時將各區(qū)段所占用的內(nèi)存單元的屬性修改為對應(yīng)區(qū)段的屬性。3.根據(jù)權(quán)利要求1所述的一種動態(tài)鏈接庫的注入方法,其特征在于,所述初始化函數(shù)注入步驟中通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待動態(tài)鏈接庫初始化函數(shù)的第二內(nèi)存空間;并且,所述動態(tài)鏈接庫初始化函數(shù)包括: 重定位表修復(fù)步驟,用于通過動態(tài)鏈接庫的格式獲取其重定位區(qū)段,然后按照各區(qū)段在目標(biāo)進程中加載的實際地址修復(fù)動態(tài)鏈接庫的重定位表; 導(dǎo)入表修復(fù)步驟,通過動態(tài)鏈接庫的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實函數(shù)地址進行填充; 初始化表調(diào)用步驟,用于調(diào)用動態(tài)鏈接庫的TLS初始化表; 入口函數(shù)調(diào)用步驟,用于調(diào)用動態(tài)鏈接庫的dlImain入口函數(shù)。4.根據(jù)權(quán)利要求1所述的一種動態(tài)鏈接庫的注入方法,其特征在于,所述動態(tài)鏈接庫映射步驟中通過創(chuàng)建一個入口函數(shù)地址為動態(tài)鏈接庫初始化函數(shù)入口地址的遠(yuǎn)程線程來將動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址。5.根據(jù)權(quán)利要求1所述的一種動態(tài)鏈接庫的注入方法,其特征在于,所述動態(tài)鏈接庫隱藏步驟中通過將動態(tài)鏈接庫的PE頭填充成O的方式抹去動態(tài)鏈接庫信息。6.一種動態(tài)鏈接庫的注入裝置,其特征在于,包括: 動態(tài)鏈接庫加載模塊,用于將動態(tài)鏈接庫加載到目標(biāo)進程的內(nèi)存空間中; 初始化函數(shù)注入模塊,用于將動態(tài)鏈接庫初始化函數(shù)加載至目標(biāo)進程的內(nèi)存空間中;所述動態(tài)鏈接庫初始化函數(shù)用于修復(fù)動態(tài)鏈接庫的重定位表及導(dǎo)入表并且調(diào)用動態(tài)鏈接庫的TLS初始化表及入口函數(shù); 動態(tài)鏈接庫映射模塊,用于將已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址; 動態(tài)鏈接庫隱藏模塊,用于抹去已加載至目標(biāo)進程內(nèi)存空間中的動態(tài)鏈接庫信息,所述動態(tài)鏈接庫信息包括動態(tài)鏈接庫的名字。7.根據(jù)權(quán)利要求6所述的一種動態(tài)鏈接庫的注入裝置,其特征在于,所述動態(tài)鏈接庫加載模塊進一步包括以下單元: 句柄獲取單元,用于獲取目標(biāo)進程的句柄,并通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待注入動態(tài)鏈接庫的第一內(nèi)存空間; 映射加載單元,用于解析動態(tài)鏈接庫的各個區(qū)段,將各個區(qū)段獨立拷貝至第一內(nèi)存空間中,同時將各區(qū)段所占用的內(nèi)存單元的屬性修改為對應(yīng)區(qū)段的屬性。8.根據(jù)權(quán)利要求6所述的一種動態(tài)鏈接庫的注入裝置,其特征在于,所述初始化函數(shù)注入模塊中通過VirtualAlloc函數(shù)在目標(biāo)進程中分配用于加載待動態(tài)鏈接庫初始化函數(shù)的第二內(nèi)存空間;并且,所所述動態(tài)鏈接庫初始化函數(shù)包括: 重定位表修復(fù)單元,用于通過動態(tài)鏈接庫的格式獲取其重定位區(qū)段,然后按照各區(qū)段在目標(biāo)進程中加載的實際地址修復(fù)動態(tài)鏈接庫的重定位表; 導(dǎo)入表修復(fù)單元,通過動態(tài)鏈接庫的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實函數(shù)地址進行填充; 初始化表調(diào)用單元,用于調(diào)用動態(tài)鏈接庫的TLS初始化表; 入口函數(shù)調(diào)用單元,用于調(diào)用動態(tài)鏈接庫的dlImain入口函數(shù)。9.根據(jù)權(quán)利要求6所述的一種動態(tài)鏈接庫的注入裝置,其特征在于,所述動態(tài)鏈接庫映射模塊中通過創(chuàng)建一個入口函數(shù)地址為動態(tài)鏈接庫初始化函數(shù)入口地址的遠(yuǎn)程線程來將動態(tài)鏈接庫初始化函數(shù)拷貝到目標(biāo)進程的起始地址。10.根據(jù)權(quán)利要求1所述的一種動態(tài)鏈接庫的注入裝置,其特征在于,所述動態(tài)鏈接庫隱藏模塊中通過將動態(tài)鏈接庫的PE頭填充成O的方式抹去動態(tài)鏈接庫信息。
【文檔編號】G06F9/445GK105843640SQ201610160227
【公開日】2016年8月10日
【申請日】2016年3月21日
【發(fā)明人】周志剛
【申請人】武漢斗魚網(wǎng)絡(luò)科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1