×¢£ºÎÒ²âÊԵĻ·¾³ÎªWin7+VS2008+MFC
ǰÑÔ
±¾ÎÄÖ÷Òª½éÉÜÁËÈçºÎʵÏÖÌæ»»WindowsÉϵÄAPIº¯Êý£¬ÊµÏÖWindows
API Hook¡£
£¨µ±È»£¬¶ÔÓÚsocketµÄHookÖ»ÊÇÆäÖеÄÒ»ÖÖÌØÀý£©¡£ÕâÖÖHook API¼¼Êõ±»¹ã·ºµÄ²ÉÓÃÔÚһЩÁìÓòÖУ¬ÈçÆÁĻȡ´Ê£¬¸öÈË·À»ðǽµÈ¡£ÕâÖÖAPI
Hook¼¼Êõ²¢²»ÊǺÜУ¬µ«ÊÇÉæ¼°µÄÁìÓò±È½Ï¿í¹ã£¬ÒªÏë×öºÃÓÐÒ»¶¨µÄ¼¼ÊõÄѶȡ£±¾ÎÄÊDzɼ¯Á˲»ÉÙ´ïÈ˵ÄÒÔǰ×ÊÁϲ¢½áºÏ×Ô¼ºµÄʵÑéµÃ³öµÄÐĵÃÌå»á£¬ÔÚÕâÀï½øÐÐ×ܽᷢ±í£¬Ï£ÍûÄܹ»¸ø¹ã´óµÄ¶ÁÕßÌṩ²Î¿¼£¬´ïµ½Å×שÒýÓñµÄ½á¹û¡£
ÎÊÌâ
×î½üºÍͬѧÌÖÂÛÈçºÎ¹¹½¨Ò»¸öWindowsÉϵļòµ¥µÄ¸öÈË·À»ðǽ¡£ºóÀ´ÌÖÂÛÉæ¼°µ½ÁËÈçºÎÈýø³Ì¹ØÁªÌ×½Ó×ֶ˿ڣ¬
Ìæ»»windows API£¬ÆÁĻȡ´ÊµÈ¼¼Êõ¡£ÆäÖÐÖ÷ÒªµÄÎÊÌâÓУº
1) ²ÉÓúÎÖÖ»úÖÆÀ´½Ø»ñsocketµÄµ÷Óã¿
Ò»°ãÀ´Ëµ£¬ÊµÏֽػñsocketµÄ·½·¨ÓкܶàºÜ¶à£¬×î»ù±¾µÄ£¬¿ÉÒÔдÇý¶¯£¬Çý¶¯Ò²ÓкܶàÖÖ£¬TDIÇý¶¯, NDISÇý¶¯£¬Mini
portÇý¶¯¡
ÓÉÓÚÎÒʹÓõÄÊÇWin2000ϵͳ£¬ËùÒԽػñsocketÒ²¿ÉÒÔÓÃWindows SPIÀ´½øÐС£ÁíÍâÒ»ÖÖ¾ÍÊÇWindows
API Hook¼¼Êõ¡£
ÓÉÓÚÎÒûʲôӲ¼þ»ù´¡£¬²»»áдÇý¶¯£¬ËùÒÔµÚÒ»ÖÖ·½·¨Ã»Óп¼ÂÇ£¬¶øÓÃSPIÏà¶Ô±È½Ï¼òµ¥¡£
µ«ÊǺóÀ´¾õµÃWindows API HookÊÊÓ¦Ãæ¸ü¹ã£¬¶øÇÒ¾õµÃ×Ô¼º¶¯ÊÖÄÜѧµ½²»ÉÙ¶«Î÷£¬
¾Í¾ö¶¨ÓÃWindows API HookÀ´³¢ÊÔ×ösocket Hook.
2) API HookµÄʵÏÖ·½·¨£¿
ʵ¼ÊÉϾÍÊǶÔϵͳº¯ÊýµÄÌæ»»£¬µ±È»ÊµÏÖÌæ»»µÄ·½·¨´ó¸Å²»ÏÂ5£¬6ÖÖ°É£¬¿ÉÒԲο¼¡¶WindowsºËÐıà³Ì¡·µÚ22Õ¡£
²»¹ýÎÒʹÓõķ½·¨ÓëÆä²»½üÏàͬ£¬Ó¦¸ÃÏà¶Ô±È½Ï¼òµ¥Ò×¶®¡£
ÔÀí
ÎÒÃÇÖªµÀ£¬ÏµÍ³º¯Êý¶¼ÊÇÒÔDLL·â×°ÆðÀ´µÄ£¬Ó¦ÓóÌÐòÓ¦Óõ½ÏµÍ³º¯Êýʱ£¬Ó¦Ê×ÏȰѸÃDLL¼ÓÔØµ½µ±Ç°µÄ½ø³Ì¿Õ¼äÖУ¬
µ÷ÓõÄϵͳº¯ÊýµÄÈë¿ÚµØÖ·£¬¿ÉÒÔͨ¹ý GetProcAddressº¯Êý½øÐлñÈ¡¡£µ±ÏµÍ³º¯Êý½øÐе÷ÓõÄʱºò£¬
Ê×ÏȰÑËù±ØÒªµÄÐÅÏ¢±£´æÏÂÀ´£¨°üÀ¨²ÎÊýºÍ·µ»ØµØÖ·£¬µÈһЩ±ðµÄÐÅÏ¢£©£¬È»ºó¾ÍÌø×ªµ½º¯ÊýµÄÈë¿ÚµØÖ·£¬¼ÌÐøÖ´ÐС£
Æäʵº¯ÊýµØÖ·£¬¾ÍÊÇϵͳº¯Êý¡°¿ÉÖ´ÐдúÂ롱µÄ¿ªÊ¼µØÖ·¡£ÄÇôÔõô²ÅÄÜÈú¯ÊýÊ×ÏÈÖ´ÐÐÎÒÃǵĺ¯ÊýÄØ£¿
ºÇºÇ£¬Ó¦¸ÃÃ÷°×Á˰ɣ¬°Ñ¿ªÊ¼µÄÄǶοÉÖ´ÐдúÂëÌæ»»ÎªÎÒÃÇ×Ô¼º¶¨ÖƵÄһС¶Î¿ÉÖ´ÐдúÂ룬ÕâÑùϵͳº¯Êýµ÷ÓÃʱ£¬
²»¾Í°´ÎÒÃǵÄÒâͼ¹Ô¹ÔÐÐÊÂÁËÂð£¿Æäʵ£¬¾ÍÕâô¼òµ¥¡£Very very¼òµ¥¡£ £ºP
ʵ¼ÊµÄ˵£¬¾Í¿ÉÒÔÐÞ¸Äϵͳº¯ÊýÈë¿ÚµÄµØ·½£¬ÈÃËûµ÷תµ½ÎÒÃǵĺ¯ÊýµÄÈë¿Úµã¾ÍÐÐÁË¡£
²ÉÓûã±à´úÂë¾ÍÄܼòµ¥µÄʵÏÖJmp XXXX, ÆäÖÐXXXX¾ÍÊÇÒªÌø×ªµÄÏà¶ÔµØÖ·¡£
ÎÒÃǵÄ×ö·¨ÊÇ£º°Ñϵͳº¯ÊýµÄÈë¿ÚµØ·½µÄÄÚÈÝÌæ»»ÎªÒ»ÌõJmpÖ¸ÁĿµÄ¾ÍÊÇÌøµ½ÎÒÃǵĺ¯Êý½øÐÐÖ´ÐС£
¶øJmpºóÃæÒªÇóµÄÊÇÏà¶ÔÆ«ÒÆ£¬Ò²¾ÍÊÇÎÒÃǵĺ¯ÊýÈë¿ÚµØÖ·µ½ÏµÍ³º¯ÊýÈë¿ÚµØÖ·Ö®¼äµÄ²îÒ죬ÔÙ¼õÈ¥ÎÒÃÇÕâÌõÖ¸ÁîµÄ´óС¡£
Óù«Ê½±í´ïÈçÏ£º(1)int nDelta = UserFunAddr ¨C SysFunAddr -
£¨ÎÒÃǶ¨ÖƵÄÕâÌõÖ¸ÁîµÄ´óС£©;(2)Jmp nDleta;
ΪÁ˱£³ÖÔ³ÌÐòµÄ½¡×³ÐÔ£¬ÎÒÃǵĺ¯ÊýÀï×öÍê±ØÒªµÄ´¦Àíºó£¬Òª»Øµ÷ÔÀ´µÄϵͳº¯Êý£¬È»ºó·µ»Ø¡£
ËùÒÔµ÷ÓÃÔÀ´ÏµÍ³º¯Êý֮ǰ±ØÐëÏȰÑÔÀ´Ð޸ĵÄϵͳº¯ÊýÈë¿ÚµØ·½¸ø»Ö¸´£¬·ñÔò£¬
ϵͳº¯ÊýµØ·½±»ÎÒÃǸijÉÁËJmp XXXX¾Í»áÓÖÌøµ½ÎÒÃǵĺ¯ÊýÀËÀÑ»·ÁË¡£
ÄÇô˵һϳÌÐòÖ´ÐеĹý³Ì¡£
ÎÒÃǵÄdll¡°×¢É䡱Èë±»hookµÄ½ø³Ì -> ±£´æÏµÍ³º¯ÊýÈë¿Ú´¦µÄ´úÂë
-> Ìæ»»µô½ø³ÌÖеÄϵͳº¯ÊýÈë¿ÚÖ¸ÏòÎÒÃǵĺ¯Êý -> µ±ÏµÍ³º¯Êý±»
µ÷Óã¬Á¢¼´Ìø×ªµ½ÎÒÃǵĺ¯Êý -> ÎÒÃǺ¯Êý½øÐд¦Àí -> »Ö¸´ÏµÍ³º¯ÊýÈë¿ÚµÄ´úÂë ->
µ÷ÓÃÔÀ´µÄϵͳº¯Êý -> ÔÙÐÞ¸Äϵͳº¯ÊýÈë¿ÚÖ¸Ïò
ÎÒÃǵĺ¯Êý£¨ÎªÁËÏ´Îhook£©-> ·µ»Ø¡£ÓÚÊÇ£¬Ò»´ÎÍêÕûµÄHook¾ÍÍê³ÉÁË¡£
ºÃ£¬Õâ¸öÎÊÌâÃ÷°×ÒԺ󣬽²Ò»ÏÂϸöÎÊÌ⣬¾ÍÊÇÈçºÎ½øÐÐdll¡°×¢É䡱£¿¼´½«ÎÒÃǵÄdll×¢Éäµ½ÒªHookµÄ½ø³ÌÖÐÈ¥ÄØ£¿
ºÜ¼òµ¥Å¶£¬ÕâÀïÎÒÃDzÉÓõ÷ÓÃWindowsÌṩ¸øÎÒÃǵÄһЩÏֳɵÄHookÀ´½øÐÐ×¢Éä¡£¾Ù¸öÀý×Ó£¬Êó±ê¹³×Ó£¬
¼üÅ̹³×Ó´ó¼Ò¶¼ÖªµÀ°É£¿ÎÒÃÇ¿ÉÒÔ¸øÏµÍ³×°Ò»¸öÊó±ê¹³×Ó£¬È»ºóËùÓÐÏìÓ¦µ½Êó±êʼþµÄ½ø³Ì£¬
¾Í»á¡°×Ô¶¯¡±£¨ÆäʵÊÇϵͳ´¦ÀíÁË£©ÔØÈëÎÒÃǵÄdllÈ»ºóÉèÖÃÏàÓ¦µÄ¹³×Óº¯Êý¡£ÆäʵÎÒÃǵÄÄ¿µÄÖ»ÊÇÐèÒªÈñ»×¢Éä½ø³Ì
ÔØÈëÎÒÃǵÄdll¾Í¿ÉÒÔÁË£¬ÎÒÃÇ¿ÉÒÔÔÙdllʵÀý»¯µÄʱºò½øÐк¯Êý×¢ÉäµÄ£¬ÎÒÃǵÄÕâ¸öÊó±ê¹³×Óʲô¶¼²»¸ÉµÄ¡£
¼òµ¥µÄÀý×ÓOneAddOne
½²ÁËÉÏÃæµÄÔÀí£¬ÏÖÔÚÎÒÃÇÓ¦¸ÃʵսһÏÂÁË¡£ÏȲ»Òª¿¼ÂÇwindowsϵͳÄÇЩ·±Ôӵĺ¯Êý£¬
ÎÒÃÇ×Ô¼º±àдһ¸öAPIº¯ÊýÀ´½øÐÐHookÓë±»HookµÄÁ·Ï°°É£¬¹þ¹þ¡£
µÚÒ»²½£¬Ê×Ïȱàдһ¸öAdd.dll£¬ºÜ¼òµ¥£¬Õâ¸ödllÖ»Êä³öÒ»¸öAPIº¯Êý,¾ÍÊÇaddÀ²¡£
н¨Ò»¸öwin32 dll¹¤³Ì£¬
dllmain.cppµÄÄÚÈÝ£º
//ǧÍò±ðÍü¼ÇÉùÃ÷WINAPI,·ñÔòµ÷ÓõÄʱºò»Ø²úÉúÉùÃ÷´íÎóŶ£¡ int WINAPI add(int a,int b) { return a+b; } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } |
È»ºó±ðÍüÁËÔÚadd.defÀïÃæÊä³öº¯Êýadd:
LIBRARY Add DESCRIPTION "ADD LA" EXPORTS add @1; |

½¨Í깤³Ìºó£¬Äã»á·¢ÏÖûÓÐAdd.defÎļþ£¬ÕâʱÎÒÃÇ×Ô¼ºÐ½¨Ò»¸öAdd.defÎļþ£¬È»ºóÌí¼Óµ½¹¤³ÌÖм´¿É£¬Ìí¼ÓAdd.defÎļþµ½¹¤³Ìºó£¬ÎÒÃÇ»¹ÐèÒªÉèÖù¤³ÌµÄÊôÐÔ£¬½«Add.defÌí¼Óµ½¡¾ÏîÄ¿¡¿-->¡¾AddÊôÐÔ¡¿-->¡¾Á´½ÓÆ÷¡¿-->¡¾ÊäÈë¡¿-->¡¾Ä£¿é¶¨ÒåÎļþ¡¿£¬ÈçÏÂͼËùʾ£¬²»ÕâÑùÉèÖõϰ£¬ÎÒÃÇÌí¼ÓµÄAdd.defÎļþÊDz»Æð×÷ÓõÄŶ¡£

ÉèÖúú󣬱àÒ룬ok,ÎÒÃÇ»ñµÃÁËAdd.dll
µÃµ½Add.dllºó£¬ÎÒÃÇ¿ÉÒÔÓÃÒ»¸öС¹¤¾ß¡¾dllº¯Êý²é¿´Æ÷¡¿À´´ò¿ªÎÒÃǵÄAdd.dllÎļþ£¬Èç¹ûº¯Êýµ¼³ö³É¹¦µÄ»°£¬ÎÒÃǾͿÉÒÔ
ÔÚÀïÃæ¿´µ½µ¼³öµÄº¯ÊýÃû×ÖÁË£¬ÈçÏÂͼËùʾ£º

¸Ã¹¤¾ßÏÂÔØµØÖ·£ºhttp://download.csdn.net/detail/friendan/6347455
//dllº¯Êý²é¿´Æ÷
ÓÐÁËdllÎļþºó£¬½ÓÏÂÀ´ÎÒÃÇн¨Ò»¸öMFC¶Ô»°¿ò³ÌÐòÀ´µ÷ÓøÃdllÖе¼³öµÄº¯Êýadd,
³ÌÐò½çÃæ¼´ÔËÐÐЧ¹û½ØÍ¼ÈçÏ£º

Ö÷Òª´úÂëÈçÏ£º
//µ÷ÓÃdllº¯Êý add(int a,int b) void CCallAddDlg::OnBnClickedBtnCallAdd() { HINSTANCE hAddDll=NULL; typedef int (WINAPI*AddProc)(int a,int b);//º¯ÊýÔÐͶ¨Òå AddProc add; if (hAddDll==NULL) { hAddDll=::LoadLibrary(_T("Add.dll"));//¼ÓÔØdll } add=(AddProc)::GetProcAddress(hAddDll,"add");//»ñÈ¡º¯ÊýaddµØÖ· int a=1; int b=2; int c=add(a,b);//µ÷Óú¯Êý CString tem; tem.Format(_T("%d+%d=%d"),a,b,c); AfxMessageBox(tem); } |
½ÓÏÂÀ´ÎÒÃǽøÐÐHOOK£¬¼´HOOKÎÒÃǵÄAdd.dllÎļþÖеĺ¯Êýint add(int a,int
b)
н¨Ò»¸öMFCµÄ dll¹¤³Ì£¬¹¤³ÌÃûΪHook£¬È»ºóÎÒÃÇÔÚHook.cppÎļþÀïÃæ±àд´úÂëÈçÏ£º
Ê×ÏÈÔÚÍ·²¿ÉùÃ÷ÈçϱäÁ¿£º
//±äÁ¿¶¨Òå //²»Í¬Instance¹²ÏíµÄ¸Ã±äÁ¿ #pragma data_seg("SHARED") static HHOOK hhk=NULL; //Êó±ê¹³×Ó¾ä±ú static HINSTANCE hinst=NULL; //±¾dllµÄʵÀý¾ä±ú (hook.dll) #pragma data_seg() #pragma comment(linker, "/section:SHARED,rws") //ÒÔÉϵıäÁ¿¹²ÏíŶ! CString temp; //ÓÃÓÚÏÔʾ´íÎóµÄÁÙʱ±äÁ¿ bool bHook=false; //ÊÇ·ñHookÁ˺¯Êý bool m_bInjected=false; //ÊÇ·ñ¶ÔAPI½øÐÐÁËHook BYTE OldCode[5]; //ÀϵÄϵͳAPIÈë¿Ú´úÂë BYTE NewCode[5]; //ÒªÌø×ªµÄAPI´úÂë (jmp xxxx) typedef int (WINAPI*AddProc)(int a,int b);//add.dllÖеÄaddº¯Êý¶¨Òå AddProc add; //add.dllÖеÄaddº¯Êý HANDLE hProcess=NULL; //Ëù´¦½ø³ÌµÄ¾ä±ú FARPROC pfadd; //Ö¸Ïòaddº¯ÊýµÄÔ¶Ö¸Õë DWORD dwPid; //Ëù´¦½ø³ÌID //end of ±äÁ¿¶¨Òå |
±àдÊó±ê¹³×Ó°²×°¡¢Ð¶Ôغʹ¦Àíº¯Êý£º
//Êó±ê¹³×Ó¹ý³Ì£¬Ê²Ã´Ò²²»×ö£¬Ä¿µÄÊÇ×¢Èëdllµ½³ÌÐòÖÐ LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam) { return CallNextHookEx(hhk,nCode,wParam,lParam); } //Êó±ê¹³×Ó°²×°º¯Êý: BOOL InstallHook() { hhk=::SetWindowsHookEx(WH_MOUSE,MouseProc,hinst,0); return true; } //Ð¶ÔØÊó±ê¹³×Óº¯Êý void UninstallHook() { ::UnhookWindowsHookEx(hhk); } |
ÔÚdllʵÀý»¯º¯ÊýInitInstance()ÖУ¬³õʼ»¯±äÁ¿ºÍ½øÐÐ×¢È룺
//ÔÚdllʵÀý»¯ÖлñµÃһЩ²ÎÊý BOOL CHookApp::InitInstance() { CWinApp::InitInstance(); //»ñµÃdll ʵÀý£¬½ø³Ì¾ä±ú hinst=::AfxGetInstanceHandle(); DWORD dwPid=::GetCurrentProcessId(); hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,dwPid); //µ÷ÓÃ×¢É亯Êý Inject(); return TRUE; } |
±àдעÉ亯Êý£¬¼´HOOKº¯ÊýInject()ÁË:
//ºÃ£¬×îÖØÒªµÄHOOKº¯Êý£º void Inject() { if (m_bInjected==false) { //±£Ö¤Ö»µ÷ÓÃ1´Î m_bInjected=true; //»ñÈ¡add.dllÖеÄadd()º¯Êý HMODULE hmod=::LoadLibrary(_T("Add.dll")); add=(AddProc)::GetProcAddress(hmod,"add"); pfadd=(FARPROC)add; if (pfadd==NULL) { AfxMessageBox(L"cannot locate add()"); } // ½«add()ÖеÄÈë¿Ú´úÂë±£´æÈëOldCode[] _asm { lea edi,OldCode mov esi,pfadd cld movsd movsb } NewCode[0]=0xe9;//ʵ¼ÊÉÏ0xe9¾ÍÏ൱ÓÚjmpÖ¸Áî //»ñÈ¡Myadd()µÄÏà¶ÔµØÖ· _asm { lea eax,Myadd mov ebx,pfadd sub eax,ebx sub eax,5 mov dword ptr [NewCode+1],eax } //Ìî³äÍê±Ï£¬ÏÖÔÚNewCode[]ÀïµÄÖ¸ÁîÏ൱ÓÚJmp Myadd HookOn(); //¿ÉÒÔ¿ªÆô¹³×ÓÁË } } |
±àдHOOK¿ªÆôºÍÍ£Ö¹º¯ÊýHookOn()ºÍHookOff()
//¿ªÆô¹³×ӵĺ¯Êý void HookOn() { ASSERT(hProcess!=NULL); DWORD dwTemp=0; DWORD dwOldProtect; //½«ÄÚ´æ±£»¤Ä£Ê½¸ÄΪ¿Éд,ÀÏģʽ±£´æÈëdwOldProtect VirtualProtectEx(hProcess,pfadd,5,PAGE_READWRITE,&dwOldProtect); //½«ËùÊô½ø³ÌÖÐadd()µÄǰ5¸ö×Ö½Ú¸ÄΪJmp Myadd WriteProcessMemory(hProcess,pfadd,NewCode,5,0); //½«ÄÚ´æ±£»¤Ä£Ê½¸Ä»ØÎªdwOldProtect VirtualProtectEx(hProcess,pfadd,5,dwOldProtect,&dwTemp); bHook=true; } //¹Ø±Õ¹³×ӵĺ¯Êý void HookOff()//½«ËùÊô½ø³ÌÖÐadd()µÄÈë¿Ú´úÂë»Ö¸´ { ASSERT(hProcess!=NULL); DWORD dwTemp=0; DWORD dwOldProtect; VirtualProtectEx(hProcess,pfadd,5,PAGE_READWRITE,&dwOldProtect); WriteProcessMemory(hProcess,pfadd,OldCode,5,0); VirtualProtectEx(hProcess,pfadd,5,dwOldProtect,&dwTemp); bHook=false; } |
±àдÎÒÃÇ×Ô¼ºµÄMyaddº¯Êý£¨£©
//È»ºó£¬Ð´ÎÒÃÇ×Ô¼ºµÄMyadd()º¯Êý int WINAPI Myadd(int a,int b) { //½Ø»ñÁ˶Ôadd()µÄµ÷Óã¬ÎÒÃǸøa,b¶¼¼Ó1 a=a+1; b=b+1; HookOff();//¹ØµôMyadd()¹³×Ó·ÀÖ¹ËÀÑ»· int ret; ret=add(a,b); HookOn();//¿ªÆôMyadd()¹³×Ó return ret; } |
È»ºó±ðÍü¼ÇÔÚhook.defÀïÃæµ¼³öÎÒÃǵÄÁ½¸öº¯Êý £º
InstallHook
UninstallHook

½ÓÏÂÀ´¾Í¿ÉÒÔ½øÐÐHOOKµÄ²âÊÔÁË£¬¸øÇ°ÃæµÄ¶Ô»°¿ò³ÌÐò£¬ÔÙÌí¼ÓÁ½¸ö°´Å¥£¬Ò»¸öÓÃÓÚ°²×°¹³×Ó£¬ÁíÒ»¸öÓÃÓÚÐ¶ÔØ¹³×Ó£¬
³ÌÐòºÍÔËÐÐЧ¹û½ØÍ¼ÈçÏ£º

//δHOOK֮ǰ

//HOOKÖ®ºó

°²×°¹³×ÓºÍÐ¶ÔØ¹³×ÓÖ÷Òª´úÂëÈçÏ£º
HINSTANCE hinst=NULL; //°²×°Êó±ê¹³×Ó£¬½øÐÐHOOK void CCallAddDlg::OnBnClickedBtnStartHook() { typedef BOOL (CALLBACK *inshook)(); //º¯ÊýÔÐͶ¨Òå inshook insthook; hinst=LoadLibrary(_T("Hook.dll"));//¼ÓÔØdllÎļþ if(hinst==NULL) { AfxMessageBox(_T("no Hook.dll!")); return; } insthook=::GetProcAddress(hinst,"InstallHook");//»ñÈ¡º¯ÊýµØÖ· if(insthook==NULL) { AfxMessageBox(_T("func not found!")); return; } insthook();//¿ªÊ¼HOOK } //Ð¶ÔØÊó±ê¹³×Ó£¬Í£Ö¹HOOK void CCallAddDlg::OnBnClickedBtnStopHook() { if (hinst==NULL) { return; } typedef BOOL (CALLBACK *UnhookProc)(); //º¯ÊýÔÐͶ¨Òå UnhookProc UninstallHook; UninstallHook=::GetProcAddress(hinst,"UninstallHook");//»ñÈ¡º¯ÊýµØÖ· if(UninstallHook!=NULL) { UninstallHook(); } if (hinst!=NULL) { ::FreeLibrary(hinst); } } |
ÒÔÉϾÍÊÇ֮ǰÎÒ¿´µÄÄÇÆªÎÄÕµÄÖ÷ÒªÄÚÈÝÁË£¬¹ØÓÚHOOKϵͳAPI£¬ÎÒ»áÔÚÆäËüµÄÎÄÕÂÀïÃæ½øÐÐ˵Ã÷¡£
ÕâÀïÔÙ˵һÏÂÔÎĵÄȱµã£¬ÎÒÈÏΪÆäÓÐÁ½¸öȱµã£º
1.Í£Ö¹HOOKʱ£¬Ã»Óлָ´±»HOOKº¯ÊýµÄÈë¿Ú¡£
2.ûÓд¦ÀídllÍ˳öʼþ£¬Ã»ÓÐÔÚdllÍ˳öʼþÖлָ´±»HOOKº¯ÊýÈë¿Ú¡£
ÒÔÉÏÁ½¸öȱµã£¬ºÜÈÝÒ×µ¼Ö³ÌÐòµÄ±ÀÀ££¬Òò´ËÔÚÎÒµÄÀý×Ó³ÌÐòÖУ¬¶¼¶ÔËüÃǽøÐÐÁË´¦Àí£º
//Ð¶ÔØÊó±ê¹³×Óº¯Êý void UninstallHook() { if (hhk!=NULL) { ::UnhookWindowsHookEx(hhk); } HookOff();//¼ÇµÃ»Ö¸´Ôº¯ÊýÈë¿Ú } //dllÍ˳öʱ int CHookApp::ExitInstance() { HookOff();//¼ÇµÃ»Ö¸´Ôº¯ÊýÈë¿Ú return CWinApp::ExitInstance(); } |
ÒÔÉÏÎÒÕâ¸öÀý×Ó¹¤³ÌµÄÏÂÔØµØÖ·£ºhook dllÎļþÖеĺ¯Êýadd.zip
http://download.csdn.net/detail/friendan/6348209
ÓÑÇéÌáʾ£ºÎÒÔÚDebugģʽÔËÐгÌÐòʱ£¬HOOK»áʧ°Ü£¬ÔÚReleaseģʽÔËÐгÌÐòÔòHOOK³É¹¦¡£
|