本發(fā)明專利技術(shù)涉及一種鏈接庫(kù)注入方法及裝置,尤其是涉及一種動(dòng)態(tài)鏈接庫(kù)的注入方法及裝置。該注入方法及裝置不通過(guò)調(diào)用Windows的LoadLibrary函數(shù)來(lái)加載動(dòng)態(tài)鏈接庫(kù),而使用遠(yuǎn)程內(nèi)存讀寫的方式加載一個(gè)動(dòng)態(tài)鏈接庫(kù),從而不會(huì)留下注入的痕跡,導(dǎo)致游戲檢測(cè)不到此模塊,從而繞過(guò)游戲的反外掛檢測(cè)。
【技術(shù)實(shí)現(xiàn)步驟摘要】
【專利摘要】本專利技術(shù)涉及一種鏈接庫(kù)注入方法及裝置,尤其是涉及一種動(dòng)態(tài)鏈接庫(kù)的注入方法及裝置。該注入方法及裝置不通過(guò)調(diào)用Windows的LoadLibrary函數(shù)來(lái)加載動(dòng)態(tài)鏈接庫(kù),而使用遠(yuǎn)程內(nèi)存讀寫的方式加載一個(gè)動(dòng)態(tài)鏈接庫(kù),從而不會(huì)留下注入的痕跡,導(dǎo)致游戲檢測(cè)不到此模塊,從而繞過(guò)游戲的反外掛檢測(cè)。【專利說(shuō)明】一種動(dòng)態(tài)鏈接庫(kù)的注入方法及裝置
本專利技術(shù)涉及一種鏈接庫(kù)注入方法及裝置,尤其是涉及一種動(dòng)態(tài)鏈接庫(kù)的注入方法及裝置。
技術(shù)介紹
目前,直播軟件都是通過(guò)hook進(jìn)程中的d3d9.dll的Present函數(shù)來(lái)獲取顯卡的顯示內(nèi)容,然后把顯示內(nèi)容通過(guò)網(wǎng)絡(luò)發(fā)送到服務(wù)端就可以實(shí)現(xiàn)直播了。目前的hook技術(shù)都是在所要hook的函數(shù)前面插粧。插粧就是把所要hook的函數(shù)頭的匯編代碼修改成jmp指令跳轉(zhuǎn)到自己的函數(shù),然后自己函數(shù)調(diào)用完后還原修改處的代碼,然后再跳轉(zhuǎn)到原先的所要hook的函數(shù)。此方法的實(shí)現(xiàn)需要修改d3d9.d11的代碼。但是目前很多游戲尤其是第一人稱射擊類游戲(First-person shooting game,F(xiàn)PS)類型的游戲存在“外掛”,并且“外掛”功能的實(shí)現(xiàn)也會(huì)去修改d3d9.dll的代碼,所以這樣會(huì)導(dǎo)致游戲開(kāi)發(fā)商尤其是FPS類型的游戲會(huì)對(duì)d3d9.dll的代碼完整性進(jìn)行檢測(cè),如果檢測(cè)到有代碼被修改則會(huì)認(rèn)定是外掛,游戲會(huì)被踢下線。“外掛”不僅會(huì)hook Present函數(shù),還會(huì)對(duì)游戲數(shù)據(jù)進(jìn)行修改,是一種不合法的調(diào)用,而直播軟件只會(huì)hookPresent函數(shù)從而獲取直播的顯示內(nèi)容,而不會(huì)對(duì)游直播數(shù)據(jù)做任何修改,是一種合法的調(diào)用,不應(yīng)該被視作非法調(diào)用。
技術(shù)實(shí)現(xiàn)思路
本專利技術(shù)主要是解決現(xiàn)有技術(shù)所存在的動(dòng)態(tài)鏈接庫(kù)容易被檢測(cè)到,從而導(dǎo)致游戲難以正常運(yùn)行的技術(shù)問(wèn)題,提供了一種動(dòng)態(tài)鏈接庫(kù)的注入方法及裝置。該注入方法及裝置通過(guò)在目標(biāo)進(jìn)程中分配可執(zhí)行空間并自加載需要注入的動(dòng)態(tài)鏈接庫(kù),不使用Windows的Load I ibrary,所以無(wú)法通過(guò)Windows的API檢測(cè)到此動(dòng)態(tài)鏈接庫(kù)的存在。為了解決上述問(wèn)題,根據(jù)本專利技術(shù)的一個(gè)方面,—種動(dòng)態(tài)鏈接庫(kù)的注入方法,其特征在于,包括:動(dòng)態(tài)鏈接庫(kù)加載步驟,用于將動(dòng)態(tài)鏈接庫(kù)加載到目標(biāo)進(jìn)程的內(nèi)存空間中;初始化函數(shù)注入步驟,用于將動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)加載至目標(biāo)進(jìn)程的內(nèi)存空間中;所述動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)用于修復(fù)動(dòng)態(tài)鏈接庫(kù)的重定位表及導(dǎo)入表并且調(diào)用動(dòng)態(tài)鏈接庫(kù)的安全傳輸層協(xié)議初始化表及入口函數(shù);動(dòng)態(tài)鏈接庫(kù)映射步驟,用于將已加載至目標(biāo)進(jìn)程內(nèi)存空間中的動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)拷貝到目標(biāo)進(jìn)程的起始地址;動(dòng)態(tài)鏈接庫(kù)隱藏步驟,用于抹去已加載至目標(biāo)進(jìn)程內(nèi)存空間中的動(dòng)態(tài)鏈接庫(kù)信息,所述動(dòng)態(tài)鏈接庫(kù)信息包括動(dòng)態(tài)鏈接庫(kù)的名字。優(yōu)選的,所述動(dòng)態(tài)鏈接庫(kù)加載步驟包括以下子步驟:句柄獲取子步驟,用于獲取目標(biāo)進(jìn)程的句柄,并通過(guò)VirtualAlloc函數(shù)在目標(biāo)進(jìn)程中分配用于加載待注入動(dòng)態(tài)鏈接庫(kù)的第一內(nèi)存空間;映射加載子步驟,用于解析動(dòng)態(tài)鏈接庫(kù)的各個(gè)區(qū)段,將各個(gè)區(qū)段獨(dú)立拷貝至第一內(nèi)存空間中,同時(shí)將各區(qū)段所占用的內(nèi)存單元的屬性修改為對(duì)應(yīng)區(qū)段的屬性。優(yōu)選的,所述初始化函數(shù)注入步驟中通過(guò)VirtualAlloc函數(shù)在目標(biāo)進(jìn)程中分配用于加載待動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)的第二內(nèi)存空間;并且,所述動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)包括:重定位表修復(fù)步驟,用于通過(guò)動(dòng)態(tài)鏈接庫(kù)的格式獲取其重定位區(qū)段,然后按照各區(qū)段在目標(biāo)進(jìn)程中加載的實(shí)際地址修復(fù)動(dòng)態(tài)鏈接庫(kù)的重定位表;導(dǎo)入表修復(fù)步驟,通過(guò)動(dòng)態(tài)鏈接庫(kù)的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實(shí)函數(shù)地址進(jìn)行填充;初始化表調(diào)用步驟,用于調(diào)用動(dòng)態(tài)鏈接庫(kù)的TLS初始化表;入口函數(shù)調(diào)用步驟,用于調(diào)用動(dòng)態(tài)鏈接庫(kù)的dllmain入口函數(shù)。優(yōu)選的,所述動(dòng)態(tài)鏈接庫(kù)映射步驟中通過(guò)創(chuàng)建一個(gè)入口函數(shù)地址為動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)入口地址的遠(yuǎn)程線程來(lái)將動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)拷貝到目標(biāo)進(jìn)程的起始地址。優(yōu)選的,所述動(dòng)態(tài)鏈接庫(kù)隱藏步驟中通過(guò)將動(dòng)態(tài)鏈接庫(kù)的PE頭填充成O的方式抹去動(dòng)態(tài)鏈接庫(kù)信息。 一種動(dòng)態(tài)鏈接庫(kù)的注入裝置,其特征在于,包括:動(dòng)態(tài)鏈接庫(kù)加載模塊,用于將動(dòng)態(tài)鏈接庫(kù)加載到目標(biāo)進(jìn)程的內(nèi)存空間中;初始化函數(shù)注入模塊,用于將動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)加載至目標(biāo)進(jìn)程的內(nèi)存空間中;所述動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)用于修復(fù)動(dòng)態(tài)鏈接庫(kù)的重定位表及導(dǎo)入表并且調(diào)用動(dòng)態(tài)鏈接庫(kù)的TLS初始化表及入口函數(shù);動(dòng)態(tài)鏈接庫(kù)映射模塊,用于將已加載至目標(biāo)進(jìn)程內(nèi)存空間中的動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)拷貝到目標(biāo)進(jìn)程的起始地址;動(dòng)態(tài)鏈接庫(kù)隱藏模塊,用于抹去已加載至目標(biāo)進(jìn)程內(nèi)存空間中的動(dòng)態(tài)鏈接庫(kù)信息,所述動(dòng)態(tài)鏈接庫(kù)信息包括動(dòng)態(tài)鏈接庫(kù)的名字。在上述的一種動(dòng)態(tài)鏈接庫(kù)的注入裝置,所述動(dòng)態(tài)鏈接庫(kù)加載模塊進(jìn)一步包括以下單元:句柄獲取單元,用于獲取目標(biāo)進(jìn)程的句柄,并通過(guò)VirtualAl1c函數(shù)在目標(biāo)進(jìn)程中分配用于加載待注入動(dòng)態(tài)鏈接庫(kù)的第一內(nèi)存空間;映射加載單元,用于解析動(dòng)態(tài)鏈接庫(kù)的各個(gè)區(qū)段,將各個(gè)區(qū)段獨(dú)立拷貝至第一內(nèi)存空間中,同時(shí)將各區(qū)段所占用的內(nèi)存單元的屬性修改為對(duì)應(yīng)區(qū)段的屬性。優(yōu)選的,所述初始化函數(shù)注入模塊中通過(guò)VirtualAlloc函數(shù)在目標(biāo)進(jìn)程中分配用于加載待動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)的第二內(nèi)存空間;并且,所所述動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)包括:重定位表修復(fù)單元,用于通過(guò)動(dòng)態(tài)鏈接庫(kù)的格式獲取其重定位區(qū)段,然后按照各區(qū)段在目標(biāo)進(jìn)程中加載的實(shí)際地址修復(fù)動(dòng)態(tài)鏈接庫(kù)的重定位表;導(dǎo)入表修復(fù)單元,通過(guò)動(dòng)態(tài)鏈接庫(kù)的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照導(dǎo)入表需要的真實(shí)函數(shù)地址進(jìn)行填充;初始化表調(diào)用單元,用于調(diào)用動(dòng)態(tài)鏈接庫(kù)的TLS初始化表;入口函數(shù)調(diào)用單元,用于調(diào)用動(dòng)態(tài)鏈接庫(kù)的dllmain入口函數(shù)。優(yōu)選的,所述動(dòng)態(tài)鏈接庫(kù)映射模塊中通過(guò)創(chuàng)建一個(gè)入口函數(shù)地址為動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)入口地址的遠(yuǎn)程線程來(lái)將動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)拷貝到目標(biāo)進(jìn)程的起始地址。優(yōu)選的,所述動(dòng)態(tài)鏈接庫(kù)隱藏模塊中通過(guò)將動(dòng)態(tài)鏈接庫(kù)的PE頭填充成O的方式抹去動(dòng)態(tài)鏈接庫(kù)信息。因此,本專利技術(shù)通過(guò)在目標(biāo)進(jìn)程中分配可執(zhí)行空間并自加載需要注入的動(dòng)態(tài)鏈接庫(kù),不使用Windows的Loadl ibrary,所以游戲無(wú)法通過(guò)Windows的API檢測(cè)到此動(dòng)態(tài)鏈接庫(kù)的存在。【附圖說(shuō)明】附圖1是本專利技術(shù)的系統(tǒng)連接結(jié)構(gòu)示意圖。附圖2是本專利技術(shù)的方法流程示意圖。【具體實(shí)施方式】下面通過(guò)實(shí)施例,對(duì)本專利技術(shù)的技術(shù)方案作進(jìn)一步具體的說(shuō)明。實(shí)施例: 一種動(dòng)態(tài)鏈接庫(kù)的注入方法,包括以下步驟:(I)獲取目標(biāo)進(jìn)程(需要注入進(jìn)程游戲)的句柄。(2)調(diào)用Windows函數(shù)VirtualAlloc在目標(biāo)進(jìn)程中分配內(nèi)存空間,分配大小則是需要注入的動(dòng)態(tài)鏈接庫(kù)的內(nèi)存大小。(3)將動(dòng)態(tài)鏈接庫(kù)以映射的方式加載到分配的空間中,由于動(dòng)態(tài)鏈接庫(kù)在磁盤中的對(duì)齊方式和在內(nèi)存的對(duì)齊方式不一致,所以需要去解析動(dòng)態(tài)鏈接庫(kù)的各個(gè)區(qū)段,按照每個(gè)區(qū)段去獨(dú)立拷貝。并修改內(nèi)存屬性為對(duì)應(yīng)的每個(gè)區(qū)段的屬性。(4)調(diào)用Windows函數(shù)VirtualAlloc在目標(biāo)進(jìn)程中分配內(nèi)存空間,這段內(nèi)存空間是一段本地函數(shù)代碼,主要用于初始化之前在目標(biāo)進(jìn)程映射的動(dòng)態(tài)鏈接庫(kù)。此段函數(shù)主要需要做如下事情:①修復(fù)動(dòng)態(tài)鏈接庫(kù)的重定位表:通過(guò)動(dòng)態(tài)鏈接庫(kù)的格式獲取其重定位區(qū)段,然后按照實(shí)際在目標(biāo)進(jìn)程中加載的地址進(jìn)行修復(fù)。②修復(fù)動(dòng)態(tài)鏈接庫(kù)的導(dǎo)入表:通過(guò)動(dòng)態(tài)鏈接庫(kù)的格式獲取其導(dǎo)入?yún)^(qū)段,然后按照本文檔來(lái)自技高網(wǎng)...

【技術(shù)保護(hù)點(diǎn)】
一種動(dòng)態(tài)鏈接庫(kù)的注入方法,其特征在于,包括:動(dòng)態(tài)鏈接庫(kù)加載步驟,用于將動(dòng)態(tài)鏈接庫(kù)加載到目標(biāo)進(jìn)程的內(nèi)存空間中;初始化函數(shù)注入步驟,用于將動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)加載至目標(biāo)進(jìn)程的內(nèi)存空間中;所述動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)用于修復(fù)動(dòng)態(tài)鏈接庫(kù)的重定位表及導(dǎo)入表并且調(diào)用動(dòng)態(tài)鏈接庫(kù)的安全傳輸層協(xié)議初始化表及入口函數(shù);動(dòng)態(tài)鏈接庫(kù)映射步驟,用于將已加載至目標(biāo)進(jìn)程內(nèi)存空間中的動(dòng)態(tài)鏈接庫(kù)初始化函數(shù)拷貝到目標(biāo)進(jìn)程的起始地址;動(dòng)態(tài)鏈接庫(kù)隱藏步驟,用于抹去已加載至目標(biāo)進(jìn)程內(nèi)存空間中的動(dòng)態(tài)鏈接庫(kù)信息,所述動(dòng)態(tài)鏈接庫(kù)信息包括動(dòng)態(tài)鏈接庫(kù)的名字。
【技術(shù)特征摘要】
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:周志剛,
申請(qǐng)(專利權(quán))人:武漢斗魚網(wǎng)絡(luò)科技有限公司,
類型:發(fā)明
國(guó)別省市:湖北;42
還沒(méi)有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。