Window Message Hook funktioniert nicht?



  • Aber warum funktioniert dann WH_KEYBOARD problemlos? Wenn ich das als Parameter übergebe macht das die dll ja nicht zu einem 64 Bit Prozess (oder?), injected wird sie aber trotzdem korrekt.


  • Mod

    Benutz den Debugger und schau was im Zielprozess passiert.
    Das erübrigt auch so was Unsinniges wie eine MessageBox zu benutzen in der "WndProc"...

    Besser für solche Zwecke geeignet ist auch OutputDebugString!



  • Ja, also ich bin da schon mit dem Debugger durchgegangen (Schritt für Schritt) und das komische ist dass das Program nie in die Callback Funktion der dll reingeht.

    Also bei Startup läuft der schön Schritt für Schritt durch die Hook initialisierung (Funktion OnStart) und erkennt auch alles richtig. Notepad Handle, Prozess Handle etc wird alles richtig erkannt (mit Spy++ gecheckt).

    Nur in die Callback Funktion geht er nie. Wenn ich aber WH_KEYBOARD benutze funktioniert es und ich lande bei gesetztem Breakpoint auch direkt in der Callback Funktion. Leider reichen mir Keyboard Events nicht 😞


  • Mod

    Debugge den Zielprozess. Wird dort die DLL geladen?



  • Also der Zielprozess ist in dem Fall ja meine erste dll, welche die Hook.dll lädt (nur damit ich das richtig verstanden habe)?

    Also in der Funktion OnStart wird die dll welche die Callback Funktion für die Hook lädt erfolgreich geladen. Nach dieser Zeile:

    HINSTANCE hinstDLL = LoadLibrary(L"Hook.dll");
    

    Ist hinstDLL ein Handle ungleich NULL, das Laden muss also erfolgreich gewesen sein. Auch lande ich bei gesetztem Breakpoint in der DllMain Funktion der Hook.dll, das Laden klappt also auf jeden Fall.


  • Mod

    Nein! Dein Zielprozess ist Notepad. Attache Dich mit dem Debugger und schau was passiert.



  • Äh, wie macht man denn so was?

    Hab mittels "Debug->Attach to Process..." den Debuger zu dem Notepad Prozess hinzugefügt, aber wie schau ich jetzt was da intern passiert?

    Wenn ich in der Menüleiste bei Process Notepad.exe auswähle bekomme ich die Meldung:

    "No symbols are loaded for any call stack frame. The source code cannot be displayed."

    Wie soll ich denn ohne den Source Code das Debuggen können?


  • Mod

    1. kannst Du im Debug-Output View sehen ob Deine DLL geladene wird.
    2. Wenn Deine DLL geladen ist, kannst Du auch im fremden Prozess Deine DLL debuggen.



  • Ok, hab das mal gemacht.

    Im Debug Output Fenster wird durch den Aufruf der Funktion OnStart folgendes ausgegeben:

    The thread 'Win64 Thread' (0xa20) has exited with code 0 (0x0).
    'dllDebugger.exe': Loaded 'C:\Users\XYZ\Documents\Visual Studio 2008\Projects\myProject\Hook.dll', Symbols loaded.

    Da steht nichts von notepad.exe. Heißt dass die dll wurde nicht richtig geladen?

    Allerdings: Wenn ich wieder WH_KEYBOARD anstatt WH_CALLWNDPROC verwende steht da genau das Gleiche. Wenn ich dann in notpad irgendwas eintippe wird die callback Funktion korrekt aufgerufen, im Debugger erscheint aber die Meldung:

    First-chance exception at 0x696f1476 (Hook.dll) in dllDebugger.exe: 0xC0000005: Access violation reading location 0x0026000d.

    Könnte das Problem damit zusammenhängen?



  • Hallo,

    ich komm hier leider immer noch nicht weiter... Hab auch extra mal ein paar alte Programme genommen die sicher 32 bit sind, aber daran liegt es auch nicht.

    Was ich bei dem debugging nicht verstehe ist auch dass mir gar nicht angezeigt wird ob die dll jetzt geladen wurde oder nicht. Also ich füge per "Debug->Attach to Process..." den Prozess des jeweiligen Zielprogramms hinzu, aber im Debug-Output View steht nichts davon dass die dll geladen wurde.

    Komischerweise auch bei WH_KEYBOARD nicht, obwohl es da ja offensichtlich klappt mit dem Laden.

    Das kann doch nicht so schwer sein?


Anmelden zum Antworten