Hookdll - Tastatureingaben übergeben



  • Hallo Leute!
    Ich programmiere zur Zeit an einem Keylogger (Server), der die Tastatureingaben
    über das Internet an einen Clienten sendet. Da der Server aber keinen Fensterhandle hat, wollte ich euch fragen, ob es eine andere Möglichkeit gibt,
    die Tastatureingaben aus der Hookdll (http://c-plusplus.net/forum/viewtopic.php?t=39383) an das Hauptprogramm zu übergeben,

    Bin euch für jede Antwort dankbar 🙂



  • Du kasst die Daten dem Hauptprogramm zukommenlassen, wie du willst (z.B. kannst du es ihm mit einem Event signalisieren. Im Prinzip kannst du aber auch direkt in der Hook-DLL die Daten verschicken.

    Aber insgesamt hört sich das, was du da machen willst nicht ganz legal / "sauber" an ⚠



  • Hi flenders!
    Vielen Dank für deine Tipps!
    Werde wahrscheinlich die Daten direkt aus der DLL senden - das andere ist mir noch zu kompliziert 🙄

    Der Keylogger ist übrigens nur für unser Heimnetzwerk gedacht - also kein Grund zur Sorge 👍



  • Mr. Carrison schrieb:

    Der Keylogger ist übrigens nur für unser Heimnetzwerk gedacht - also kein Grund zur Sorge 👍

    Dann bin ich ja beruhigt 🤡



  • Hi Flenders!
    Kannst du mir noch einmal weiterhelfen?
    Wie kann ich die DLL-Datei in mein Projekt einbinden, ohne sie als
    wirkliche Datei abzuspeichern? Benutze zur Zeit "LibMain" in der DLL 😕



  • Mr. Carrison schrieb:

    Wie kann ich die DLL-Datei in mein Projekt einbinden, ohne sie als wirkliche Datei abzuspeichern? Benutze zur Zeit "LibMain" in der DLL 😕

    Ich verstehe irgendwie nicht so ganz, was du vorhast 🙄 - btw: ich hab noch nie eine eigene DLL geschrieben 😉



  • OK das Problem hat sich erledigt (falsch verstanden 🙄)
    Ich frage mich nur, warum keine Meldung beim Drücken einer Taste ausgegeben wird 😞 :

    #include <windows.h>
    #include "hookdll.h"
    
    #pragma data_seg ("Shared") 
    HWND hWindow = 0 ; 
    #pragma data_seg () 
    #pragma comment (linker, "/section:Shared,RWS") 
    
    LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ; 
    
    HHOOK       hhkHook ; 
    HINSTANCE   hDllInstance ; 
    
    int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){ 
        switch (fdwReason){ 
            case DLL_PROCESS_ATTACH : 
                hDllInstance = hInstance ; 
                break ; 
        }   
        return TRUE ; 
    } 
    
    EXPORT BOOL CALLBACK SetupHook (/*HWND hParent*/){ 
        //hWindow = hParent ; 
        hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance, NULL) ; 
        return TRUE ; 
    } 
    
    LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){
    	MessageBox(NULL, "Taste", "Taste", MB_OK);
        if (nCode == HC_ACTION){ 
            if ((lParam & 1073741824) != 1073741824){
    			MessageBox(NULL, "Taste gedrückt", "Taste gedrückt", MB_OK);
            } 
        }
    	hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance, NULL) ;
        return CallNextHookEx (hhkHook, nCode, wParam, lParam) ; 
    } 
    
    EXPORT BOOL CALLBACK UninstallHook (void){ 
        UnhookWindowsHookEx (hhkHook) ; 
        return TRUE ; 
    }
    
    // hookdll.h:
    #define EXPORT __declspec (dllexport)
    #define IMPORT __declspec (dllimport)
    
    EXPORT BOOL CALLBACK SetupHook(/*HWND*/); 
    EXPORT BOOL CALLBACK UninstallHook(void);
    


  • Du hast den Hook aber schon mit SetupHook eingerichtet, oder?! 🙂



  • Klar! Hab das Problem jetzt auch gefunden - lag nämlich an einem anderen Teil
    meines Codes 🙂

    Gibt es eigentlich eine Möglichkeit, den Inhalt des wParams (oder lParams) in einer MessageBox auszugeben?

    THX



  • Du musst den Inhalt halt selbst erst entsprechend formatieren, wenn du ein sinvolles Ergebnis haben willst 😉



  • Wie kann ich den Inhalt denn am besten formatieren?
    Sorry für die dumme Frage, aber ich bin halt noch ein kleiner Anfänger 🙄



  • hey, ich krieg das irgendwie nicht hin 😞
    kannst du Mr. Carisson, bitte mal deine mainfuntion posten, wäre dir echt voll dankbar, ich hoffe ich werde dadurch mehr verstehen :|
    bitte, helf mir 👍



  • @Mr. Carisson: wParam und lParam haben je nach Message völlig unterschiedliche Bedeutungen, so allgemein geht das nicht 😉



  • Nö. wParam ist immer der virtual key code.



  • Achso, hatte das irgendwie allgemein verstanden 🙄

    Vielleicht MapVirtualKey oder To Ascii 😕



  • Wie kann ich wParam denn mit MapVirtualKey "auswerten" und das Ergebnis in eine Variable schreiben? Oder aktzeptiert die Funktion MapVirtualKey schon Variablen vom Typ WPARAM 😕

    PS: Übriegns vielen Dank für die ganzen Antworten! Wenn ich fertig bin, poste ich mal den gesamten Code meines Keyloggers 🙂 🙄



  • Keine Ahnung, ob das so korrekt ist, aber er zeigt zumindest mal etwas vernünftiges an:

    char str[3] = {0};
    //BYTE keyStates[256];
    //GetKeyboardState(keyStates);
    //ToAscii(wParam,lParam,keyStates,(unsigned short *)str,0);
    MapVirtualKey(wParam,2);
    MessageBox(NULL,str,"",0);
    

    Aber müsste es nicht eigentlich auch möglich sein direkt (so wie bei WM_CHAR) das Zeichen zu bekommen 🙄



  • danke @Mr. Carisson, währe echt voll nett ^^..


Anmelden zum Antworten