hook是什麼?
hook翻譯之後是鉤子的意思,hook的用途主要是用來攔截訊息的,看到這裡大家可能會迷茫,what is a hook?所以這時就不得不普及一下作業系統的原理。
舉個例子:假如你是一名遊戲熱衷者,在玩遊戲時,你要釋放技能那麼你就會對鍵盤滑鼠進行操作,表面上你是直接操作遊戲,其實中間經過了幾個環節。
首先,你操作鍵盤滑鼠,那麼計算機底層鍵盤滑鼠的驅動就會收到乙個訊息。
然後,這個驅動會把訊息傳個作業系統。
其次,作業系統會判斷這個訊息是作用在哪個程式上。
最後,作業系統會把這個事件傳給相應的程式,那麼,你就可以看到你操作遊戲的樣子了。
做自己的hook!
好!說了這些,大家想想假如你寫了乙個hook,在別人的電腦上攔截了這個訊息,作業系統就不知道這個訊息,你可以把這個訊息通過網路發到你的電腦,那個那台電腦的一舉一動你都清楚....(當然我教大家這個不是希望你們做壞事,而是同過hook更深入學習計算 機 和保護自己電腦),下面我來同過乙個簡單的程式來讓大家了解hook。
1這是一段簡單的程式,其功能是為了顯示乙個對話視窗。這個對話視窗作業系統已經幫我們寫好了,我們實際上是在呼叫這段**。好!大家想一下我們能不能在呼叫這個函式之前截斷這個呼叫,讓程式呼叫自己的函式。(想想做外掛程式是不是這個原理)答案是肯定的,我們能夠截斷這個訊息並讓他呼叫自己的函式。下面我們來**實現一下。intmain()
2
1這是我寫的乙個函式(注意:函式返回值和引數一定要和messagebox一樣,這樣介面才能對上,不然會報錯),我們要讓程式執行我們的函式,那麼我們就要寫乙個鉤子。intwinapi mymsg( hwnd hwnd,
2lpctstr iptext,
3lpctstr ipcaption,
4uint utype)
5
1我已經寫好了乙個鉤子,下面我放出完整程式的**bool
hook()2;
8//0xe9無條件跳轉(學過彙編的同學應該知道)
9 b[0] = 0xe9;10
//計算偏移位址。 偏移位址 = 跳轉位址-messagebox的位址
11 *(dword*)(b + 1) = (dword)mymsg - (dword)p - 5;12
/*通過上面三行**,這個陣列儲存的**意思是(無條件跳轉到我的函式位址位置)
*/13
14//
在計算位置的記憶體中寫入資料
15 writeprocessmemory(getcurrentprocess(), p, b, 5
, null);
16return1;
17 }
1 #include 2 #include 3首先我們把hook注釋掉執行。執行結果如下。4int
winapi mymsg( hwnd hwnd,
5lpctstr iptext,
6lpctstr ipcaption,
7uint utype)812
13bool
hook()14;
20//
0xe9無條件跳轉(學過彙編的同學應該知道)
21 b[0] = 0xe9;22
//計算偏移位址。 偏移位址 = 跳轉位址-messagebox的位址
23 *(dword*)(b + 1) = (dword)mymsg - (dword)p - 5;24
/*通過上面三行**,這個陣列儲存的**意思是(無條件跳轉到我的函式位址位置)
*/25
26//
在計算位置的記憶體中寫入資料
27 writeprocessmemory(getcurrentprocess(), p, b, 5
, null);
28return1;
29}30int
main()
31
如何加上hook,你會發現一件令人興奮的事情,並沒有彈出對話方塊。執行結果如下
通過這個例子相信大家對hook有了一些了解,現在大家肯能會有乙個疑問,我能跳轉,能不能回去呢,答案是能的。我也給大家提供乙個點思路readprocessmemory()用這個api來儲存原來的段位址和記憶體中的**,回去時在利用writeprocessmemory()再跳轉一次,就可以會到原來呼叫的**處了,這些是不是很棒,大家可以回家自行試驗,也可以鞏固一下今天所學的知識。
如果中間有什麼錯誤,還請高手能幫我指出。
Linux 你不能不知道的小知識
1.在命令列中開啟 display 2.在命令列中開啟pdf,word,ppt等 gnome open 或者xdg open 3.在命令列中開啟檔案的圖形介面 nautilus 4.游標掉轉終端命令的最前端 ctrl a 最後 ctrl e 去掉前乙個空格後面的命令 ctrl w 5.vim 沒有許...
關於unicode不能不知道的知識
在計算機出現的中後期,人們開發了unix,並為無重音英語字母開發了一套稱為ascii的編碼,它能夠使用32到127之間的數字表示各個字元,空格是32。由於那個時期生產的大多數計算機使用8位大小的位元組,因此使用者不僅可以存放所有可能的ascii字元,而且還有整整一位空餘下來。他們想可以把128 25...
你不能不知道的11個軟體測試步驟
第一步 評定開發方案和狀態 這第一步是建立w t計畫的先決條件,w t計畫用於評估執行的軟體解決方案。在這一步,測試員可質疑開發方案的完整性和正確性。並且基於專案計畫的完整和延伸定義,測試員要估計出測試這個執行的軟體解決方案所需要的資源數量。第二步 形成測試計畫 形成測試計畫應該要符合軟體開發過程的...