detours是微軟開發的乙個函式庫,可用於捕獲系統api。在用其進行程式開發之前,得做一些準備工作:
來看幾個關鍵函式:
在detours庫中,驅動detours執行的是函式
[cpp] view plain copy
long detourattach(
pvoid * pppointer,
pvoid pdetour
); 這個函式的職責是掛接目標api,函式的第乙個引數是乙個指向將要被掛接函式位址的函式指標,第二個引數是指向實際執行的函式的指標,一般來說是我們定義的替代函式的位址。但是,在掛接開始之前,還有以下幾件事需要完成:
需要對detours進行初始化. detourtransactionbegin()
需要更新進行detours的執行緒. detourupdatethread(getcurrentthread())
在這兩件事做完以後,detour函式才是真正地附著到目標函式上。
在此之後,呼叫detourtransactioncommit()是detour函式起作用並檢查函式的返回值判斷是正確還是錯誤。
想把hook的函式改回來則可以使用
[cpp] view plain copy
long winapi detourdetach(
pvoid *pppointer,
pvoid pdetour)
引數與detourattach相同
付使用簡單例子:hook messageboxw函式
[cpp] view plain copy
static int (winapi* old_messageboxw)(hwnd hwnd,lpcwstr lptext,lpcwstr lpcaption,uint utype)=messageboxw;
int winapi new_messageboxw(hwnd hwnd,lpcwstr lptext,lpcwstr lpcaption,uint utype)
int apientry _twinmain(hinstance hinstance,
hinstance hprevinstance,
lptstr lpcmdline,
int ncmdshow)
還有乙個detourcreateprocesswithdll函式,該函式是在以dll注入方式攔截api時使用的,它其實就是封裝「createprocess」,以「create_suspend」方式建立程序,然後修改iat,把detoured.dll和您的*.dll插入到它的匯入表,然後再啟動程序。所以它的引數就是在普通的createprocess基礎上增加了兩個dll的路徑引數,最後乙個引數為建立程序的函式指標,預設為createprocessa,簡單的說就是可以在建立程序的時候載入乙個dll吧
示例**:
[cpp] view plain copy
Django 安裝及簡單例項
django 安裝及簡單例項 1.django 安裝完成安裝後,django會拷貝乙個django admin.py到 usr local bin下,這個py檔案引入了django的管理模組。2.建立專案 要建立乙個django專案非常簡單,使用startproject命令,輸入專案名稱 djang...
centos mongodb安裝及簡單例項
1.建立目錄並設定寫許可權的操作如下 mkdir p data db 建立目錄和必要的父目錄,若父目錄不存在則先建立父目錄再建立子目錄 chown r usergroup user data db tar zxvf mongodb linux i686 x.gz cd mongodb linux i...
PHPMailer安裝方法及簡單例項
開啟你電腦裡的php.ini檔案,找到如下位置,新增紅線部分的內容,路徑就是你phpmailer存放的位置 儲存,重啟apache.然後借用readme裡的乙個例子,稍微改一下就可以用了,由於只做最簡單的測試,很多東西我注釋掉了。send.php 複製 如下 require class.phpmai...