Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Windows API Hook
 
×÷Õߣºfriendan À´×ÔÓÚ£ºCSDN ·¢²¼ÓÚ 2015-10-27
  2327  次浏览      27
 

×¢£ºÎÒ²âÊԵĻ·¾³Îª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³É¹¦¡£

   
2327 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ