|
 |
 |
| ¸¶À» °Ô½ÃÆÇ |
µî·ÏµÈ
¸¶À» °Ô½ÃÆÇÀÌ
¾ø½À´Ï´Ù. |
|
|
|
|
 |
|
|
|
|
|
|
[hook] win32 ±Û·Î¹ß ÈÄÅ·Çϱâ | VC++ ÀÏ¹Ý |
2001-12-19 ¿ÀÈÄ 2:09:12 |
|
| Á¶°æ¹Î
|
¹øÈ£:
3647
/ ÀÐÀ½:10,323 |
¿ÀÀü 1:42 2000/10/05 Á¶°æ¹Î Global Hooking in Win32 ====================================================
ÈÄÅ©¿¡´Â µÎ°¡Áö°¡ ÀÖ´Ù. Local Hook - ÇϳªÀÇ ½º·¹µå³ª ÇÁ·Î¼¼½º ¾È¿¡¼ÀÇ ÈÄÅ· Global Hook - Àü¿ª ¸ðµç À©µµ¿ìµé¿¡ ´ëÇÑ ÈÄÅ·
ÈÄÅ©¸¦ Çϱâ À§Çؼ´Â ±âº»ÀûÀ¸·Î µÎ°¡Áö ÀÚ·áÇüÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. HHOOK - ÈÄÅ© ÇÚµé À©µµ¿ì ½Ã½ºÅÛ¿¡¼ Çѹø À̺¥Æ®°¡ ¹ß»ýÇϸé ÈÄÅ© üÀÎÀÇ Ã¹ ÈÄÅ©Çڵ鿡°Ô À̺¥Æ®¸¦ ³Ñ±ä´Ù. °¢ ÈÄÅ©µéÀº ´ÙÀ½ ÈÄÅ©¸¦ È£ÃâÇÏ¿© ÈÄũüÀο¡ ÀÖ´Â ¸ðµç ÈÄÅ© ÇÁ·Î½ÃÁ®¸¦ È£ÃâÇÏ°Ô µÈ´Ù. HOOKPROC - ÈÄÅ© ÇÁ·Î½ÃÁ®·Î ÈÄÅ©½Ã È£ÃâµÇ´Â ÇÁ·Î½ÃÁ®ÀÌ´Ù. LRESULT CALLBACK fnHookProc(int nCode, WPARAM wParam, LPARAM lParam) ¶ó´Â ÀÚ·áÇüÀ» °®´Â´Ù.
1. ·ÎÄà ÈÄÅ· SetWindowHookEx¸¦ ÀÌ¿ëÇÏ¸é °£´ÜÈ÷ ±¸ÇöÀÌ °¡´ÉÇÏ´Ù. °¢ ÈÄÅ©´Â ÈÄÅ© ŸÀÔÀÌ Àִµ¥ ¾Æ·¡¿Í °°´Ù. WH_CALLWNDPROC - À©µµ¿ì ¸Þ¼¼Áö°¡ ¸ñÀûÁö·Î Àü´ÞµÇ±â Àü¿¡ ¸Þ¼¼Áö¸¦ ÈÄÅ©ÇÒ¶§ ¾´´Ù (SendMessage) CallWndProc¶ó´Â ÈÄÅ©ÇÁ·Î½ÃÁ®¸íÀÇ µµ¿ò¸» ÂüÁ¶ÇÑ´Ù. WH_CALLWNDPROCRET - À©µµ¿ì ¸Þ¼¼Áö°¡ ¸ñÀûÁö¿¡ Àü´ÞµÇ¾î ó¸® µÈ ÈÄ ÈÄÅ©°¡ ÀϾ٠CallWndRetProcÇÔ¼ö¸í µµ¿ò¸» ÂüÁ¶ WH_CBT - computer-based training (CBT) application ¿¡ À¯¿ëÇÑ ÈÄÅ© ŸÀÔ CBTProc ÇÔ¼ö ÂüÁ¶ WH_DEBUG - µð¹ö±ë¿¡ À¯¿ëÇÑ ÈÄÅ© DebugProc ÂüÁ¶ WH_FOREGROUNDIDLE - Foreground»óÅÂÀÖ´Â À©µµ¿ì°¡ idle»óÅ·Πµé¾î°¥ ¶§ »ý±â´Â ÈÄÅ© ÀÌ´Â idle½Ã ³·Àº ¿ì¼±¼øÀ§ (low priority)¸¦ ÁÙ¶§ À¯¿ëÇÏ´Ù ForegroundIdleProc WH_GETMESSAGE - ¸Þ¼¼Áö°¡ PostµÈ ÈÄ ÈÄÅ©µÊ (PostMessage) GetMsgProc ÇÔ¼ö ÂüÁ¶ WH_JOURNALPLAYBACK - WH_JOURNALRECORD¿¡ ÀÇÇØ¼ RecordµÇ±â Àü¿¡ ÀϾ´Â ÈÄÅ© JournalPlaybackProc WH_JOURNALRECORD - Input message°¡ ½Ã½ºÅÛ ¸Þ¼¼Áö Å¥·Î µé¾î°¡´Â°ÍÀ» RecordÇÏ´Â ÈÄÅ© JournalRecordProc WH_KEYBOARD - µîµîÀÌ ÀÖ´Ù.... -_- µµ¿ò¸» ÂüÁ¶..
--------------------- ·ÎÄà ÈÄÅ© ¿¹Á¦ ------------------------------ HHOOK hHook; HOOKPROC hProc; : hProc = CallWndProc; // CallWndProc ÈÄÅ© ÇÁ·Î½ÃÁ®·Î ¿¬°á hHook = ::SetWindowsHookEx( // ÈÄÅ©¸¦ ¼³Ä¡ÇÑ´Ù. ( ÈÄũüÀο¡ ³¢¿ö³Ö´Â´Ù ) WH_CALLWNDPROC, // WH_CALLWNDPROC ÈÄÅ© ¼³Ä¡ hProc, // ÈÄÅ©Â÷·Ê°¡ ¿À¸é ºÐ±âµÇ´Â ÄݹéÈÄÅ© ÇÁ·Î½ÃÁ® (HINSTANCE) NULL, // Àü¿ª ÈÄÅ©°¡ ¾Æ´Ñ ·ÎÄà ÈÄÅ©ÀÓÀ» ¸»ÇÑ´Ù dwTreadID); // ƯÁ¤ ½º·¹µå¸¦ Á¤ÇÑ´Ù 0 À̸é ÇöÀç ½º·¹µå
¸¸ÀÏ ¿©·¯ ½º·¹µåÁß ÇÑ HWND°¡ ¼ÓÇÑ ½º·¹µå¸¦ ¾ò°í ½ÍÀ¸¸é DWORD dwProcessID = NULL; DWORD dwTreadID = ::GetWindowThreadProcessId( hWnd, &dwProcessID );
if( dwProcessID ) { : ÈÄÅ© ¼³Ä¡ÄÚµå ¸Ç ¸¶Áö¸·ÀÎÀÚ¿¡ dwThreadID¸¦ ³ÖÀ¸¸é µÈ´Ù. }
// ÀÚ¼¼ÇÑ ÇÁ·Î½ÃÁ® µµ¿ò¸»À» º¸¸é ÀÚ¼¼È÷ ¾Ë¼ö ÀÖ´Ù. LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { CWPSTRUCT* lpWp = (CWPSTRUCT*)lParam; //PMSG lpMsg = (PMSG)lParam; if (nCode < 0 && hWnd == lpWp->hwnd ) // do not process message return CallNextHookEx(m_stHookCallProc.hHook, nCode, wParam, lParam);
switch( lpWp->message ) { case EM_REPLACESEL : TRACE("CallWndProc EM_REPLACESEL %s\r\n ", (char*)lpWp->lParam ); break;
default : break; } return CallNextHookEx(m_stHookCallProc.hHook, nCode, wParam, lParam); } 2 Àü¿ª ÈÄÅ· Àü¿ª ÈÄÅ·À» Çϱâ À§Çؼ´Â ÈÄÅ© ÇÁ·Î½ÃÁ®¸¦ dll¾È¿¡ ³Ö¾î¾ß ÇÑ´Ù.
--------------------- Àü¿ª ÈÄÅ© ¿¹Á¦ --------------------------
testdll.dll ¿¡¼ ............
// dll¿¡¼ ¾²´Â ÀÚ·á´Â dll°øÀ¯¸¦ Çß´Ù. // ÀÌ ÈÄÅ© ÇÁ·Î½ÃÁ® dllÀº ³» ÇÁ·Î±×·¥¿¡¼ ¾²À̱⵵ ÇÏÁö¸¸ // ½Ã½ºÅÛ¿¡ ÀÇÇØ¼ ÀÌ dllÀÌ ¶Ç ¿¸®°Ô µÈ´Ù. ( dllÀÇ ÂüÁ¶Ä«¿îÆ® Áõ°¡ // °¡ ÀϾÁö ¾Ê°í »õ·Î dllÀÌ »ý±ä´Ù. µû¶ó¼ µÎ dllÀº ÀÚ·á°¡ // ºÐ¸®µÇ¾î ÀÖ´Â ¼ÀÀÌ´Ù. ) // ±×·¯¹Ç·Î ºÎµæÀÌ ÇÏ°Ô ÀڷḦ °øÀ¯ÀÚ·á·Î ÇØ¾ß ÇÑ´Ù. #pragma data_seg(".shared") HHOOK _hHook = NULL; HWND _hTarget = NULL; #pragma data_seg() // °øÀ¯ ÀÚ·á·Î ÇßÀ» °æ¿ì ¾Æ·¡Ã³·³ ¸µÄ¿ ¿É¼Çµµ ÁÖ¾î¾ß ÇÑ´Ù. #pragma comment(linker, "/SECTION:.shared,RWS")
// ÀÚ·á ¾ï¼¼½º ÇÔ¼ö ¸¶·Ã... extern "C" __declspec(dllexport) void fnSetHook( HHOOK hHook ) { _hHook = hHook; }
extern "C" __declspec(dllexport) void fnSetHWND( HWND hWnd ) { _hTarget = hWnd; char szBuf[20]; wsprintf( szBuf, "%lu", (ULONG)_hTarget ); MessageBox( NULL, szBuf, "fnSetHWND´ç½ÃÀÇ _hTarget°ª", MB_OK); }
extern "C" __declspec(dllexport) HHOOK fnGetHook() { return _hHook; }
// ÄݹéÀ» À§ÇÑ CALLBACK ÄݸµÄÁº¥¼Ç Ű¿öµå¸¦ ³Ö°Ô µÇ¸é ³ªÁß¿¡ GetAddressProc½Ã // NULL°ªÀ» ¸®ÅÏÇϹǷΠ±×³É ÄݸµÄÁº¥¼ÇÀ» ¹«½ÃÇß´Ù //extern "C" __declspec(dllexport) LRESULT CALLBACK fnCallWndProc(int nCode, WPARAM wParam, LPARAM lParam) extern "C" __declspec(dllexport) LRESULT fnCallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { CWPSTRUCT* lpWp = (CWPSTRUCT*)lParam; if( nCode >= 0 ) //&& _hTarget == lpWp->hwnd ) // do not process message { switch( lpWp->message ) { case EM_REPLACESEL : if( _hTarget == lpWp->hwnd ) { MessageBox( NULL, "EM_REPLACESEL ¸Þ¼¼Áö ¹ß½ß", "¸Þ¼¼Áö ¹ß½ßin dll", MB_OK); } break;
default : break; } } return CallNextHookEx( _hHook, nCode, wParam, lParam); }
³» ÇÁ·Î±×·¥¿¡¼ ......................... HINSTANCE hInstDll = NULL HHOOK hHook = NULL;
// dllÀ» ¿¬´Ù. hInstDll = LoadLibrary("TestDll.dll"); if( hInstDll ) { // ÈÄÅ© ÇÁ·Î½ÃÁ®¸¦ ã¾Æ³½´Ù. LRESULT (*hHookDllProc)(int, WPARAM, LPARAM ) = (LRESULT (*)(int, WPARAM, LPARAM )) GetProcAddress(hInstDll, "fnCallWndProc"); if( hHookDllProc ) // ÀÖÀ¸¸é ÈÄÅ©¸¦ ¼³Ä¡ÇÑ´Ù. hHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC)hHookDllProc, hInstDll, 0); // dll³»ÀÇ ÀڷḦ ¼¼ÆÃÇÑ´Ù. HHOOK¿Í HWND °ª ¼¼ÆÃ void (*lpfnSetHook)(HHOOK) = (void (*)(HHOOK))GetProcAddress(hInstDll, "fnSetHook"); if( lpfnSetHook ) (*lpfnSetHook)( hHook ); void (*lpfnSetHWND)(HWND) = (void (*)(HWND))GetProcAddress (hInstDll, "fnSetHWND"); if( lpfnSetHWND ) (*lpfnSetHWND)( m_hTarget ); } |
|
|
|
|
|
|
|
|
|
|
|
µ¦½ºÆÛÆ®(dExpert)
|
|
 |
|
|
15,000¿ø |
|
|
|
15,000¿ø |
|
|
|
15,000¿ø |
|
|
|
10,000¿ø |
|
|
|
15,000¿ø |
|
|
|
15,000¿ø |
|
|
|
10,000¿ø |
|
|
 |
|
|
50,000¿ø |
|
|
|
3,000¿ø |
|
|
|
3,000¿ø |
|
|
|
10,000¿ø |
|
|
|
5,000¿ø |
|
|
|
3,000¿ø |
|
|
|
10,000¿ø |
|
|
|
|
|
|
|
|
|