Detour安裝及簡單使用例項

2021-07-25 15:48:41 字數 1427 閱讀 3000

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...