程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> API Hook基本原理和實現

API Hook基本原理和實現

編輯:vc教程

hook是什麼?

windows系統下的,消息message的傳遞是貫穿其始終的。這個消息我們可以簡單理解為一個有特定意義的整數,正如我們看過的老故事片中的“長江長江,我是黃河”一個含義。windows中定義的消息給初學者的印象似乎是“不計其數”的,常見的一部分消息在winuser.h頭文件中定義。hook與消息有著非常密切的聯系,它的中文含義是“鉤子”,這樣理解起來我們不難得出“hook是消息處理中的一個環節,用於監控消息在系統中的傳遞,並在這些消息到達最終的消息處理過程前,處 理某些特定的消息”。這也是hook分為不同種類的原因。

hook的這個本領,使它能夠將自身的代碼“融入”被hook住的程序的進程中,成為目標進程的一個部分。我們也知道,在windows2000以後的系統中,普通用戶程序的進程空間都是獨立的,程序的運行彼此間都不受干擾。這就使我們希望通過一個程序改變其他程序的某些行為的想法不能直接實現,但是hook的出現給我們開拓了解決此類問題的道路。

api hook是什麼?

在windows系統下編程,應該會接觸到api函數的使用,常用的api函數大概有2000個左右。今天隨著控件,stl等高效編程技術的出現,api的使用概率在普通的用戶程序上就變得越來越小了。當諸如控件這些現成的手段不能實現的功能時,我們還需要借助api。最初有些人對某些api函數的功能不太滿意,就產生了如何修改這些api,使之更好的服務於程序的想法,這樣api hook就自然而然的出現了。我們可以通過api hook,改變一個系統api的原有功能。基本的方法就是通過hook“接觸”到需要修改的api函數入口點,改變它的地址指向新的自定義的函數。api hook並不屬於msdn上介紹的13類hook中的任何一種。所以說,api hook並不是什麼特別不同的hook,它也需要通過基本的hook提高自己的權限,跨越不同進程間訪問的限制,達到修改api函數地址的目的。對於自身進程空間下使用到的api函數地址的修改,是不需要用到api hook技術就可以實現的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved