Detours的作用和实例(hook、钩子)
Detours 可以用來(lái)攔截Win32的API函數(shù),從而讓程序按照我們自定義的方式進(jìn)行處理,而不是Windows默認(rèn)的。
Detours 也是通過(guò)Dll的方式,攔截Api函數(shù)。
為什么是修改API的前5個(gè)字節(jié)?
? 現(xiàn)在NewCode[]里的指令相當(dāng)于Jmp MyMessageBoxW
? 既然已經(jīng)獲取到了Jmp MyMessageBoxW
? 現(xiàn)在該是將Jmp MyMessageBoxW寫入原API入口前5個(gè)字節(jié)的時(shí)候了
? //知道為什么是5個(gè)字節(jié)嗎?
? //Jmp指令相當(dāng)于0xe9,占一個(gè)字節(jié)的內(nèi)存空間
? //MyMessageBoxW是一個(gè)地址,其實(shí)是一個(gè)整數(shù),占4個(gè)字節(jié)的內(nèi)存空間
? //int n=0x123; ? n占4個(gè)字節(jié)和MyMessageBoxW占4個(gè)字節(jié)是一樣的
? //1+4=5,知道為什么是5個(gè)字節(jié)了吧
例:攔截Win32的MessageBoxA()函數(shù)
1.先新建一個(gè)Dll工程
#include "detours.h" #pragma comment(lib,"detours.lib") //導(dǎo)入detours.h和detours.lib文件//static BOOL (WINAPI* Real_Messagebox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)=MessageBoxA; int (WINAPI *Real_Messagebox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)= MessageBoxA; //注意是MessageBoxA函數(shù) extern "C" _declspec(dllexport) BOOL WINAPI MessageBox_Mine(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) {CString temp= lpText;temp+="該MessageBox已被Detours截獲!";return Real_Messagebox(hWnd,temp,lpCaption,uType); }//dll入口函數(shù) BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved) {if (DLL_PROCESS_ATTACH == fdwReason){DetourTransactionBegin();DetourUpdateThread(GetCurrentThread()); //當(dāng)前線程DetourAttach(&(PVOID&)Real_Messagebox,MessageBox_Mine); //設(shè)置detourDetourTransactionCommit();}else if (DLL_PROCESS_DETACH == fdwReason){DetourTransactionBegin();DetourUpdateThread(GetCurrentThread());DetourDetach(&(PVOID&)Real_Messagebox,MessageBox_Mine);//卸載detourDetourTransactionCommit();}return TRUE;}特別要注意的就是MessageBox和MessageBoxA是不同的,我剛開始以為detours不會(huì)把它們區(qū)分,結(jié)果一直無(wú)法攔截成功。
2.新建一個(gè)MFC工程(在按扭響應(yīng)函數(shù)中添加 MessageBoxA())
在其OnInitDialog()函數(shù)中 添加::LoadLibrary(L"messageDll.dll"); //注意路徑問(wèn)題
然后在按鈕響應(yīng)函數(shù)中添加?::MessageBoxA(NULL,"4444443","23",0);
這樣當(dāng)成功后 點(diǎn)擊按鈕就可以攔截到MessageBox函數(shù)
效果如圖:
總結(jié)
以上是生活随笔為你收集整理的Detours的作用和实例(hook、钩子)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: USACO-Section2.1 Hea
- 下一篇: Rsync未授权访问漏洞记录(影响范围: