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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
AHOOK API £¨Ò»£©¡ª¡ªHOOK»ù´¡+Ò»¸öÊó±ê¹³×ÓʵÀý
 
À´×ÔÓÚ£º¹¤½³ÈôË® ·¢²¼ÓÚ 2016-2-16
  3815  次浏览      27
 

0x00 ÆðÒò

×î½üÔÚ×ö±ÏÒµÉè¼Æ£¬ÓÐÒ»¸ö¹¦ÄÜÊÇÐèҪʵÏÖ¶Ô¼ôÇаåµÄ¼à¿ØºÍ½ø³ÌµÄ·ÀÖÕÖ¹±£»¤¡£Ô­±¾Ïë´ÓÄں˲ãʵÏÖ£¬µ«Ã»ÓÐÍ·Ð÷¡£×îºó¾ö¶¨´Óµ÷ÓòãÈëÊÖ£¬¼´²ÉÓÃHOOK APIµÄ¼¼ÊõÀ´¹Ò¹³ÏàÓ¦µÄAPI£¬´Ó¶øÊµÏÖÔ¤ÆÚµÄ¹¦ÄÜ¡£ÔÚÕâÑùµÄÐèÇóÏ£¬¾Í¿ªÊ¼Ñ§Ï°ÁËHOOK API¡£

0x01ʲôÊÇHOOK API

HOOK£¨¹³×Ó£¬¹Ò¹³£©ÊÇÒ»ÖÖʵÏÖWindowsƽ̨ÏÂÀàËÆÓÚÖжϵĻúÖÆ[24]¡£HOOK»úÖÆÔÊÐíÓ¦ÓóÌÐòÀ¹½Ø²¢´¦ÀíWindowsÏûÏ¢»òÖ¸¶¨Ê¼þ£¬µ±Ö¸¶¨µÄÏûÏ¢·¢³öºó£¬HOOK³ÌÐò¾Í¿ÉÒÔÔÚÏûÏ¢µ½´ïÄ¿±ê´°¿Ú֮ǰ½«Æä²¶»ñ£¬´Ó¶øµÃµ½¶ÔÏûÏ¢µÄ¿ØÖÆÈ¨£¬½ø¶ø¿ÉÒÔ¶Ô¸ÃÏûÏ¢½øÐд¦Àí»òÐ޸쬼ÓÈëÎÒÃÇËùÐèµÄ¹¦ÄÜ¡£¹³×Ó°´Ê¹Ó÷¶Î§·Ö£¬¿É·ÖΪÏ̹߳³×ÓºÍϵͳ¹³×Ó£¬ÆäÖУ¬ÏµÍ³¹³×Ó¾ßÓÐÏ൱´óµÄ¹¦ÄÜ£¬¼¸ºõ¿ÉÒÔʵÏÖ¶ÔËùÓÐWindowsÏûÏ¢µÄÀ¹½Ø¡¢´¦ÀíºÍ¼à¿Ø¡£ÕâÏî¼¼ÊõÉæ¼°µ½Á½¸öÖØÒªµÄAPI£¬Ò»¸öÊÇSetWindowsHookEx£¬°²×°¹³×Ó£»ÁíÒ»¸öÊÇUnHookWindowsHookEx£¬Ð¶Ôع³×Ó¡£

±¾ÎÄʹÓõÄHOOK API¼¼Êõ£¬ÊÇÖ¸½Ø»ñϵͳ»ò½ø³Ì¶Ôij¸öAPIº¯ÊýµÄµ÷Óã¬Ê¹µÃAPIµÄÖ´ÐÐÁ÷³ÌתÏòÎÒÃÇÖ¸¶¨µÄ´úÂë¶Î£¬´Ó¶øÊµÏÖÎÒÃÇËùÐèµÄ¹¦ÄÜ¡£WindowsϵÄÿ¸ö½ø³Ì¾ùÓµÓÐ×Ô¼ºµÄµØÖ·¿Õ¼ä£¬²¢ÇÒ½ø³ÌÖ»Äܵ÷ÓÃÆäµØÖ·¿Õ¼äÄڵĺ¯Êý£¬Òò´ËHOOK APIÓÈΪ¹Ø¼üµÄÒ»²½ÊÇ£¬Éè·¨½«×Ô¼ºµÄ´úÂë¶Î×¢È뵽Ŀ±ê½ø³ÌÖУ¬²ÅÄܽøÒ»²½ÊµÏֶԸýø³Ìµ÷ÓõÄAPI½øÐÐÀ¹½Ø¡£È»¶øÎ¢Èí²¢Ã»ÓÐÌṩHOOK APIµÄµ÷Óýӿڣ¬Õâ¾ÍÐèÒª¿ª·¢Õß×Ô¼º±à³ÌʵÏÖ£¬´ó¼ÒËùÊìÖªµÄ·À¶¾Èí¼þ¡¢·À»ðǽÈí¼þµÈ¾ù²ÉÓÃHOOK APIʵÏÖ¡£

Ò»°ãÀ´Ëµ£¬HOOK APIÓÉÁ½¸ö×é³É²¿·Ö£¬¼´ÊµÏÖHOOK APIµÄDLLÎļþ£¬ºÍÆô¶¯×¢ÈëµÄÖ÷µ÷³ÌÐò¡£±¾ÎIJÉÓÃHOOK API ¼¼Êõ¶Ô¼ôÇаåÏà¹ØµÄAPI º¯Êý½øÐÐÀ¹½Ø£¬´Ó¶øÊµÏÖ¶Ô¼ôÇаåÄÚÈÝµÄ¼à¿Ø¹¦ÄÜ£¬Í¬ÑùʹÓøü¼ÊõʵÏÖ½ø³Ì·ÀÖÕÖ¹¹¦ÄÜ¡£ÆäÖÐDLLÎļþÖ§³ÖHOOK APIµÄʵÏÖ£¬¶øÖ÷µ÷¿Í»§¶Ë³ÌÐò½«ÔÚ³õʼ»¯Ê±°Ñ´øÓÐHOOK API¹¦ÄܵÄDLLËæ×ÅÊó±ê¹³×ӵļÓÔØ×¢È뵽Ŀ±ê½ø³ÌÖУ¬ÕâÀïµÄÊó±ê¹³×ÓÊôÓÚϵͳ¹³×Ó¡£

0x02 ¹³×ÓµÄÀàÐÍ

1¡¢°´Ê¼þ·ÖÀà

ÓÐÈçϵļ¸ÖÖ³£ÓÃÀàÐÍ

£¨1£© ¼üÅ̹³×Ӻ͵ͼ¶¼üÅ̹³×Ó¿ÉÒÔ¼àÊÓ¸÷ÖÖ¼üÅÌÏûÏ¢¡£

£¨2£© Êó±ê¹³×Ӻ͵ͼ¶Êó±ê¹³×Ó¿ÉÒÔ¼àÊÓ¸÷ÖÖÊó±êÏûÏ¢¡£

£¨3£© Íâ¿Ç¹³×Ó¿ÉÒÔ¼àÊÓ¸÷ÖÖShellʼþÏûÏ¢¡£±ÈÈçÆô¶¯ºÍ¹Ø±ÕÓ¦ÓóÌÐò¡£

£¨4£© ÈÕÖ¾¹³×Ó¿ÉÒԼǼ´ÓϵͳÏûÏ¢¶ÓÁÐÖÐÈ¡³öµÄ¸÷ÖÖʼþÏûÏ¢¡£

£¨5£© ´°¿Ú¹ý³Ì¹³×Ó¼àÊÓËùÓдÓϵͳÏûÏ¢¶ÓÁз¢ÍùÄ¿±ê´°¿ÚµÄÏûÏ¢¡£

´ËÍ⣬»¹ÓÐÒ»Ð©ÌØ¶¨Ê¼þµÄ¹³×ÓÌṩ¸øÎÒÃÇʹÓ㬲»Ò»Ò»Áо١£

ÏÂÃæÃèÊö³£ÓõÄHookÀàÐÍ£º

1¡¢WH_CALLWNDPROCºÍWH_CALLWNDPROCRET Hooks

WH_CALLWNDPROCºÍWH_CALLWNDPROCRET HooksʹÄã¿ÉÒÔ¼àÊÓ·¢Ë͵½´°¿Ú¹ý³ÌµÄÏûÏ¢¡£ÏµÍ³ÔÚÏûÏ¢·¢Ë͵½½ÓÊÕ´°¿Ú¹ý³Ì֮ǰµ÷ÓÃWH_CALLWNDPROC Hook×ӳ̣¬²¢ÇÒÔÚ´°¿Ú¹ý³Ì´¦ÀíÍêÏûÏ¢Ö®ºóµ÷ÓÃWH_CALLWNDPROCRET Hook×ӳ̡£WH_CALLWNDPROCRET Hook´«µÝÖ¸Õëµ½CWPRETSTRUCT½á¹¹£¬ÔÙ´«µÝµ½Hook×ӳ̡£CWPRETSTRUCT½á¹¹°üº¬ÁËÀ´×Ô´¦ÀíÏûÏ¢µÄ´°¿Ú¹ý³ÌµÄ·µ»ØÖµ£¬Í¬ÑùÒ²°üÀ¨ÁËÓëÕâ¸öÏûÏ¢¹ØÁªµÄÏûÏ¢²ÎÊý¡£

2¡¢WH_CBT Hook

ÔÚÒÔÏÂʼþ֮ǰ£¬ÏµÍ³¶¼»áµ÷ÓÃWH_CBT Hook×ӳ̣¬ÕâЩʼþ°üÀ¨£º

1. ¼¤»î£¬½¨Á¢£¬Ïú»Ù£¬×îС»¯£¬×î´ó»¯£¬Òƶ¯£¬¸Ä±ä³ß´çµÈ´°¿Úʼþ£»

2. Íê³ÉϵͳָÁ

3. À´×ÔϵͳÏûÏ¢¶ÓÁÐÖеÄÒÆ¶¯Êó±ê£¬¼üÅÌʼþ£»

4. ÉèÖÃÊäÈë½¹µãʼþ£»

5. ͬ²½ÏµÍ³ÏûÏ¢¶ÓÁÐʼþ¡£

Hook×ӳ̵ķµ»ØÖµÈ·¶¨ÏµÍ³ÊÇ·ñÔÊÐí»òÕß·ÀÖ¹ÕâЩ²Ù×÷ÖеÄÒ»¸ö¡£

3¡¢WH_DEBUG Hook

ÔÚϵͳµ÷ÓÃϵͳÖÐÓëÆäËûHook¹ØÁªµÄHook×Ó³Ì֮ǰ£¬ÏµÍ³»áµ÷ÓÃWH_DEBUG Hook×ӳ̡£Äã¿ÉÒÔʹÓÃÕâ¸öHookÀ´¾ö¶¨ÊÇ·ñÔÊÐíϵͳµ÷ÓÃÓëÆäËûHook¹ØÁªµÄHook×ӳ̡£

4¡¢WH_FOREGROUNDIDLE Hook

µ±Ó¦ÓóÌÐòµÄǰ̨Ï̴߳¦ÓÚ¿ÕÏÐ״̬ʱ£¬¿ÉÒÔʹÓÃWH_FOREGROUNDIDLE HookÖ´ÐеÍÓÅÏȼ¶µÄÈÎÎñ¡£µ±Ó¦ÓóÌÐòµÄǰ̨Ï̴߳ó¸ÅÒª±ä³É¿ÕÏÐ״̬ʱ£¬ÏµÍ³¾Í»áµ÷ÓÃWH_FOREGROUNDIDLE Hook×ӳ̡£

5¡¢WH_GETMESSAGE Hook

Ó¦ÓóÌÐòʹÓÃWH_GETMESSAGE HookÀ´¼àÊÓ´ÓGetMessage or PeekMessageº¯Êý·µ»ØµÄÏûÏ¢¡£Äã¿ÉÒÔʹÓÃWH_GETMESSAGE HookÈ¥¼àÊÓÊó±êºÍ¼üÅÌÊäÈ룬ÒÔ¼°ÆäËû·¢Ë͵½ÏûÏ¢¶ÓÁÐÖеÄÏûÏ¢¡£

6¡¢WH_JOURNALPLAYBACK Hook

WH_JOURNALPLAYBACK HookʹӦÓóÌÐò¿ÉÒÔ²åÈëÏûÏ¢µ½ÏµÍ³ÏûÏ¢¶ÓÁС£¿ÉÒÔʹÓÃÕâ¸öHook»Ø·Åͨ¹ýʹÓÃWH_JOURNALRECORD Hook¼Ç¼ÏÂÀ´µÄÁ¬ÐøµÄÊó±êºÍ¼üÅÌʼþ¡£Ö»ÒªWH_JOURNALPLAYBACK HookÒѾ­°²×°£¬Õý³£µÄÊó±êºÍ¼üÅÌʼþ¾ÍÊÇÎÞЧµÄ¡£WH_JOURNALPLAYBACK HookÊÇÈ«¾ÖHook£¬Ëü²»ÄÜÏóÏß³ÌÌØ¶¨HookÒ»ÑùʹÓá£WH_JOURNALPLAYBACK Hook·µ»Ø³¬Ê±Öµ£¬Õâ¸öÖµ¸æËßϵͳÔÚ´¦ÀíÀ´×ԻطÅHookµ±Ç°ÏûϢ֮ǰÐèÒªµÈ´ý¶à³¤Ê±¼ä£¨ºÁÃ룩¡£Õâ¾ÍʹHook¿ÉÒÔ¿ØÖÆÊµÊ±Ê¼þµÄ»Ø·Å¡£WH_JOURNALPLAYBACKÊÇsystem-wide local hooks£¬Ëü‚ƒ²»•þ±»×¢Éäµ½ÈκÎÐгÌλַ¿Õég¡££¨¹À¼Æ°´¼ü¾«ÁéÊÇÓÃÕâ¸öhook×öµÄ£©

7¡¢WH_JOURNALRECORD Hook

WH_JOURNALRECORD HookÓÃÀ´¼àÊӺͼǼÊäÈëʼþ¡£µäÐ͵ģ¬¿ÉÒÔʹÓÃÕâ¸öHook¼Ç¼Á¬ÐøµÄÊó±êºÍ¼üÅÌʼþ£¬È»ºóͨ¹ýʹÓÃWH_JOURNALPLAYBACK HookÀ´»Ø·Å¡£WH_JOURNALRECORD HookÊÇÈ«¾ÖHook£¬Ëü²»ÄÜÏóÏß³ÌÌØ¶¨HookÒ»ÑùʹÓá£WH_JOURNALRECORDÊÇsystem-wide local hooks£¬Ëü‚ƒ²»•þ±»×¢Éäµ½ÈκÎÐгÌλַ¿Õég¡£

8¡¢WH_KEYBOARD Hook

ÔÚÓ¦ÓóÌÐòÖУ¬WH_KEYBOARD HookÓÃÀ´¼àÊÓWM_KEYDOWN and WM_KEYUPÏûÏ¢£¬ÕâЩÏûϢͨ¹ýGetMessage or PeekMessage function·µ»Ø¡£¿ÉÒÔʹÓÃÕâ¸öHookÀ´¼àÊÓÊäÈëµ½ÏûÏ¢¶ÓÁÐÖеļüÅÌÏûÏ¢¡£

9¡¢WH_KEYBOARD_LL Hook

WH_KEYBOARD_LL Hook¼àÊÓÊäÈëµ½Ïß³ÌÏûÏ¢¶ÓÁÐÖеļüÅÌÏûÏ¢¡£

10¡¢WH_MOUSE Hook

WH_MOUSE Hook¼àÊÓ´ÓGetMessage »òÕß PeekMessage º¯Êý·µ»ØµÄÊó±êÏûÏ¢¡£Ê¹ÓÃÕâ¸öHook¼àÊÓÊäÈëµ½ÏûÏ¢¶ÓÁÐÖеÄÊó±êÏûÏ¢¡£

11¡¢WH_MOUSE_LL Hook

WH_MOUSE_LL Hook¼àÊÓÊäÈëµ½Ïß³ÌÏûÏ¢¶ÓÁÐÖеÄÊó±êÏûÏ¢¡£

12¡¢WH_MSGFILTER ºÍ WH_SYSMSGFILTER Hooks

WH_MSGFILTER ºÍ WH_SYSMSGFILTER HooksʹÎÒÃÇ¿ÉÒÔ¼àÊӲ˵¥£¬¹ö¶¯Ìõ£¬ÏûÏ¢¿ò£¬¶Ô»°¿òÏûÏ¢²¢ÇÒ·¢ÏÖÓû§Ê¹ÓÃALT+TAB or ALT+ESC ×éºÏ¼üÇл»´°¿Ú¡£WH_MSGFILTER HookÖ»ÄܼàÊÓ´«µÝµ½²Ëµ¥£¬¹ö¶¯Ìõ£¬ÏûÏ¢¿òµÄÏûÏ¢£¬ÒÔ¼°´«µÝµ½Í¨¹ý°²×°ÁËHook×ӳ̵ÄÓ¦ÓóÌÐò½¨Á¢µÄ¶Ô»°¿òµÄÏûÏ¢¡£WH_SYSMSGFILTER Hook¼àÊÓËùÓÐÓ¦ÓóÌÐòÏûÏ¢¡£WH_MSGFILTER ºÍ WH_SYSMSGFILTER HooksʹÎÒÃÇ¿ÉÒÔÔÚģʽѭ»·ÆÚ¼ä¹ýÂËÏûÏ¢£¬ÕâµÈ¼ÛÓÚÔÚÖ÷ÏûϢѭ»·ÖйýÂËÏûÏ¢¡£Í¨¹ýµ÷ÓÃCallMsgFilter function¿ÉÒÔÖ±½ÓµÄµ÷ÓÃWH_MSGFILTER Hook¡£Í¨¹ýʹÓÃÕâ¸öº¯Êý£¬Ó¦ÓóÌÐòÄܹ»ÔÚģʽѭ»·ÆÚ¼äʹÓÃÏàͬµÄ´úÂëÈ¥¹ýÂËÏûÏ¢£¬ÈçͬÔÚÖ÷ÏûϢѭ»·ÀïÒ»Ñù¡£

13¡¢WH_SHELL Hook

Íâ¿ÇÓ¦ÓóÌÐò¿ÉÒÔʹÓÃWH_SHELL HookÈ¥½ÓÊÕÖØÒªµÄ֪ͨ¡£µ±Íâ¿ÇÓ¦ÓóÌÐòÊǼ¤»îµÄ²¢ÇÒµ±¶¥²ã´°¿Ú½¨Á¢»òÕßÏú»Ùʱ£¬ÏµÍ³µ÷ÓÃWH_SHELL Hook×ӳ̡£

WH_SHELL ¹²ÓУµÖÓÇé›r£º

Ö»ÒªÓиötop-level¡¢unowned ´°¿Ú±»²úÉú¡¢Æð×÷ÓᢻòÊDZ»´Ý»Ù£»

µ±TaskbarÐèÒªÖØ»­Ä³¸ö°´Å¥£»

µ±ÏµÍ³ÐèÒªÏÔʾ¹ØÓÚTaskbarµÄÒ»¸ö³ÌÐòµÄ×îС»¯ÐÎʽ£»

µ±Ä¿Ç°µÄ¼üÅ̲¼¾Ö״̬¸Ä±ä£»

µ±Ê¹ÓÃÕß°´Ctrl+EscÈ¥Ö´ÐÐTask Manager£¨»òÏàͬ¼¶±ðµÄ³ÌÐò£©¡£

°´ÕÕ¹ßÀý£¬Íâ¿ÇÓ¦ÓóÌÐò¶¼²»½ÓÊÕWH_SHELLÏûÏ¢¡£ËùÒÔ£¬ÔÚÓ¦ÓóÌÐòÄܹ»½ÓÊÕWH_SHELLÏûϢ֮ǰ£¬Ó¦ÓóÌÐò±ØÐëµ÷ÓÃSystemParametersInfo function×¢²áËü×Ô¼º¡£

ÒÔÉÏÊÇ13ÖÖ³£ÓõÄhookÀàÐÍ£¡

2¡¢°´Ê¹Ó÷¶Î§·ÖÀà

Ö÷ÒªÓÐÏ̹߳³×ÓºÍϵͳ¹³×Ó£º

£¨1£© Ï̹߳³×Ó¼àÊÓÖ¸¶¨Ï̵߳ÄʼþÏûÏ¢¡£

£¨2£© ϵͳ¹³×Ó¼àÊÓϵͳÖеÄËùÓÐÏ̵߳ÄʼþÏûÏ¢¡£ÒòΪϵͳ¹³×Ó»áÓ°ÏìϵͳÖÐËùÓеÄÓ¦ÓóÌÐò£¬ËùÒÔ¹³×Óº¯Êý±ØÐë·ÅÔÚ¶ÀÁ¢µÄ¶¯Ì¬Á´½Ó¿â(DLL)

ÖС£ÕâÊÇϵͳ¹³×ÓºÍÏ̹߳³×ӺܴóµÄ²»Í¬Ö®´¦¡£

¼¸µãÐèҪ˵Ã÷µÄµØ·½£º

£¨1£© Èç¹û¶ÔÓÚͬһʼþ£¨ÈçÊó±êÏûÏ¢£©¼È°²×°ÁËÏ̹߳³×ÓÓÖ°²×°ÁËϵͳ¹³×Ó£¬ÄÇôϵͳ»á×Ô¶¯Ïȵ÷ÓÃÏ̹߳³×Ó£¬È»ºóµ÷ÓÃϵͳ¹³×Ó¡£

£¨2£© ¶ÔͬһʼþÏûÏ¢¿É°²×°¶à¸ö¹³×Ó´¦Àí¹ý³Ì£¬ÕâЩ¹³×Ó´¦Àí¹ý³ÌÐγÉÁ˹³×ÓÁ´¡£µ±Ç°¹³×Ó´¦Àí½áÊøºóÓ¦°Ñ¹³×ÓÐÅÏ¢´«µÝ¸øÏÂÒ»¸ö¹³×Óº¯Êý¡£¶øÇÒ×î½ü°²×°µÄ¹³×Ó·ÅÔÚÁ´µÄ¿ªÊ¼£¬¶ø×îÔç°²×°µÄ¹³×Ó·ÅÔÚ×îºó£¬Ò²¾ÍÊǺó¼ÓÈëµÄÏÈ»ñµÃ¿ØÖÆÈ¨¡£

£¨3£© ¹³×ÓÌØ±ðÊÇϵͳ¹³×Ó»áÏûºÄÏûÏ¢´¦Àíʱ¼ä£¬½µµÍϵͳÐÔÄÜ¡£Ö»ÓÐÔÚ±ØÒªµÄʱºò²Å°²×°¹³×Ó£¬ÔÚʹÓÃÍê±ÏºóÒª¼°Ê±Ð¶ÔØ¡£

0x03±àд¹³×Ó³ÌÐò

±àд¹³×Ó³ÌÐòµÄ²½Öè·ÖΪÈý²½£º¶¨Òå¹³×Óº¯Êý¡¢°²×°¹³×ÓºÍÐ¶ÔØ¹³×Ó¡£

1£®¶¨Òå¹³×Óº¯Êý

¹³×Óº¯ÊýÊÇÒ»ÖÖÌØÊâµÄ»Øµ÷º¯Êý¡£¹³×Ó¼àÊÓµÄÌØ¶¨Ê¼þ·¢Éúºó£¬ÏµÍ³»áµ÷Óù³×Óº¯Êý½øÐд¦Àí¡£²»Í¬Ê¼þµÄ¹³×Óº¯ÊýµÄÐÎʽÊǸ÷²»ÏàͬµÄ¡£ÏÂÃæÒÔÊó±ê¹³×Óº¯Êý¾ÙÀý˵Ã÷¹³×Óº¯ÊýµÄÔ­ÐÍ£º

LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam)

²ÎÊýwParamºÍ lParam°üº¬Ëù¹³ÏûÏ¢µÄÐÅÏ¢£¬±ÈÈçÊó±êλÖá¢×´Ì¬£¬¼üÅ̰´¼üµÈ¡£nCode°üº¬ÓйØÏûÏ¢±¾ÉíµÄÐÅÏ¢£¬±ÈÈçÊÇ·ñ´ÓÏûÏ¢¶ÓÁÐÖÐÒÆ³ö¡£

ÎÒÃÇÏÈÔÚ¹³×Óº¯ÊýÖÐʵÏÖ×Ô¶¨ÒåµÄ¹¦ÄÜ£¬È»ºóµ÷Óú¯Êý CallNextHookEx.°Ñ¹³×ÓÐÅÏ¢´«µÝ¸ø¹³×ÓÁ´µÄÏÂÒ»¸ö¹³×Óº¯Êý¡£CallNextHookEx.µÄÔ­ÐÍÈçÏ£º

LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam )

²ÎÊý hhkÊǹ³×Ó¾ä±ú¡£nCode¡¢wParamºÍlParam Êǹ³×Óº¯Êý¡£

µ±È»Ò²¿ÉÒÔͨ¹ýÖ±½Ó·µ»ØTRUEÀ´¶ªÆú¸ÃÏûÏ¢£¬¾Í×èÖ¹Á˸ÃÏûÏ¢µÄ´«µÝ¡£

2£®°²×°¹³×Ó

ÔÚ³ÌÐò³õʼ»¯µÄʱºò£¬µ÷Óú¯ÊýSetWindowsHookEx°²×°¹³×Ó¡£Æäº¯ÊýÔ­ÐÍΪ£º

HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId )

²ÎÊýidHook±íʾ¹³×ÓÀàÐÍ£¬ËüÊǺ͹³×Óº¯ÊýÀàÐÍÒ»Ò»¶ÔÓ¦µÄ¡£±ÈÈ磬WH_KEYBOARD±íʾ°²×°µÄÊǼüÅ̹³×Ó£¬WH_MOUSE±íʾÊÇÊó±ê¹³×ӵȵȡ£

LpfnÊǹ³×Óº¯ÊýµÄµØÖ·¡£

HModÊǹ³×Óº¯ÊýËùÔÚµÄʵÀýµÄ¾ä±ú¡£¶ÔÓÚÏ̹߳³×Ó£¬¸Ã²ÎÊýΪNULL£»¶ÔÓÚϵͳ¹³×Ó£¬¸Ã²ÎÊýΪ¹³×Óº¯ÊýËùÔÚµÄDLL¾ä±ú¡£

dwThreadId Ö¸¶¨¹³×ÓËù¼àÊÓµÄÏ̵߳ÄÏ̺߳š£¶ÔÓÚÈ«¾Ö¹³×Ó£¬¸Ã²ÎÊýΪNULL¡£

SetWindowsHookEx·µ»ØËù°²×°µÄ¹³×Ó¾ä±ú¡£

3£®Ð¶Ôع³×Ó

µ±²»ÔÙʹÓù³×Óʱ£¬±ØÐë¼°Ê±Ð¶ÔØ¡£¼òµ¥µØµ÷Óú¯Êý£º

BOOL UnhookWindowsHookEx( HHOOK hhk)¼´¿É¡£

ÖµµÃ×¢ÒâµÄÊÇÏ̹߳³×ÓºÍϵͳ¹³×ӵĹ³×Óº¯ÊýµÄλÖÃÓкܴóµÄ²î±ð¡£Ï̹߳³×ÓÒ»°ãÔÚµ±Ç°Ï̻߳òÕßµ±Ç°Ïß³ÌÅÉÉúµÄÏß³ÌÄÚ£¬¶øÏµÍ³¹³×Ó±ØÐë·ÅÔÚ¶ÀÁ¢µÄ¶¯Ì¬Á´½Ó¿âÖУ¬ÊµÏÖÆðÀ´ÒªÂ鷳һЩ¡£

0x04 Ò»¸öʵÀý¡ª¡ªµÍ¼¶Êó±ê¹³×Ó³ÌÐò

ÓÉ0x02½Ú£¬Êó±ê¹³×ÓÀàÐÍÓÐÁ½¸ö£¬Ò»¸öÊÇWH_MOUSE£¬ÁíÒ»¸öÊÇWH_MOUSE_LL¡£ÆäÖÐWH_MOUSE_LL Hook£¬WH_MOUSE_LL Hook¼àÊÓÊäÈëµ½Ïß³ÌÏûÏ¢¶ÓÁÐÖеÄÊó±êÏûÏ¢¡£±¾Àý²âÊÔµÄÊÇWH_MOUSE_LL¡£

²Î¿´ÉÏһС½á¿ÉÖª£¬±àд¹³×Ó³ÌÐòµÄÈý¸ö²½×àÊÇ£º

1.¶¨Òå¹³×Óº¯Êý£º

LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam)

1.°²×°¹³×Ó£º

HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId )

1.Ð¶ÔØ¹³×Ó£º

BOOL UnhookWindowsHookEx( HHOOK hhk)

»¹ÐèҪעÒâÒ»µã£ºÏµÍ³¹³×Ó±ØÐë·ÅÔÚ¶ÀÁ¢µÄ¶¯Ì¬Á´½Ó¿âÖС£ÓÉ´Ë£¬³ÌÐò·ÖΪÁ½¸ö²¿·Ö£ºÒ»¸öÊǹ³×Ó³ÌÐò¶¯Ì¬Á´½Ó¿â£¬ÊµÏÖÁËÊó±ê¹³×Ó³ÌÐò£»ÁíÒ»¸öÊÇMFC²Ù×÷´°Ì壬¶ÔDLL½øÐмÓÔØºÍÐ¶ÔØ£¬¼´¶ÔDLL½øÐвâÊÔ¡£

1.HOOK DLLµÄ±àд

н¨ÏîÄ¿¡ª¡ª> Visual C++ ¡ª¡ª> MFC DLL

×Ô¶¨ÒåÏûÏ¢

#define WM_HOOKMSG WM_USER + 106    // ×Ô¶¨ÒåÏûÏ¢

¹²Ïí´úÂë¶Î£¬ËùÓÐÏ̹߳²Ïí

#pragma data_seg("SHARED")
static HHOOK hhkMouse = NULL; // Êó±ê¹³×Ó¾ä±ú
static HINSTANCE g_hInstance = NULL; // ±¾DLLµÄʵÀý¾ä±ú
static HWND g_hWnd = NULL; // µ÷ÓÃDLLµÄÖ÷´°¿Ú¾ä±ú
#pragma data_seg()
#pragma comment(linker,"/section:SHARED,rws")

¶¨ÒåµÍ¼¶Êó±ê×Óº¯Êý

LRESULT CALLBACK LowLevelMouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
// ÓÐÊó±êÏûϢʱ£¬½«Æä·¢¸øÖ÷³ÌÐò
if ( g_hWnd != NULL && nCode == HC_ACTION)
{
::SendMessage(g_hWnd,WM_HOOKMSG,wParam,lParam);
}
return CallNextHookEx(hhkMouse,nCode,wParam,lParam);
}

°²×°µÍ¼¶Êó±ê×Óº¯Êý£¬´Ó¶ø½Ø»ñϵͳËùÓеÄÊó±êÏûÏ¢

#pragma data_seg("SHARED")
static HHOOK hhkMouse = NULL; // Êó±ê¹³×Ó¾ä±ú
static HINSTANCE g_hInstance = NULL; // ±¾DLLµÄʵÀý¾ä±ú
static HWND g_hWnd = NULL; // µ÷ÓÃDLLµÄÖ÷´°¿Ú¾ä±ú
#pragma data_seg()
#pragma comment(linker,"/section:SHARED,rws")

°²×°µÍ¼¶Êó±ê×Óº¯Êý£¬´Ó¶ø½Ø»ñϵͳËùÓеÄÊó±êÏûÏ¢

BOOL WINAPI StartHookMouse(HWND hwnd)
{
g_hWnd = hwnd;
hhkMouse = SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,g_hInstance,0);
if ( NULL == hhkMouse)
{
return FALSE;
}
else
{
return TRUE;
}

}

Ð¶ÔØµÍ¼¶Êó±ê¹³×Ó

VOID WINAPI StopHookMouse()
{
if (hhkMouse != NULL)
{
::UnhookWindowsHookEx(hhkMouse);
}
}

»ñÈ¡×ÔÉíµÄDLL¾ä±ú

// ChookDllApp ³õʼ»¯
BOOL ChookDllApp::InitInstance()
{
CWinApp::InitInstance();

//
// »ñÈ¡×ÔÉíµÄdll¾ä±ú
//
g_hInstance = ::AfxGetInstanceHandle();

return TRUE;
}

hookDll.defÎļþ£¬¹³×ӵļÓÔØºÍÐ¶ÔØº¯Êý

; hookDll.def : ÉùÃ÷ DLL µÄÄ£¿é²ÎÊý¡£
LIBRARY "MouseHook"

EXPORTS
; ´Ë´¦¿ÉÒÔÊÇÏÔʽµ¼³ö
StartHookMouse
StopHookMouse

MFC´°Ìå±àд

ÏûÏ¢¶¨Òå

#define WM_MOUSEMSG WM_USER + 106

Ìí¼ÓÏûÏ¢Ó³Éä

BEGIN_MESSAGE_MAP(ChookWindowDlg, CDialogEx)

//¡­¡­ ¡­¡­

ON_MESSAGE(WM_MOUSEMSG,&ChookWindowDlg::OnMouseMsg) //ÏûÏ¢Ó³Éä

END_MESSAGE_MAP()

Êó±ê¹³×ӵļÓÔØºÍÐ¶ÔØ

HINSTANCE g_hInstanceDll = NULL;
//
// Æô¶¯Êó±ê¹³×Ó
//
void ChookWindowDlg::OnBnClickedButtonStart()
{
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
g_hInstanceDll = LoadLibrary(_T("hookDll.dll"));
if (NULL == g_hInstanceDll)
{
AfxMessageBox(_T("¼ÓÔØhookDll.dllʧ°Ü"));
return;
}
typedef BOOL (CALLBACK *StartHookMouse)(HWND hwnd);
StartHookMouse startHook;
startHook = (StartHookMouse) ::GetProcAddress(g_hInstanceDll,"StartHookMouse");
if ( NULL == startHook )
{
AfxMessageBox(_T("»ñÈ¡ StartHookMouse º¯Êýʧ°Ü"));
return;
}

if (startHook(this->m_hWnd))
{
m_List.InsertItem(m_List.GetItemCount(),_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,1,_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,2,_T("Æô¶¯Êó±ê¹³×ӳɹ¦"));
}
else
{
m_List.InsertItem(m_List.GetItemCount(),_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,1,_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,2,_T("Æô¶¯Êó±ê¹³×Óʧ°Ü"));
}

}

//
// Í£Ö¹Êó±ê¹³×ÓHOOK
//
void ChookWindowDlg::OnBnClickedButtonHook()
{
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
typedef VOID (CALLBACK *StopHookMouse)();
StopHookMouse stopHook;
g_hInstanceDll = LoadLibrary(_T("hookDll.dll"));
if ( g_hInstanceDll == NULL)
{
AfxMessageBox(_T("¼ÓÔØDLLʧ°Ü"));
return;
}

stopHook = (StopHookMouse) ::GetProcAddress(g_hInstanceDll,"StopHookMouse");
if (stopHook == NULL)
{
m_List.InsertItem(m_List.GetItemCount(),_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,1,_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,2,_T("»ñÈ¡º¯Êý StopHookMouse ʧ°Ü"));
return;
}
else
{
stopHook();
m_List.InsertItem(m_List.GetItemCount(),_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,1,_T("0"));
m_List.SetItemText(m_List.GetItemCount()-1,2,_T("Í£Ö¹HOOKMOUSE³É¹¦"));
}

if (g_hInstanceDll != NULL)
{
::FreeLibrary(g_hInstanceDll);
}

// È·±£list control ×îºóÒ»Ðпɼû
m_List.EnsureVisible(m_List.GetItemCount()-1,FALSE);

}

   
3815 ´Îä¯ÀÀ       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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ