更多信息請訪問:考試吧計算機類論壇
基本概念
鉤子(Hook),是Windows消息處理機制的一個平臺,應(yīng)用程序可以在上面設(shè)置子程以監(jiān)視指定窗口的某種消息,而且所監(jiān)視的窗口可以是其他進程所創(chuàng)建的。當消息到達后,在目標窗口處理函數(shù)之前處理它。鉤子機制允許應(yīng)用程序截獲處理window消息或特定事件。
鉤子實際上是一個處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當特定的消息發(fā)出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強制結(jié)束消息的傳遞。
常見的Hook應(yīng)用很多,如現(xiàn)在的木馬盜號程序、網(wǎng)絡(luò)防火墻、以及金山詞霸等都使用了這種技術(shù)。
下面,我主要談到我在解決最近的一個項目中用到的幾種Hook技術(shù)。
Hook手段1―――――替換IAT表
要了解IAT表,首先應(yīng)該了解Windows的PE文件格式,這里不再贅述。簡單的說,就是當一個進程加載另一個模塊之,建立起來的模塊內(nèi)的函數(shù)名與它在模塊內(nèi)相對地址的映射關(guān)系。如下圖: 函數(shù)A
0xb333
函數(shù)B
0x1234
Dll temp.dll
A
getProcAddress(B)
IAT表
主 進程
主進程加載temp.dll,就把在自己的IAT表中,映射A,加載的模塊名temp.dll,以及在temp.dll的代碼偏移量0xb333,我們想實現(xiàn)用函數(shù)B來替換函數(shù)A,則,只需要把IAT表中的0xb333替換為getProcAddrss(B), 即為getModuleAddress(void)+0x1234。
相關(guān)推薦:C++考試輔導(dǎo):內(nèi)存分配的五種方法的區(qū)別北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |