淺淡 「對 HOOK PE 的學習體會」

2021-05-21 22:10:54 字數 1644 閱讀 9248

淺淡

「對hook pe

的學習體會」

我們都知道,對於

pe 檔案的結構中,有乙個叫做匯出表的東西,這個表中存放著這個程式執行所需要的函式。這些函式都存放在乙個結構中。如果,我們能夠替換這個結構中的某些位址,那麼,我們就能夠在程式執行之前,拿到控制權。

下邊看一下這個結構的示意圖:

從這個圖中,我們可以清楚的看到,匯出表函式名和函式位址組成,它們可以通過匯出表獲得:

pmoduleaddress=pegetmodulebaseaddress("ntkrnlpa.exe");

pexportdir= (pimage_export_directory

)(pmodulebase+psechead

->

virtualaddress);

dwaddrname= (pdword

)(pmodulebase+pexportdir

->

addressofnames);

dwaddrfun=(pdword

)(pmodulebase+pexportdir

->

addressoffunctions;

dwaddrname

:也就是指向那個表的第乙個函式的名字,從圖中可以知道,它們是一種鏈式結構,那麼,我們就可以通過迴圈來遍歷這個鍊錶了。

dwaddrfun

: 這是函式的偏移位址,我們可以通過基址

+ 偏移的方式快速的定位函式的位址。。。獲取方法和上邊是一樣的。

hook

的方法是替換函式的偏移位址,利用這個特性,我們可以快速得到原來的函式的位址,然後換成我們函式相對基址的偏移位址,最後,在我們的函式最後呼叫原來的函式,因為我們在

hook

的時候已經記錄了它的位址,還是和原來一樣,通過指向這個函式的指標完成。。。

在這裡值得注意的是,

ntkrnlpa.exe

這個是對於多核

cpu

單核的ntoskrl.exe …

不然的話,可以獲取不到我們定位的函式。。。

下邊,我們開始了替換的操作:

函式名字

------zwcreatefile

函式位址

-------0x804ff07c

myhookfunc------------------

0xf89e37f0

看下邊,我們替換完成後的情況。。。

發現什麼了嗎?

看zwcreatefile ------

à0xf89e37f0

和我們上邊記錄的我們定義的函式是一樣,說明了我們

hook

住了這個函式。。。

具體的hook

過程:

__asm

上邊計算出我們定義的函式相對於基址的偏移量,然後填充這個函式的偏移。。。

*dwaddrfun=uaddress;

gSOAP學習體會

include soaph.h 得到存根程式 include sendemailbinding.nsmap 得到命名空間對映表 include include include soapsendemailbindingproxy.h using namespace std int main int a...

git 學習體會

下午頭暈呀。學而不思則則罔,看了好幾天git,隨便寫寫來整理下思路。這幾天主要做了3個事情,一是寫了20多頁的ppt 準備交流,乙個是看了progit的中文件,還有乙個是在stackoverflow上提了幾個問題。對git也算入門了吧,熟練掌握常用命令的含義和用法 不帶參的 知道了git的儲存和資料...

UI學習體會

很多時候自我感覺做好的一件事情,往往並不會得到別人的認可 經不起別人的推敲,總是自己被澆的狗血淋頭 很多時候,我們都沒有站在另外的乙個角度去看問題 也許不是你要做多少多少事情,關鍵是你要別人承認你的價值所在 今天上完ui作業點評後,才發現自己可以去石化了 很多資訊不是我們自我感覺好了就ok了 我們程...