HOOK消息钩子(linux钩子技术)
大致的過程是當系統I/O上發生一個事件時,系統捕獲該事件,并向指定的應用程序的消息隊列發送一個消息,應用程序從消息隊列中順次取出一個消息,交由系統調度相應的窗口回調程序進行消息處理。
這里可以看到,從OS捕捉到消息開始處理,到最后交還給OS調度回調函數,就像走了一個循環,我自己理解這也是為什么叫做“回調函數”的原因之一。接下來我們要進行的HOOK就是在上面的第二步和第三步之間進行的額外工作。
鉤子機制允許應用程序截獲(且或)處理window消息或特定事件。
鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。
可以把Hook理解為Windows操作系統消息處理機制的一個平臺;應用程序可以通過設置Hook對某個進程或窗口進行監視,即:對特定事件“掛鉤”;一旦預定義特定事件發生,Windows操作系統即會向鉤子hook發送通知消息,這時,應用程序可進行響應。
 **
Windows HOOK機制
**
HOOK(鉤子)的本質是一段用以處理系統消息的程序,通過系統調用,將其掛入到系統。鉤子的種類有很多,每一種鉤子負責截獲并處理相應的消息。鉤子機制允許應用程序截獲并處理發往指定窗口的消息或特定事件,其監視的窗口既可以是本進程內的也可以是由其他進程所創建的。在特定的消息發出并到達目的窗口之前,HOOK程序先行截獲此消息并得到對其的控制權。此時在鉤子函數中就可以對截獲的消息進行各種修改處理,甚至強行終止該消息的繼續傳遞。
鉤子的應用范圍非常廣泛,比如輸入監控、API攔截、消息捕獲、改變程序執行流程等方面。
 1、殺毒軟件會用Hook技術鉤住一些API函數,比如鉤住注冊表讀寫函數,從而防止病毒對注冊表進行寫入;
 2、病毒使用Hook技術有針對性的捕獲鍵盤的輸入,從而記錄用戶的密碼等敏感信息;
 3、文件加密系統通過Hook技術在不改變用戶操作的情況下對用戶的文件進行透明加密。
這些都屬于Hook范疇的知識。
每一個Hook都有一個與之相關聯的指針列表,稱之為鉤子鏈表,由系統來維護。這個列表的指針指向指定的,應用程序定義的,被Hook子程調用的回調函數,也就是該鉤子的各個處理子程序。當與指定的Hook類型關聯的消息發生時,系統就把這個消息傳遞到Hook子程。一些Hook子程可以只監視消息,或者修改消息,或者停止消息的前進,避免這些消息傳遞到下一個Hook子程或者目的窗口。最近安裝的鉤子放在鏈的開始,而最早安裝的鉤子放在最后,也就是后加入的先獲得控制權。
 Windows 并不要求鉤子子程的卸載順序一定得和安裝順序相反。每當有一個鉤子被卸載,Windows 便釋放其占用的內存,并更新整個Hook鏈表。如果程序安裝了鉤子,但是在尚未卸載鉤子之前就結束了,那么系統會自動為它做卸載鉤子的操作。
總結
以上是生活随笔為你收集整理的HOOK消息钩子(linux钩子技术)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 如何在C++中使用setiosflags
- 下一篇: 语音识别维特比解码_HMM连续语音识别中
