淺淡
「對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了 我們程...