一種注入動(dòng)態(tài)鏈接庫文件的方法、裝置及電子設(shè)備的制造方法【專利摘要】本發(fā)明的實(shí)施例公開一種注入動(dòng)態(tài)鏈接庫文件的方法、裝置及電子設(shè)備,涉及文件注入技術(shù),能夠提升動(dòng)態(tài)鏈接庫文件注入的成功率。方法包括:依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用加載模塊回調(diào)函數(shù);解析加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;讀取通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。本發(fā)明適用于對易被攔截的安全類動(dòng)態(tài)鏈接庫文件進(jìn)行注入。【專利說明】一種注入動(dòng)態(tài)鏈接庫文件的方法、裝置及電子設(shè)備
技術(shù)領(lǐng)域:
[0001]本發(fā)明涉及文件注入技術(shù),尤其涉及一種注入動(dòng)態(tài)鏈接庫文件的方法、裝置及電子設(shè)備?!?br>背景技術(shù):
】[0002]隨著計(jì)算機(jī)通信以及互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,電子設(shè)備的應(yīng)用越來越普遍,例如,智能移動(dòng)電話、個(gè)人數(shù)字助理、掌上電腦、筆記本電腦得到了越來越廣泛的應(yīng)用,電子設(shè)備中安裝的應(yīng)用程序(APP,Applicat1n)也越來越多,在Windows操作系統(tǒng)中,由于大量應(yīng)用程序并不是一個(gè)完整的可執(zhí)行(PE,PortableExecutable)文件,可以被分割成一個(gè)或多個(gè)相對獨(dú)立的動(dòng)態(tài)鏈接庫(DLL,DynamicLinkLibrary)文件,其中,DLL文件又可稱之為DLL模塊,以導(dǎo)入表的方式放置于Windows操作系統(tǒng)中,并在導(dǎo)入表中填充該DLL文件的導(dǎo)出函數(shù)的地址,當(dāng)執(zhí)行應(yīng)用程序的一個(gè)或多個(gè)應(yīng)用功能(加載)時(shí),相應(yīng)的進(jìn)程可以通過調(diào)用導(dǎo)入表,通過枚舉導(dǎo)入表中的每一DLL文件,調(diào)用windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù)完成DLL文件的自加載(注入)或遠(yuǎn)程注入。[0003]但隨著應(yīng)用程序提供的應(yīng)用功能的不斷增多,一些惡意應(yīng)用程序通過捆綁在惡意應(yīng)用程序中的病毒或木馬,可以對用戶正常的應(yīng)用程序的應(yīng)用功能進(jìn)行惡意攔截或阻止其加載,從而給操作系統(tǒng)或用戶帶來不便以及潛在的隱患。例如,由于現(xiàn)有技術(shù)是通過調(diào)用windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù)完成DLL文件的注入,因而,惡意應(yīng)用程序通過鉤住(Hook)windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù),從而在應(yīng)用程序通過自加載方法(調(diào)用windowsLoadLibrary函數(shù))或遠(yuǎn)程注入方法(調(diào)用windowsCreateRemoteThread函數(shù))注入惡意應(yīng)用程序設(shè)定的例如安全防護(hù)DLL文件、文件修復(fù)DLL文件、病毒查殺DLL文件等DLL文件時(shí),由預(yù)先設(shè)置的鉤住函數(shù)進(jìn)行處理,通過返回拒絕,從而導(dǎo)致應(yīng)用程序的DLL文件無法被注入,DLL文件的注入成功率較低,使得應(yīng)用程序?qū)?yīng)該DLL文件的應(yīng)用功能失效。不僅使得電子設(shè)備失去或關(guān)閉防御病毒入侵的功能,導(dǎo)致用戶電子設(shè)備的安全性下降,給電子設(shè)備的使用帶來安全隱患,還會造成用戶的物質(zhì)和財(cái)富損失。目前,還沒有一種有效的DLL文件注入方法,能夠有效避免由于惡意應(yīng)用程序的攔截而導(dǎo)致DLL文件無法加載的情況。因而,需要一種注入DLL文件的方法,可以采取相應(yīng)的措施,保障正常應(yīng)用程序的DLL文件加載不被惡意應(yīng)用程序攔截,以增強(qiáng)電子設(shè)備操作系統(tǒng)的安全性。注入DLL文件的方法的技術(shù)方案如下:【
發(fā)明內(nèi)容】[0004]有鑒于此,本發(fā)明實(shí)施例提供一種注入動(dòng)態(tài)鏈接庫文件的方法、裝置及電子設(shè)備,能夠保障應(yīng)用程序的動(dòng)態(tài)鏈接庫文件加載,提升動(dòng)態(tài)連接庫文件的注入成功率,以解決現(xiàn)有的注入動(dòng)態(tài)鏈接庫文件的方法易被攔截,不能加載動(dòng)態(tài)鏈接庫文件的問題。[0005]第一方面,本發(fā)明實(shí)施例提供一種注入動(dòng)態(tài)鏈接庫文件的方法,包括:[0006]依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0007]解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0008]讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0009]將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0010]在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。[0011]結(jié)合第一方面,在第一方面的第一種實(shí)施方式中,所述依據(jù)所述第二參數(shù)以及第三參數(shù)獲取通用導(dǎo)入表地址包括:[0012]獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程句柄;[0013]獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程映像地址;[0014]提取所述進(jìn)程映像地址中的所述進(jìn)程的映射基地址;[0015]依據(jù)所述進(jìn)程句柄以及所述進(jìn)程的映射基地址,獲取通用導(dǎo)入表地址。[0016]結(jié)合第一方面,在第一方面的第二種實(shí)施方式中,在所述提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件之后,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表之前,所述方法還包括:[0017]記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);[0018]依據(jù)所述通用導(dǎo)入表中一節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;[0019]調(diào)用內(nèi)存分配內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間。[0020]結(jié)合第一方面的第二種實(shí)施方式,在第一方面的第三種實(shí)施方式中,所述將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間包括:[0021]在所述更新通用表的所述待申請空間中,將所述提取的動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上;[0022]在所述更新通用表的所述通用導(dǎo)入表空間中,將所述通用導(dǎo)入表中動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上,得到更新通用表。[0023]結(jié)合第一方面,在第一方面的第四種實(shí)施方式中,在所述依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程之前,所述方法還包括:[0024]調(diào)用影像修改設(shè)置內(nèi)核函數(shù)注冊所述加載模塊回調(diào)函數(shù)。[0025]結(jié)合第一方面、第一方面的第一種至第四種任一實(shí)施方式,在第一方面的第五種實(shí)施方式中,在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件之后,所述方法還包括:[0026]利用所述更新通用表替換所述通用導(dǎo)入表并利用所述更新通用表地址替換所述通用導(dǎo)入表地址;[0027]在所述進(jìn)程退出運(yùn)行時(shí),調(diào)用預(yù)先設(shè)置的進(jìn)程創(chuàng)建退出回調(diào)函數(shù),調(diào)用所述通用導(dǎo)入表替換所述更新通用表,利用所述通用導(dǎo)入表地址替換所述更新通用表地址。[0028]結(jié)合第一方面的第五種實(shí)施方式,在第一方面的第六種實(shí)施方式中,調(diào)用創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)注入所述進(jìn)程創(chuàng)建退出回調(diào)函數(shù)。[0029]第二方面,本發(fā)明實(shí)施例提供一種注入動(dòng)態(tài)鏈接庫文件的裝置,包括:回調(diào)函數(shù)調(diào)用模塊、參數(shù)解析模塊、文件提取模塊、更新模塊以及文件加載模塊,其中,[0030]回調(diào)函數(shù)調(diào)用模塊,用于依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0031]參數(shù)解析模塊,用于解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0032]文件提取模塊,用于讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0033]更新模塊,用于將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0034]文件加載模塊,用于在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。[0035]結(jié)合第二方面,在第二方面的第一種實(shí)施方式中,所述參數(shù)解析模塊包括:函數(shù)解析單元、進(jìn)程句柄獲取單元、進(jìn)程映像地址獲取單元、基地址提取單元以及導(dǎo)入表地址獲取單元,其中,[0036]函數(shù)解析單元,用于解析所述加載模塊回調(diào)函數(shù);[0037]進(jìn)程句柄獲取單元,用于獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程句柄;[0038]進(jìn)程映像地址獲取單元,用于獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程映像地址;[0039]基地址提取單元,用于提取所述進(jìn)程映像地址中的所述進(jìn)程的映射基地址;[0040]導(dǎo)入表地址獲取單元,用于依據(jù)所述進(jìn)程句柄以及所述進(jìn)程的映射基地址,獲取通用導(dǎo)入表地址。[0041]結(jié)合第二方面,在第二方面的第二種實(shí)施方式中,所述裝置還包括:記錄模塊以及內(nèi)存申請模塊,其中,[0042]記錄模塊,用于記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);[0043]內(nèi)存計(jì)算模塊,用于依據(jù)所述通用導(dǎo)入表中一節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;[0044]內(nèi)存申請模塊,用于調(diào)用內(nèi)存分配內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間。[0045]結(jié)合第二方面的第二種實(shí)施方式,在第二方面的第三種實(shí)施方式中,所述更新模塊包括:第一填充單元以及第二填充單元,其中,[0046]第一填充單元,用于在所述更新通用表的所述待申請空間中,將所述提取的動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上;[0047]第二填充單元,用于在所述更新通用表的所述通用導(dǎo)入表空間中,將所述通用導(dǎo)入表中動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上,得到更新通用表。[0048]結(jié)合第二方面,在第二方面的第四種實(shí)施方式中,所述裝置還包括:[0049]注冊模塊,用于調(diào)用影像修改設(shè)置內(nèi)核函數(shù)注冊所述加載模塊回調(diào)函數(shù)。[0050]結(jié)合第二方面、第二方面的第一種至第四種任一實(shí)施方式,在第二方面的第五種實(shí)施方式中,所述裝置還包括:替換模塊以及退出處理模塊,其中,[0051]替換模塊,用于利用所述更新通用表替換所述通用導(dǎo)入表并利用所述更新通用表地址替換所述通用導(dǎo)入表地址;[0052]退出處理模塊,用于在所述進(jìn)程退出運(yùn)行時(shí),調(diào)用預(yù)先設(shè)置的進(jìn)程創(chuàng)建退出回調(diào)函數(shù),調(diào)用所述通用導(dǎo)入表替換所述更新通用表,利用所述通用導(dǎo)入表地址替換所述更新通用表地址。[0053]結(jié)合第二方面的第五種實(shí)施方式,在第二方面的第六種實(shí)施方式中,調(diào)用創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)注入所述進(jìn)程創(chuàng)建退出回調(diào)函數(shù)。[0054]第三方面,本發(fā)明實(shí)施例提供一種電子設(shè)備,所述電子設(shè)備包括:殼體、處理器、存儲器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲器設(shè)置在電路板上;電源電路,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲器用于存儲可執(zhí)行程序代碼;處理器通過讀取存儲器中存儲的可執(zhí)行程序代碼來運(yùn)行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行前述任一所述的注入動(dòng)態(tài)鏈接庫文件的方法。[0055]本發(fā)明實(shí)施例提供的一種注入動(dòng)態(tài)鏈接庫文件的方法、裝置及電子設(shè)備,通過依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。能夠保障應(yīng)用程序的動(dòng)態(tài)鏈接庫文件加載,提升動(dòng)態(tài)連接庫文件的注入成功率,以解決現(xiàn)有的注入動(dòng)態(tài)鏈接庫文件的方法易被攔截,不能加載動(dòng)態(tài)鏈接庫文件的問題?!靖綀D說明】[0056]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。[0057]圖1為本發(fā)明的實(shí)施例一注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖;[0058]圖2為通用導(dǎo)入表結(jié)構(gòu)不意圖;[0059]圖3為更新導(dǎo)入表結(jié)構(gòu)示意圖;[0060]圖4為本發(fā)明實(shí)施例二注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖;[0061]圖5為本發(fā)明實(shí)施例三注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖;[0062]圖6為本發(fā)明實(shí)施例四注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖;[0063]圖7為本發(fā)明實(shí)施例五注入動(dòng)態(tài)鏈接庫文件的裝置結(jié)構(gòu)示意圖;[0064]圖8為本發(fā)明電子設(shè)備一個(gè)實(shí)施例的結(jié)構(gòu)不意圖?!揪唧w實(shí)施方式】[0065]下面結(jié)合附圖對本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。[0066]應(yīng)當(dāng)明確,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0067]實(shí)施例一[0068]圖1為本發(fā)明的實(shí)施例一注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖,如圖1所示,本實(shí)施例的方法可以包括:[0069]步驟101,依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0070]本實(shí)施例中,針對現(xiàn)有通過調(diào)用windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù)完成DLL文件注入實(shí)現(xiàn)DLL文件加載,容易被一些應(yīng)用程序攔截的技術(shù)問題,提供一種新的在windows內(nèi)核層實(shí)現(xiàn)的DLL文件注入以及加載方法,以解決應(yīng)用程序鉤住windowsLoadLibrary函數(shù)以及windowsCreateRemoteThread函數(shù)的問題。[0071]本實(shí)施例中,操作系統(tǒng)接收動(dòng)態(tài)鏈接庫文件加載請求,在所述動(dòng)態(tài)鏈接庫文件加載請求中,包含有一個(gè)或多個(gè)待加載的DLL文件信息,操作系統(tǒng)依據(jù)動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程。[0072]步驟102,解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0073]本實(shí)施例中,在加載模塊回調(diào)函數(shù)中,第二個(gè)參數(shù)(第二參數(shù))用于記錄進(jìn)程句柄,第三個(gè)參數(shù)(第三參數(shù))用于記錄進(jìn)程映像地址(ImageInfo),依據(jù)第二參數(shù)和第三參數(shù)獲取通用導(dǎo)入表地址。其中,[0074]進(jìn)程映像地址為一結(jié)構(gòu)地址,保存有進(jìn)程的映射基地址(ImageBase),利用進(jìn)程的映射基地址(ImageBase)以及進(jìn)程句柄,就可得到PE文件格式的任意數(shù)據(jù),例如,可以得到通用導(dǎo)入表地址(ImportDesc)。在通用導(dǎo)入表地址(ImportDesc)對應(yīng)的通用導(dǎo)入表中,存儲有DLL文件的名稱、導(dǎo)出函數(shù)以及DLL文件數(shù)等信息,通用導(dǎo)入表地址(ImportDesc)是指向通用導(dǎo)入表中所有DLL文件的首地址。[0075]本實(shí)施例中,設(shè)置在通用導(dǎo)入表中,存儲應(yīng)用程序不愿進(jìn)行攔截或攻擊的DLL文件,因而,即使通過調(diào)用windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù)完成DLL文件注入及加載后,應(yīng)用程序通過鉤住所述windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù),也可以避免重要的DLL文件加載被攔截。[0076]作為一可選實(shí)施例,依據(jù)第二參數(shù)以及第三參數(shù)獲取通用導(dǎo)入表地址包括:[0077]獲取所述加載模塊回調(diào)函數(shù)的第二參數(shù)中的進(jìn)程句柄;[0078]獲取所述加載模塊回調(diào)函數(shù)的第三參數(shù)中的進(jìn)程映像地址;[0079]提取所述進(jìn)程映像地址中的所述進(jìn)程的映射基地址;[0080]依據(jù)所述進(jìn)程句柄以及所述進(jìn)程的映射基地址,獲取通用導(dǎo)入表地址。[0081]步驟103,讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0082]本實(shí)施例中,如果電子設(shè)備需要運(yùn)行應(yīng)用程序中的特定DLL文件,例如,安全防護(hù)DLL文件、文件修復(fù)DLL文件、病毒查殺DLL文件等易被應(yīng)用程序攻擊的DLL文件時(shí),通過在發(fā)起的動(dòng)態(tài)鏈接庫文件加載請求中包含相應(yīng)的DLL文件,加載模塊回調(diào)函數(shù)通過比對動(dòng)態(tài)鏈接庫文件加載請求中包含的DLL文件以及通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件,得到未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件。[0083]本實(shí)施例中,通用導(dǎo)入表包含有一個(gè)或多個(gè)形實(shí)轉(zhuǎn)換程序(Thunk)節(jié)點(diǎn),為一DLL文件的節(jié)點(diǎn),每一Thunk節(jié)點(diǎn)對應(yīng)一DLL文件。[0084]圖2為通用導(dǎo)入表結(jié)構(gòu)不意圖。參見圖2,包括多個(gè)Thunk,依據(jù)從通用導(dǎo)入表頂部至底部的順序,分別記為:Thunkl、Thunk2、Thunk3、…、Thunkn。[0085]本實(shí)施例中,一Thunk節(jié)點(diǎn)的結(jié)構(gòu)大小為一頂AGEJMPORT_DESCRIPTOR結(jié)構(gòu)大小,乘以通用導(dǎo)入表包含的Thunk節(jié)點(diǎn)數(shù),可以得到通用導(dǎo)入表在內(nèi)存空間的大小。[0086]步驟104,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0087]本實(shí)施例中,作為一可選實(shí)施例,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間包括:[0088]All,在所述更新通用表的待申請空間中,將所述提取的動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述(IMAGEJMP0RT_DESCRIPT0R)的Thunk上;[0089]本實(shí)施例中,動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)包括:動(dòng)態(tài)鏈接庫文件名稱、導(dǎo)出函數(shù)以及動(dòng)態(tài)鏈接庫文件基地址等信息。即在通用導(dǎo)入表頂部,構(gòu)建對應(yīng)所述提取的動(dòng)態(tài)鏈接庫文件數(shù)的空Thunk節(jié)點(diǎn),然后,將每一提取的動(dòng)態(tài)鏈接庫文件的填充數(shù)據(jù)至對應(yīng)的空Thunk節(jié)點(diǎn)中。[0090]A12,在所述更新通用表的通用導(dǎo)入表空間中,將所述通用導(dǎo)入表中動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為IMAGEJMP0RT_DESCRIPT0R的Thunk上,得到更新通用表。[0091]圖3為更新導(dǎo)入表結(jié)構(gòu)示意圖。參見圖3,在圖2的基礎(chǔ)上,還包含有提取的動(dòng)態(tài)鏈接庫文件對應(yīng)的Thunk,例如,MyDLLThunk。[0092]步驟105,在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。[0093]本實(shí)施例注入動(dòng)態(tài)鏈接庫文件的方法,通過依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。這樣,提出新的動(dòng)態(tài)鏈接庫注入方法,無需調(diào)用windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù)完成DLL文件注入實(shí)現(xiàn)DLL文件加載,而是在內(nèi)核層利用加載模塊回調(diào)函數(shù)實(shí)現(xiàn)動(dòng)態(tài)鏈接庫文件的注入,有利于動(dòng)態(tài)鏈接庫的加載不被預(yù)先設(shè)置的應(yīng)用程序攔截,有助保障正常應(yīng)用程序的DLL文件加載,有利于維護(hù)操作系統(tǒng)安全,增強(qiáng)電子設(shè)備操作系統(tǒng)的安全性,從而能夠/解決現(xiàn)有電子設(shè)備操作系統(tǒng)的安全性較低的技術(shù)問題。[0094]實(shí)施例二[0095]圖4為本發(fā)明實(shí)施例二注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖,如圖4所示,本實(shí)施例的方法可以包括:[0096]步驟401,調(diào)用影像修改設(shè)置內(nèi)核函數(shù)注冊所述加載模塊回調(diào)函數(shù)。[0097]本實(shí)施例中,作為一可選實(shí)施例,影像修改設(shè)置內(nèi)核函數(shù)為PsSetLoadImageNotifyRoutine內(nèi)核函數(shù)。[0098]本實(shí)施例中,在進(jìn)程加載DLL文件前調(diào)用加載模塊回調(diào)函數(shù),加載模塊回調(diào)函數(shù)用于修改進(jìn)程的通用導(dǎo)入表,在進(jìn)程啟動(dòng)時(shí),將新增DLL文件的信息節(jié)點(diǎn)寫入通用導(dǎo)入表,從而實(shí)現(xiàn)特定DLL文件的注入及加載。[0099]步驟402,依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0100]步驟403,解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0101]步驟404,讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0102]步驟405,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0103]步驟406,在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。[0104]本實(shí)施例中,步驟402至步驟406的過程分別和上述方法實(shí)施例一的步驟101至步驟105類似,此處不再贅述。[0105]本實(shí)施例中,調(diào)用PsSetLoadImageNotifyRoutine內(nèi)核函數(shù)注冊所述加載模塊回調(diào)函數(shù),明確了加載模塊回調(diào)函數(shù)的注冊過程。[0106]實(shí)施例三[0107]圖5為本發(fā)明實(shí)施例三注入動(dòng)態(tài)鏈接庫文件的方法流程示意圖,如圖5所示,本實(shí)施例的方法可以包括:[0108]步驟501,依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0109]步驟502,解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0110]步驟503,讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0111]本實(shí)施例中,步驟501至步驟503的過程分別和上述方法實(shí)施例一的步驟101至步驟103類似,此處不再贅述。[0112]步驟504,記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);[0113]步驟505,依據(jù)所述通用導(dǎo)入表中一Thunk節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;[0114]步驟506,調(diào)用內(nèi)存分配內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間;[0115]本實(shí)施例中,內(nèi)存分配內(nèi)核函數(shù)為ZwAl1cateVirtualMemory內(nèi)核函數(shù),每一Thunk節(jié)點(diǎn)占用的存儲空間為頂AGEJMP0RT_DESCRIPT0R結(jié)構(gòu)大小。將通用導(dǎo)入表占用的原有空間加上新增加的待申請空間,可以得到更新通用表在注入提取的動(dòng)態(tài)鏈接庫文件后所需的內(nèi)存空間大小,申請的更新通用表空間為待申請空間以及通用導(dǎo)入表空間的和。[0116]本實(shí)施例中,作為一可選實(shí)施例,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表的頂部,生成更新通用表。當(dāng)然,實(shí)際應(yīng)用中,也可以將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表的其他位置。[0117]步驟507,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0118]步驟508,在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。[0119]本實(shí)施例中,步驟507至步驟508的過程分別和上述方法實(shí)施例一的步驟104至步驟105類似,此處不再贅述。[0120]本實(shí)施例,通過記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);依據(jù)所述通用導(dǎo)入表中一節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;調(diào)用ZwAl1cateVirtualMemory內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間,可以達(dá)到更新通用導(dǎo)入表的效果。[0121]實(shí)施例四[0122]圖6為本發(fā)明實(shí)施例四注入動(dòng)態(tài)鏈接庫文件的方法的流程示意圖,如圖6所示,本實(shí)施例的方法可以包括:[0123]步驟601,依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0124]步驟602,解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0125]步驟603,讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0126]步驟604,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0127]步驟605,在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件;[0128]本實(shí)施例中,步驟601至步驟605的過程分別和上述方法實(shí)施例一的步驟101至步驟105類似,此處不再贅述[0129]步驟606,利用所述更新通用表替換所述通用導(dǎo)入表并利用所述更新通用表地址替換所述通用導(dǎo)入表地址;[0?3O]本實(shí)施例中,利用新的更新導(dǎo)入表的ImpοrtDesc替換舊的通用導(dǎo)入表的ImportDesc,將動(dòng)態(tài)鏈接庫文件總數(shù)增加I即可實(shí)現(xiàn)增加一MyDLL(動(dòng)態(tài)鏈接庫文件)的注入。[0131]步驟607,在所述進(jìn)程退出運(yùn)行時(shí),調(diào)用預(yù)先設(shè)置的進(jìn)程創(chuàng)建退出回調(diào)函數(shù),調(diào)用所述通用導(dǎo)入表替換所述更新通用表,利用所述通用導(dǎo)入表地址替換所述更新通用表地址。[0132]本實(shí)施例中,由于動(dòng)態(tài)鏈接庫文件注入是不經(jīng)過現(xiàn)有API函數(shù)(windowsLoadLibrary函數(shù)或windowsCreateRemoteThread函數(shù))實(shí)現(xiàn)的,是自主通過加載模塊回調(diào)函數(shù)實(shí)現(xiàn)動(dòng)態(tài)鏈接庫文件的注入,因而,操作系統(tǒng)并不知曉進(jìn)程多了一個(gè)或多個(gè)動(dòng)態(tài)鏈接庫文件(模塊),故在進(jìn)程退出時(shí),還需要應(yīng)用程序自行卸載該動(dòng)態(tài)鏈接庫文件(模塊)。[0133]本實(shí)施例中,作為一可選實(shí)施例,進(jìn)程創(chuàng)建退出回調(diào)函數(shù)為CreateProcessCalIback函數(shù)。[0134]本實(shí)施例中,在進(jìn)程創(chuàng)建或者退出時(shí),通過調(diào)用063七6?1'006880&1]^301^函數(shù),刪除更新導(dǎo)入表中新增加的動(dòng)態(tài)鏈接庫文件,并利用通用導(dǎo)入表的ImportDesc地址替換更新通用表的ImportDesc地址,將動(dòng)態(tài)鏈接庫文件總數(shù)減少I,從而實(shí)現(xiàn)動(dòng)態(tài)鏈接庫文件的卸載。[0135]作為一可選實(shí)施例,調(diào)用創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)注入所述進(jìn)程創(chuàng)建退出回調(diào)函數(shù)。其中,作為一可選實(shí)施例,創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)為PsSetCreateProcessNotifyRoutine內(nèi)核函數(shù)。[0136]本實(shí)施例,通過利用所述更新通用表替換所述通用導(dǎo)入表并利用所述更新通用表地址替換所述通用導(dǎo)入表地址;在所述進(jìn)程退出運(yùn)行時(shí),調(diào)用預(yù)先設(shè)置的進(jìn)程創(chuàng)建退出回調(diào)函數(shù),調(diào)用所述通用導(dǎo)入表替換所述更新通用表,利用所述通用導(dǎo)入表地址替換所述更新通用表地址??梢詫?shí)現(xiàn)動(dòng)態(tài)鏈接庫文件的卸載效果。[0137]實(shí)施例五[0138]圖7為本發(fā)明的實(shí)施例五注入動(dòng)態(tài)鏈接庫文件的裝置結(jié)構(gòu)示意圖,如圖7所示,本實(shí)施例的裝置可以包括:回調(diào)函數(shù)調(diào)用模塊71、參數(shù)解析模塊72、文件提取模塊73、更新模塊74以及文件加載模塊75,其中,[0139]回調(diào)函數(shù)調(diào)用模塊71,用于依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);[0140]本實(shí)施例中,操作系統(tǒng)接收動(dòng)態(tài)鏈接庫文件加載請求,在所述動(dòng)態(tài)鏈接庫文件加載請求中,包含有一個(gè)或多個(gè)待加載的DLL文件信息,操作系統(tǒng)依據(jù)動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程。[0141]參數(shù)解析模塊72,用于解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;[0142]本實(shí)施例中,在加載模塊回調(diào)函數(shù)中,第二參數(shù)用于記錄進(jìn)程句柄,第三參數(shù)用于記錄進(jìn)程映像地址(ImageInfo)。其中,[0?43]進(jìn)程映像地址為一結(jié)構(gòu)地址,保存有進(jìn)程的ImageBase,利用進(jìn)程的ImageBase以及進(jìn)程句柄,可以得到ImportDesc。在ImportDesc對應(yīng)的通用導(dǎo)入表中,存儲有DLL文件的名稱、導(dǎo)出函數(shù)以及DLL文件數(shù)等信息,ImportDesc是指向通用導(dǎo)入表中所有DLL文件的首地址。[0144]本實(shí)施例中,作為一可選實(shí)施例,參數(shù)解析模塊72包括:函數(shù)解析單元、進(jìn)程句柄獲取單元、進(jìn)程映像地址獲取單元、基地址提取單元以及導(dǎo)入表地址獲取單元(圖中未示出),其中,[0145]函數(shù)解析單元,用于解析所述加載模塊回調(diào)函數(shù);[0146]進(jìn)程句柄獲取單元,用于獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程句柄;[0147]進(jìn)程映像地址獲取單元,用于獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程映像地址;[0148]基地址提取單元,用于提取所述進(jìn)程映像地址中的所述進(jìn)程的映射基地址;[0149]導(dǎo)入表地址獲取單元,用于依據(jù)所述進(jìn)程句柄以及所述進(jìn)程的映射基地址,獲取通用導(dǎo)入表地址。[0150]文件提取模塊73,用于讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;[0151]本實(shí)施例中,加載模塊回調(diào)函數(shù)通過比對動(dòng)態(tài)鏈接庫文件加載請求中包含的DLL文件以及通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件,得到未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件。[0152]本實(shí)施例中,通用導(dǎo)入表包含有一個(gè)或多個(gè)Thunk節(jié)點(diǎn),為一DLL文件的節(jié)點(diǎn),每一Thunk節(jié)點(diǎn)對應(yīng)一DLL文件。[0153]更新模塊74,用于將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;[0154]本實(shí)施例中,作為一可選實(shí)施例,更新模塊74包括:第一填充單元以及第二填充單元(圖中未示出),其中,[0155]第一填充單元,用于在所述更新通用表的所述待申請空間中,將所述提取的動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上;[0156]第二填充單元,用于在所述更新通用表的所述通用導(dǎo)入表空間中,將所述通用導(dǎo)入表中動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上,得到更新通用表。[0157]本實(shí)施例中,動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)包括:動(dòng)態(tài)鏈接庫文件名稱、導(dǎo)出函數(shù)以及動(dòng)態(tài)鏈接庫文件基地址等信息。[0158]文件加載模塊75,用于在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。[0159]本實(shí)施例中,作為一可選實(shí)施例,該裝置還包括:[0160]注冊模塊76,用于調(diào)用影像修改設(shè)置內(nèi)核函數(shù)注冊所述加載模塊回調(diào)函數(shù)。[0161]本實(shí)施例中,作為一可選實(shí)施例,影像修改設(shè)置內(nèi)核函數(shù)為PsSetLoadImageNotifyRoutine內(nèi)核函數(shù)。[0162]作為另一可選實(shí)施例,該裝置還包括:記錄模塊77、內(nèi)存計(jì)算模塊78以及內(nèi)存申請模塊79,其中,[0163]記錄模塊77,用于記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);[0164]內(nèi)存計(jì)算模塊78,用于依據(jù)所述通用導(dǎo)入表中一節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;[0165]內(nèi)存申請模塊79,用于調(diào)用內(nèi)存分配內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間。[0166]本實(shí)施例中,內(nèi)存分配內(nèi)核函數(shù)為ZwAl1cateVirtualMemory內(nèi)核函數(shù),每一節(jié)點(diǎn)占用的存儲空間為頂AGEJMP0RT_DESCRIPT0R結(jié)構(gòu)大小,申請的更新通用表空間為待申請空間以及通用導(dǎo)入表空間的和。[0167]作為再一可選實(shí)施例,該裝置還包括:替換模塊70以及退出處理模塊80,其中,[0168]替換模塊70,用于利用所述更新通用表替換所述通用導(dǎo)入表并利用所述更新通用表地址替換所述通用導(dǎo)入表地址;[0169]退出處理模塊80,用于在所述進(jìn)程退出運(yùn)行時(shí),調(diào)用預(yù)先設(shè)置的進(jìn)程創(chuàng)建退出回調(diào)函數(shù),調(diào)用所述通用導(dǎo)入表替換所述更新通用表,利用所述通用導(dǎo)入表地址替換所述更新通用表地址。[0170]本實(shí)施例中,作為一可選實(shí)施例,調(diào)用創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)注入所述進(jìn)程創(chuàng)建退出回調(diào)函數(shù)。其中,創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)為PsSetCreateProcessNotifyRoutine內(nèi)核函數(shù),進(jìn)程創(chuàng)建退出回調(diào)函數(shù)為CreateProcessCalIback函數(shù)。[0171]本實(shí)施例的裝置,可以用于執(zhí)行圖1至圖6所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。[0172]需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。[0173]本說明書中的各個(gè)實(shí)施例均采用相關(guān)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。[0174]尤其,對于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。[0175]在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認(rèn)為是用于實(shí)現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實(shí)現(xiàn)在任何計(jì)算機(jī)可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計(jì)算機(jī)的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,〃計(jì)算機(jī)可讀介質(zhì)〃可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計(jì)算機(jī)可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個(gè)或多個(gè)布線的電連接部(電子裝置),便攜式計(jì)算機(jī)盤盒(磁裝置),隨機(jī)存取存儲器(RAM),只讀存儲器(ROM),可擦除可編輯只讀存儲器(EPR0M或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(CDR0M)。另外,計(jì)算機(jī)可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因?yàn)榭梢岳缤ㄟ^對紙或其他介質(zhì)進(jìn)行光學(xué)掃描,接著進(jìn)行編輯、解譯或必要時(shí)以其他合適方式進(jìn)行處理來以電子方式獲得所述程序,然后將其存儲在計(jì)算機(jī)存儲器中。[0176]應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。[0177]在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。例如,如果用硬件來實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來實(shí)現(xiàn):具有用于對數(shù)據(jù)信號實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。[0178]本發(fā)明實(shí)施例還提供一種電子設(shè)備,所述電子設(shè)備包含前述任一實(shí)施例所述的裝置。[0179]圖8為本發(fā)明電子設(shè)備一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,可以實(shí)現(xiàn)本發(fā)明圖1-7所示實(shí)施例的流程,如圖8所示,上述電子設(shè)備可以包括:殼體81、處理器82、存儲器83、電路板84和電源電路85,其中,電路板84安置在殼體81圍成的空間內(nèi)部,處理器82和存儲器83設(shè)置在電路板84上;電源電路85,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲器83用于存儲可執(zhí)行程序代碼;處理器82通過讀取存儲器83中存儲的可執(zhí)行程序代碼來運(yùn)行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行前述任一實(shí)施例所述的注入動(dòng)態(tài)鏈接庫文件的方法。[0180]處理器82對上述步驟的具體執(zhí)行過程以及處理器82通過運(yùn)行可執(zhí)行程序代碼來進(jìn)一步執(zhí)行的步驟,可以參見本發(fā)明圖1-6所示實(shí)施例的描述,在此不再贅述。[0181]該電子設(shè)備以多種形式存在,包括但不限于:[0182](I)移動(dòng)通信設(shè)備:這類設(shè)備的特點(diǎn)是具備移動(dòng)通信功能,并且以提供話音、數(shù)據(jù)通信為主要目標(biāo)。這類終端包括:智能手機(jī)(例如iPhone)、多媒體手機(jī)、功能性手機(jī),以及低端手機(jī)等。[0183](2)超移動(dòng)個(gè)人計(jì)算機(jī)設(shè)備:這類設(shè)備屬于個(gè)人計(jì)算機(jī)的范疇,有計(jì)算和處理功能,一般也具備移動(dòng)上網(wǎng)特性。這類終端包括:PDA、MID和UMPC設(shè)備等,例如iPad。[0184](3)便攜式娛樂設(shè)備:這類設(shè)備可以顯示和播放多媒體內(nèi)容。該類設(shè)備包括:音頻、視頻播放器(例如iPod),掌上游戲機(jī),電子書,以及智能玩具和便攜式車載導(dǎo)航設(shè)備。[0185](4)服務(wù)器:提供計(jì)算服務(wù)的設(shè)備,服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務(wù)器和通用的計(jì)算機(jī)架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴(kuò)展性、可管理性等方面要求較高。[0186](5)其他具有數(shù)據(jù)交互功能的電子設(shè)備。[0187]本
技術(shù)領(lǐng)域:
的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計(jì)算機(jī)可讀存儲介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。[0188]為了描述的方便,描述以上裝置是以功能分為各種單元/模塊分別描述。當(dāng)然,在實(shí)施本發(fā)明時(shí)可以把各單元/模塊的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。[0189]通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本[0190]發(fā)明可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。[0191]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(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)。【主權(quán)項(xiàng)】1.一種注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,包括:依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。2.根據(jù)權(quán)利要求1所述的注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,所述依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址包括:獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程句柄;獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程映像地址;提取所述進(jìn)程映像地址中的所述進(jìn)程的映射基地址;依據(jù)所述進(jìn)程句柄以及所述進(jìn)程的映射基地址,獲取通用導(dǎo)入表地址。3.根據(jù)權(quán)利要求1所述的注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,在所述提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件之后,將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表之前,所述方法還包括:記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);依據(jù)所述通用導(dǎo)入表中一節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;調(diào)用內(nèi)存分配內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間。4.根據(jù)權(quán)利要求3所述的注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,所述將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間包括:在所述更新通用表的所述待申請空間中,將所述提取的動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上;在所述更新通用表的所述通用導(dǎo)入表空間中,將所述通用導(dǎo)入表中動(dòng)態(tài)鏈接庫文件對應(yīng)的數(shù)據(jù)依序填充至結(jié)構(gòu)為映像輸入描述的形實(shí)轉(zhuǎn)換程序節(jié)點(diǎn)上,得到更新通用表。5.根據(jù)權(quán)利要求1所述的注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,在所述依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程之前,所述方法還包括:調(diào)用影像修改設(shè)置內(nèi)核函數(shù)注冊所述加載模塊回調(diào)函數(shù)。6.根據(jù)權(quán)利要求1至5任一項(xiàng)所述的注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件之后,所述方法還包括:利用所述更新通用表替換所述通用導(dǎo)入表并利用所述更新通用表地址替換所述通用導(dǎo)入表地址;在所述進(jìn)程退出運(yùn)行時(shí),調(diào)用預(yù)先設(shè)置的進(jìn)程創(chuàng)建退出回調(diào)函數(shù),調(diào)用所述通用導(dǎo)入表替換所述更新通用表,利用所述通用導(dǎo)入表地址替換所述更新通用表地址。7.根據(jù)權(quán)利要求6所述的注入動(dòng)態(tài)鏈接庫文件的方法,其特征在于,調(diào)用創(chuàng)建進(jìn)程通知設(shè)置內(nèi)核函數(shù)注入所述進(jìn)程創(chuàng)建退出回調(diào)函數(shù)。8.—種注入動(dòng)態(tài)鏈接庫文件的裝置,其特征在于,包括:回調(diào)函數(shù)調(diào)用模塊、參數(shù)解析模塊、文件提取模塊、更新模塊以及文件加載模塊,其中,回調(diào)函數(shù)調(diào)用模塊,用于依據(jù)接收的動(dòng)態(tài)鏈接庫文件加載請求分配進(jìn)程,調(diào)用記錄有所述進(jìn)程的加載模塊回調(diào)函數(shù);參數(shù)解析模塊,用于解析所述加載模塊回調(diào)函數(shù),依據(jù)所述加載模塊回調(diào)函數(shù)的參數(shù)獲取通用導(dǎo)入表地址;文件提取模塊,用于讀取所述通用導(dǎo)入表地址對應(yīng)的通用導(dǎo)入表,從所述動(dòng)態(tài)鏈接庫文件加載請求包含的動(dòng)態(tài)鏈接庫文件中,提取未存儲在所述通用導(dǎo)入表中的動(dòng)態(tài)鏈接庫文件;更新模塊,用于將提取的動(dòng)態(tài)鏈接庫文件寫入所述通用導(dǎo)入表,生成更新通用表,寫入至所述進(jìn)程的內(nèi)存空間;文件加載模塊,用于在所述內(nèi)存空間中加載所述更新通用表中的動(dòng)態(tài)鏈接庫文件。9.根據(jù)權(quán)利要求8所述的注入動(dòng)態(tài)鏈接庫文件的裝置,其特征在于,所述參數(shù)解析模塊包括:函數(shù)解析單元、進(jìn)程句柄獲取單元、進(jìn)程映像地址獲取單元、基地址提取單元以及導(dǎo)入表地址獲取單元,其中,函數(shù)解析單元,用于解析所述加載模塊回調(diào)函數(shù);進(jìn)程句柄獲取單元,用于獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程句柄;進(jìn)程映像地址獲取單元,用于獲取所述加載模塊回調(diào)函數(shù)的參數(shù)中的進(jìn)程映像地址;基地址提取單元,用于提取所述進(jìn)程映像地址中的所述進(jìn)程的映射基地址;導(dǎo)入表地址獲取單元,用于依據(jù)所述進(jìn)程句柄以及所述進(jìn)程的映射基地址,獲取通用導(dǎo)入表地址。10.根據(jù)權(quán)利要求8所述的注入動(dòng)態(tài)鏈接庫文件的裝置,其特征在于,所述裝置還包括:記錄模塊以及內(nèi)存申請模塊,其中,記錄模塊,用于記錄提取的動(dòng)態(tài)鏈接庫文件數(shù);內(nèi)存計(jì)算模塊,用于依據(jù)所述通用導(dǎo)入表中一節(jié)點(diǎn)占用的存儲空間,計(jì)算所述提取的動(dòng)態(tài)鏈接庫文件數(shù)與所述存儲空間的乘積,得到待申請空間;內(nèi)存申請模塊,用于調(diào)用內(nèi)存分配內(nèi)核函數(shù),在所述進(jìn)程的內(nèi)存空間上為所述更新通用表申請包含所述待申請空間以及通用導(dǎo)入表空間的更新通用表空間。【文檔編號】G06F9/445GK105955762SQ201610244973【公開日】2016年9月21日【申請日】2016年4月19日【發(fā)明人】李文靖【申請人】北京金山安全軟件有限公司