CreateRemoteThread
-
Hallo,
Ich habe per CreateRemoteThread eine DLL in einen Prozess injiziert und will jetzt während die DLL_PROCESS_ATTACH Nachricht verarbeitet wird, einen lokalen Keyboard Hook auf einen Thread von diesem Prozess installieren, aber die KeyboardHookProc wird nie aufgerufen. Die ThreadId ist richtig, das hab ich in Spy++ nachgeschaut..hab ich irgendwas falsch verstanden oder wieso geht das nicht?
HHOOK hhkHook; // // KeyboardHookProc // LRESULT CALLBACK KeyboardHookProc( int nCode, WPARAM wParam, LPARAM lParam ) { MessageBox( NULL, "KeyboardHookProc", "", 0 ); return CallNextHookEx( hhkHook, nCode, wParam, lParam ); } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { HWND hWndEDIT; DWORD dwThreadId; char szMsg[64]; switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: hWndEDIT = FindWindow( NULL, "MainEditWnd" ); if( !hWndEDIT ) break; dwThreadId = GetWindowThreadProcessId( hWndEDIT, NULL ); hhkHook = SetWindowsHookEx( WH_KEYBOARD, KeyboardHookProc, NULL, dwThreadId ); if( hhkHook == NULL ) { MessageBox( NULL, "SetWindowsHookEx failed", "Error", 0 ); return FALSE; } sprintf( szMsg, "Keyboard Hook attached to Thread 0x%x", dwThreadId ); MessageBox( NULL, szMsg, "DLL_PROCESS_ATTACH", 0 ); break; case DLL_PROCESS_DETACH: UnhookWindowsHookEx( hhkHook ); sprintf( szMsg, "Keyboard Hook detached" ); MessageBox( NULL, szMsg, "DLL_PROCESS_DETACH", 0 ); break; } return TRUE; }
-
Prüfe zuerst einmal ob deine DLL in einem Testprogram von dir funktioniert.
Dort kanst du debuggen. Danach prüfe einmal ob die DLL geladen wird.
Mit Visual-Studio an einen Prozess attachen
Unter Debug-Module nach sehen ob die DLL geladen wurdeMeine Home-Page
[url]
http://members.inode.at/anton.zechner/az/index.html
[/url]