1.需要用到的函式
學過windows程式設計的應該都知道,windows的核心機制是訊息機制,訊息是作業系統告訴應用程式發生了什麼事情,比如當使用者移動了滑鼠或者按鍵後,作業系統會通知應用程式
實際上在windows下,我們可以監控作業系統傳送給另外乙個程序的訊息,然後決定對這個訊息怎麼處理,比如繼續傳送,或者改變訊息,或者不讓這個訊息發給應用程式,也可以讓應用程式處理完訊息後通知監控的程序 這些都依賴乙個api,setwindowshookex
hhook winapi setwindowshookex(2.擷取本程序的訊息_in_ int idhook,
_in_ hookproc lpfn,
_in_ hinstance hmod,
_in_ dword dwthreadid
);idhook就是我們要監控的訊息型別
lpfn是當我們收到這個訊息後,要交給哪個函式去處理,函式的型別是hookproc,這個函式定義在winuser.h裡面,原型是
typedef lresult (callback* hookproc)(int code, wparam wparam, lparam lparam);
hmod是我們函式所在模組,如果我們的函式是在dll裡面,那麼我們需要兩個api,乙個是loadlibrary,乙個是getprocaddress,前者對映乙個dll到我們的程序裡面,後者則是從乙個dll
返回我們所需要的函式
dwthreadid是我們要監視的執行緒id,如果是0的話就是系統鉤子,也就是我們監視的程序所有訊息都會獲取
詳細的解釋請參考msdn:
在我們擷取到監視的程序的訊息後,我們可以呼叫callnexthookex來將訊息繼續傳遞,當然也可以選擇不讓訊息繼續傳遞,如果我們不喜歡將該訊息傳遞給監視的程序,就在函式裡面return 1
,如果要把他傳送給監視的程序,就return 0
1.建立專案
我們用vs建立乙個win32專案,這樣就預設給我們建立了乙個接收訊息的視窗,具體過程如下 (vs2008環境下):
檔案->新建專案->選擇win32專案,並且輸入名稱->點選確定
進入嚮導後,直接點選完成,這樣就建立了乙個win32的預設專案,當然為了除錯方便,我們需要對一些設定進行更改
選中專案的屬性,選擇配置屬性->鏈結器->系統->子系統,選擇控制台
這樣做的目的是為了方便我們可以直接利用cout輸出除錯資訊
2.進行設定,方便除錯
設定完成後編譯會無法通過,因為win32專案預設main函式跟c++的main函式不一樣,所以我們需要對main函式進行改造,將函式原型改成c++的預設形式後,通過getmodulehandle獲得本程序的hinstance,就可以了
接下來我們在windows的訊息處理函式裡面增加處理keyboard的**:
casewm_keydown:
printf(
"按下按鍵\n");
break;
接下來只要在程式開頭呼叫我們的函式:
lresult callback keyboardproc(intncodec,wparam wparam,lparam lparam)
void
sethook(hinstance hmoudle)
在程式呼叫sethook後,就能攔截到我們程序的鍵盤訊息
對於擷取本程序的訊息,**並不複雜,10+行的**就能攔截本程序的鍵盤訊息,訊息型別很多種,還有debug訊息,mouse訊息等,都可以進行攔截
windows 黑客程式設計基礎技術
基礎技術 monday,february 3,2020 3 27 pm 1.介紹 研發時通常會使用第三方庫,但並非所有的第三方庫都會提供靜態庫,大多數會提供動態鏈結庫 dll。dll延遲載入優點是將必須的 dll檔案以資源檔案的形式插入到程式中。在正式呼叫到必須的dll之前,程式都可以正常執行。程式...
Windows黑客程式設計基礎 一 系統服務
windows黑客程式設計基礎 一 系統服務 songnianhu 163.com 部落格 blog.csdn.net shangguanwaner 前兩天和乙個同學聊天,他念的是xx大學計算機專業,他向我抱怨說天天在學校學的東西好象都沒什麼用,對hacker程式設計倒頗有興趣,就是不知到從何學起。...
Windows黑客程式設計基礎 一 系統服務
windows黑客程式設計基礎 一 系統服務 songnianhu 163.com 部落格 blog.csdn.net shangguanwaner 前兩天和乙個同學聊天,他念的是xx大學計算機專業,他向我抱怨說天天在學校學的東西好象都沒什麼用,對hacker程式設計倒頗有興趣,就是不知到從何學起。...