1.一種攔截動(dòng)態(tài)庫(kù)注入的方法,適于防止外部程序?qū)⒑锌蓤?zhí)行代碼的外部動(dòng)態(tài)庫(kù)注入至本程序進(jìn)程,其特征在于,包括:
監(jiān)測(cè)本程序進(jìn)程中的目標(biāo)函數(shù);以及,前置處理如下步驟:
若所述目標(biāo)函數(shù)被系統(tǒng)動(dòng)態(tài)庫(kù)調(diào)用、且傳入外部動(dòng)態(tài)庫(kù)的文件名與預(yù)置文件名匹配,則拒絕調(diào)用所述目標(biāo)函數(shù)。
2.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,還包括:
對(duì)所述目標(biāo)函數(shù)進(jìn)行掛鉤,或者,在所述本程序進(jìn)程中對(duì)所述目標(biāo)函數(shù)進(jìn)行掛鉤;
所述監(jiān)測(cè)本程序進(jìn)程中的目標(biāo)函數(shù)包括:
若所述目標(biāo)函數(shù)被調(diào)用,則當(dāng)調(diào)用消息到達(dá)后、在調(diào)用所述目標(biāo)函數(shù)前,優(yōu)先執(zhí)行所述前置處理。
3.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,還包括:
若所述目標(biāo)函數(shù)的調(diào)用位置位于所述系統(tǒng)動(dòng)態(tài)庫(kù)的地址,則所述目標(biāo)函數(shù)被系統(tǒng)動(dòng)態(tài)庫(kù)調(diào)用。
4.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,還包括:
獲取所述系統(tǒng)動(dòng)態(tài)庫(kù)在本程序中的地址范圍及所述目標(biāo)函數(shù)的返回地址。
5.如權(quán)利要求4所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,所述獲取所述系統(tǒng)動(dòng)態(tài)庫(kù)在本程序中的地址范圍包括:使用GetModuleHandle系列函數(shù)獲??;
獲取所述目標(biāo)函數(shù)的返回地址包括:使用ReturnAddress函數(shù)獲取。
6.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,還包括:
寫(xiě)入所需要攔截的動(dòng)態(tài)庫(kù)文件名作為所述預(yù)置文件名。
7.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,所述目標(biāo)函數(shù)是在本程序進(jìn)程中被所述系統(tǒng)動(dòng)態(tài)庫(kù)調(diào)用函數(shù)主動(dòng)調(diào)用、并適于加載所述外部動(dòng)態(tài)庫(kù)的。
8.如權(quán)利要求7所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,所述調(diào)用函數(shù)為ClientLoadLibrary,所述目標(biāo)函數(shù)為L(zhǎng)oadLibraryExW。
9.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,還包括:
在拒絕調(diào)用所述目標(biāo)函數(shù)后繼續(xù)運(yùn)行本程序。
10.如權(quán)利要求1所述攔截動(dòng)態(tài)庫(kù)注入的方法,其特征在于,還包括:
若所述目標(biāo)函數(shù)并非被系統(tǒng)動(dòng)態(tài)庫(kù)調(diào)用和/或傳入外部動(dòng)態(tài)庫(kù)的文件名與預(yù)置文件名不一致,則將調(diào)用所述目標(biāo)函數(shù)的請(qǐng)求傳遞至操作系統(tǒng)。