OrbLux
Messages postés10Date d'inscriptionvendredi 26 mars 2010StatutMembreDernière intervention16 juillet 2013 16 juil. 2013 à 09:35
Merci de la réponse =)
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ï =)
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 15 juil. 2013 à 22:31
Salut ORBLUX,
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.
OrbLux
Messages postés10Date d'inscriptionvendredi 26 mars 2010StatutMembreDernière intervention16 juillet 2013 8 juil. 2013 à 16:55
Bonjour,
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 ???
damned3
Messages postés22Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention18 décembre 2007 20 juil. 2007 à 02:16
C'est bon jai trouvé...
Cque je peux etre bete des fois ... c'était MOUSEHOOKSTRUCT ... (sigh)
damned3
Messages postés22Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention18 décembre 2007 20 juil. 2007 à 02:01
super pour le hook clavier ca marche nickel !
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 ?
unknow0
Messages postés1Date d'inscriptiondimanche 9 avril 2006StatutMembreDernière intervention 4 juin 2007 4 juin 2007 à 17:55
super ça va planter tot ou tard
unionx
Messages postés190Date d'inscriptiondimanche 17 avril 2005StatutMembreDernière intervention18 mars 2009 3 mai 2007 à 04:35
brrrrrrr :| là c'est vraiment excellent , facile , claire . les commentaires sont bien employé , et avec tt ces questions et ces reponces ca rendre les choses facile .
racpp et BruNews(Le chat noir ;-) vive l'horreur) 10/10.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 avril 2007 à 09:33
Voila le bon tuto pour pose VC++ Express 2005:
http://www.cppfrance.com/code.aspx?ID=38359 ne pas oublier la pose du platform SDK, etc... comme expliqué.
Ensuite c'est un projet 'Win32 App' qu'il faut faire et non de la dotnetterie.
Compiler en RELEASE pour prog system.
Me suis dit "tiens je vais faire un essai avec un code simple" et je suis tombé sur celui-là (marrant, un keylogger)
J'installe le tout et je lance HookSansDLL.dsp puis direct générer\généré HookSansDLL et là patatra :
------ Début de la génération : Projet : HookSansDLL, Configuration : Debug Win32 ------
Compilation en cours...
HookSansDLL.cpp
Compilation du manifeste en ressources en cours...
Édition des liens en cours...
Création de la bibliothèque .\Debug/HookSansDLL.lib et de l'objet .\Debug/HookSansDLL.exp
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__CallNextHookEx@16 référencé dans la fonction "long __stdcall HookProc(int,unsigned int,long)" (?HookProc@@YGJHIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__UnhookWindowsHookEx@4 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__SetWindowTextA@8 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__SetWindowsHookExA@16 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__CreateWindowExA@48 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__EndDialog@8 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__DialogBoxIndirectParamA@20 référencé dans la fonction _WinMain@16
.\Debug/HookSansDLL.exe : fatal error LNK1120: 7 externes non résolus
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Admin\Bureau\HookSansDLL\Debug\BuildLog.htm"
HookSansDLL - 8 erreur(s), 0 avertissement(s)
======== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
J'ai raté un épisode ou bien y a-til un problème quelque part ?
Merci pour votre aide.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 nov. 2006 à 12:58
Pas besoin d'avoir le focus.
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 1 nov. 2006 à 22:52
Ah oki je comprend mieux merci ;-)
Au fait, faut il que le programme ai le focus pour hooker ou pas ? Je comprend pas trop l'utilisation des hooks...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 1 nov. 2006 à 12:31
Salut,
__declspec(dllexport) sert à exporter une fonction d'une DLL. Ca doit donc figurer dans le code source de cette DLL. Je l'ai laissé dans ce code source car j'étais en train de faire des tests et je pensais que c'était indispensable. Finalement, je me suis apperçu qu'on peut s'en passer et écrire la fonction de hook directement.
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 31 oct. 2006 à 18:37
Merci de ta reponse BruNews !
Mais j'ai encore quelques questions :
- j'avais dans l'idee de concevoir un parfeu (rien de bien mechant. Surtout l'etude des trames en fait). J'ai lu qu'il etait indispensable d'utiliser un hook (par contre je connais pas trop la dll a hooker). Disons qu'en fait je fais les demarches afin de me renseigner et de juger a la fin si je le fais ou pas.... Aurais-tu des infos la dessus (ou une petite idee) ?
- a quoi correspond __declspec(dllexport) ? Je l'ai deja vu dans un source d'une dll mais je comprend pas quel est l'interet de le mettre dans un programme directement...
Merci !!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 oct. 2006 à 22:32
Dans l'exemple de la source, c'est un hook global sur le clavier. Aurait fonctionné idem pour la souris sans DLL car souris et clavier sont 2 "ressources" globales du système. Pour tout autre type de hook, il faudrait une dll pour que le système la mappe dans les divers processus concernés.
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 30 oct. 2006 à 21:56
Heu .. petit bug dans "[...]compression des hook[...]" ! Faut lire en fait comprehension (pardon pour la faute de syntaxe ^^
@++
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 30 oct. 2006 à 21:54
Salut !
Je suis pas tres bon pour tout ce qui est api win32 donc je me permet de poser quelques questions :
"// Fonction de gestion du hook
__declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)"
Je comprend pas a quoi sert le __declspec(dllexport) ? Est-ce que ce code permet de hooker tout le systeme ou seulement le programme appellant (un peu comme les autres hook en gros...) ?
Que faudrait-il modifier pour pouvoir hooker une dll ??
Je ne demande evidement pas de code tout fait mais seulement des liens ou des indices pouvant m'aiguiller dans mes recherches (compression des hooks, utilisation et mise en place, ect ...)
Merci par avance ;-)
@++
rcyril
Messages postés8Date d'inscriptionmercredi 15 décembre 2004StatutMembreDernière intervention12 octobre 2006 11 oct. 2006 à 12:58
Salut, sympa ce code
Cela permet de récupérer les caractères saisis depuis n'importe quel fenetre mais comment faire pour récupérer la saisie que sur une seule fenetre (notepad par exemple) ?
Merci.
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 28 avril 2006 à 17:09
je me demandais aussi comment cela pourrait marcher en mode consol, puisque la fonction hook est censsé êter permanente par conséquent ...
Quand même c'est super bien
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 24 avril 2006 à 05:36
Salut,
L'erreur est que, tout simplement, ton programme ne contient pas de boucle de récupération des messages Windows pour cette application. C'est indispensable pour le hook. J'aimerais préciser aussi que le code que tu nous soumets ici ne correspond pas à une application console mais plutôt à une application Win32 sans fenêtre. Pour les boites de dialogue, on n'a pas besoin de boucle de messages.
Voici la fonction main corrigée et testée:
int main ()
{
hExe = GetModuleHandle(0);
hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);
MSG message;
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage( &message );
DispatchMessage( &message );
}
UnhookWindowsHookEx(hHook);
return 0;
}
N'oublie pas de créer un vrai projet console.
Bonne chance.
demz
Messages postés5Date d'inscriptionlundi 6 octobre 2003StatutMembreDernière intervention21 avril 2006 21 avril 2006 à 13:09
J'aimerai bien savoir aussi...
wallegen
Messages postés12Date d'inscriptionsamedi 18 septembre 2004StatutMembreDernière intervention 2 juin 2006 17 avril 2006 à 02:12
J'aimerais le tester mais en console
// 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,0,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 principale: Création d'une boite de dialogue sans ressources
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd,int nShow )
{
sman0
Messages postés39Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention 3 novembre 2005 31 oct. 2005 à 18:34
joli exemple
bravo :p
cs_Paulo44
Messages postés3Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention27 octobre 2005 27 oct. 2005 à 16:03
Evidemment que non on peut pas contourner, puisqu'avec les windows 9x c'est pas prévu par l'api...
Donc si tu veux faire un hook (ce qui est relativement inutile à par pour faire un keylogger) tu utilises WH_KEYBOARD et une dll, c tout
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 26 oct. 2005 à 23:34
Ok mais il y a pas moyen de contourner ?
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 26 oct. 2005 à 22:42
WH_KEYBOARD_LL ne fonctionne que sur Windows NT/2000/XP
c'est donc indépendant de l'utilisation d'une dll, et ca fonctionne pas sur win95/98 sans parler de win3.1 ...
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 26 oct. 2005 à 22:38
Je savais bien que j'avais un trojan dans mon ordi !
lol
En attendant ma(es) question(s) reste sans réponse !
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 26 oct. 2005 à 22:36
la luminosité de tes interventions me frappe l'oeil, d'ou ma venue !
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 26 oct. 2005 à 22:33
BlackGoddess tu me suis à la trace ou il te faut un screeshoot ?
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 26 oct. 2005 à 22:30
blague a part, jolie source, en effet il fallait y penser :)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 26 oct. 2005 à 22:30
je vois pas d'url s'afficher je comprends pas ? expliquez mois svp !!!
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 26 oct. 2005 à 22:20
Bonjour,
J'ai une question :
Pq ça ne fonctionne que sur les PC Win2000 ou plus et pas 98 ou 95 ou 3.1 ?
Est-ce qu'avec une dll ça fonctionne ?
Comment on pourrait faire pour que ça fonctionne ?
Bon d'accord ça fait trois questions mais bon on est pas à ça près !
albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008 17 sept. 2005 à 19:02
par
__declspec(dllexport) LRESULT CALLBACK XXXX ( int nCode, WPARAM wParam, LPARAM lParam)
?
cs_Paulo44
Messages postés3Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention27 octobre 2005 24 juil. 2005 à 14:09
Il y a quand même un truc bizarre avec ce principe : il me semblait que normalment windows appellait la fonction du hook dans le contexte (espace d'adresses) de l'exécutable qui reçois le message clavier intercepté. Donc le problème, c'est que dans ce cas les variables globales de l'exécutable seront mappées à chaque fois, comme avec une dll, et ici hHook=0 dans le hook... En plus niveau performances c'est pas super si il y a plein de globales...
Enfin j'ai peut être mal compris quelque chose...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 12 juil. 2005 à 07:14
BruNews >> Merci pour la précision. En effet, CALLBACK équivaut à __stdcall, comme WINAPI. En plus de définir la convention d'appel (__stdcall), ça sert aussi à nous préciser qu'il s'agit d'une fonction de type "callback". Précision utile seulement pour la conception et la lecture du code source.
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 11 juil. 2005 à 12:35
Merci beaucoup j'espère que je vais y arriver :p
Bonne prog à tous
Filipe
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 10 juil. 2005 à 19:54
Juste une précision:
CALLBACK n'est qu'un alias de __stdcall (fonction dépile les params) et donc ne définit que la convention d'appel.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 10 juil. 2005 à 19:37
Salut,
Filipe35 >> Pour bien comprendre tout ça, il faut laisser Delphi de côté pendant quelque temps pour apprendre les bases de la programmation Windows en C/C++.
__declspec(dllexport) : Permet à une fonction d'être exportée d'une DLL.
LRESULT : Type de valeur de retour de la fonction.
CALLBACK : Une fonction de ce type intercepte les messages système.
HookProc : Nom de la fonction.
( int nCode, WPARAM wParam, LPARAM lParam) : Paramètres d'entrée de la fonction (appelée par le système).
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 5 juil. 2005 à 12:27
Arf... oki merci comme même, mais personne n'a une idée
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 4 juil. 2005 à 16:17
Salut,
scelw >> Comme précisé dans la présentation de ce code, le keylogger est réduit au strict minimum. hookstruct.vkCode est un DWORD. Il est vrai que pour certaines touches, il contient le code du caractère pour clavier américain. Il faut donc le convertir en code pour caractère français.
Filipe35 >> Désolé, j'ai jamais travaillé sur Delphi.
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 15 juin 2005 à 15:23
ah désolé pour le double post....
je tiens à préciser aussi:
J'ai remarqué dans W32dasm dans export fonction : "?HookProc@@YGJHIJ@Z"
J'ai fait de même avec un export de Delphi:
exports HookActionCallBack; // (HookActionCallBack apparait dans les exports de w32dasm)
mais ca ne corrige rien au problème....
Filipe
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 14 juin 2005 à 16:20
Bravo racpp , très bonne source !
J'ai essayé de l'adapter au Delphi, voici ce que ca donne:
function HookActionCallBack(Code: integer; MSG: WPARAM; KeyHook: LPARAM):LRESULT; stdcall;
{cette fonction reçoit tous les messages détournés}
begin
messageBeep(1);
Result:=CallNextHookEx(hHook,Code,Msg,KeyHook);
//afin que le message continue à se propager
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(hHook);
end;
Mais hélas ca ne marche pas comme il faudrait.
C'est nikel quand on tape dans notre application mais les autres, ca marche plus ( 0 beep => désactivé ?)
Alors j'aimerais savoir qu'est ce qui fait que ton code marche...
Merci
Bonne prog à tous
Filipe
PS: erreur dans la page j'éspère que je n'ai pas posté en double
scelw
Messages postés117Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention17 février 2007 12 juin 2005 à 12:07
oui, je vais expliquer un peu plus en détail :
actuellement, ton keylogger n'enregistre que les caractères alphabétiques (a, b, c, d, ..., y, z) et non les chiffres (0, 1, 2, 3, ..., 8, 9). Or j'aimerais savoir comment faire pour changer ça et permettre au keylogger d'enregistrer AUSSI les chiffres.
Et pourquoi pas les caractères spéciaux (&, é, ", {, ..., %, $) tant qu'on y est...
Le problème vient de cette ligne (je crois) :
// Obtenir la lettre de la touche tapée
char lettre=(char)hookstruct.vkCode;
ici, la variable "lettre" est de type "char", donc elle ne peut contenir que des caractères alphabétiques. C'est ce qui limite le keylogger.
Selon moi, il faudrait ajouter à cela une structure conditionnelle pour déterminer si la valeur renvoyée par hookstruct.vkCode est supérieur à un certain nombre (et dans ce cas ça veut dire qu'il s'agit de chiffres) ou inférieure (et dans ce cas, ce sont des lettres de l'alphabet). Mais je n'arrive pas à coder ça...
Scel W
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 11 juin 2005 à 15:57
scelw >> Explique ton problème un peu plus stp.
scelw
Messages postés117Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention17 février 2007 25 mai 2005 à 11:04
Comment étendre la gestion des caractères alphabétiques aux caractères numériques et spéciaux?? (je suis confronté à un problème de types de variables...)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 déc. 2004 à 22:11
MS n'aurait-il pas menti alors ?
sirozz
Messages postés28Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention13 avril 2008 18 déc. 2004 à 21:11
Effectivement, ça marche avec WH_KEYBOARD_LL et WH_MOUSE_LL mais avec les autres types de messages, ya rien à faire ! j'ai tout essayé.
Si Microsoft recommande l'ustilisation d'une DLL c'est (à vérifier) que les messages traités par les DLL sont prioritaires sur les hooks traités par les exe. Je cherche quand même une solution pour faire un exe capable de faire un hook sur les autres type de message mais sans DLL, si vous avez une solution je suis preneur. (peut-être une solution à la trojan-style avec une DLL en embed dans le programme, je sais pas si c'est possible). Merci quand même pour ta source Racpp.
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 4 nov. 2004 à 10:22
Très bon à savoir, ca fonctionne parfaitement chez moi.
Merci.
eRoZion
basted
Messages postés55Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention11 mai 2008 1 nov. 2004 à 21:47
Il me semblais bien deja avoir essayé un truc comme ca en vain, merci pour l'example!
NikatorS
Messages postés147Date d'inscriptionmercredi 18 septembre 2002StatutMembreDernière intervention15 avril 2011 1 nov. 2004 à 21:04
C'est une découverte qui me plait vraiment. j'ai toujours trouver énervent de devoir créer une DLL.
Merci!!
Nikoscian
Messages postés13Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention11 février 2005 31 oct. 2004 à 22:14
Merci beaucoup! Avec les DLL les hooks ne fonctionnent pas chez moi (compilateur Dev-c++) le code se compile correctement mais impossible de créer le hook à l'exécution du programme.
Là je compile le code source et miracle ça marche!!!
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 31 oct. 2004 à 17:07
"Cela prouve que microsoft nous cache beaucoup de choses."
LOL sans commentaire...
sibi12
Messages postés337Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention15 avril 2006 31 oct. 2004 à 15:14
Je ne savais pas que microsoft avait prétendu ça... "You must place a global hook procedure in a dynamic-link library (DLL) separate from the application installing the hook procedure."
"Must" signifie bien l'obligation...C'est assez etonnant qu'il fournisse un contre exemple !!!
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 31 oct. 2004 à 13:35
Salut,
sibi12 >> En effet, je viens de compiler le source exemple et ça marche. Franchement, je ne savais pas que cela existait (Merci). L'auteur de l'exemple (Jeffrey Richter) ne fait aucune allusion à une DLL. On peut dire qu'il est en train de contredire Microsoft. Car dans ses pages sur les hooks, ils sont formels: Pas de hook global sans DLL externe:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks.asp
Cela prouve que microsoft nous cache beaucoup de choses. C'est une raison de plus pour ne pas lui faire toujours confiance. Voulant faire un hook glogal sans dll, j'ai cherché partout en vain. Tout le monde dit qu'une DLL externe est indispensable. Puisque le handle d'une DLL et d'un EXE sont pareils, je me suis dit que si on exporte une fonction de l'EXE, la fonction SetWindowsHookEx() pourrait l'accepter. Ca a marché. En réalité, en regardant le source de Jeffrey Richter, on s'aperçoit qu'on n'a même pas besoin de l'exporter. Pourquoi Microsoft nous a-t-elle menti? :)
sibi12
Messages postés337Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention15 avril 2006 31 oct. 2004 à 11:21
racpp >>
"Ce que je ne comprends pas c'est pourquoi Microsoft insiste sur l'emploi de la DLL externe et ne dit pas le moindre mot sur une autre alternative possible. A t-elle peur des Hookers?"
ta ta ta ta ta...chhuuuuuuttttt !!! En cherchant d'un peu plus près :
C'est vrai que dans la masse de la MSDN fallait aller la degotter mais bon... C'est on ne peux plus clair come code. (Telecharge le .exe)
;-)
Ce code m'avait servi pour un programme il y a peut aussi.
srtg1
Messages postés13Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention 1 juillet 2005 30 oct. 2004 à 20:32
Ouai cool une fct de recup d'adresse Email & d'envoie et on a gagner le gros lot ... :-)
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 30 oct. 2004 à 20:28
srtg1 >> Oui je sais, je disais dans l'introduction que le keylogger est reduit au minimum. Le but de ce source est de montrer comment faire un hook global sans dll. Le keylogger n'est là que pour prouver le bon fonctionnement du code. Tu peux le perfectionner comme bon te semble. :) Merci pour la remarque.
srtg1
Messages postés13Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention 1 juillet 2005 30 oct. 2004 à 20:19
manque la distinction Maj / Min , l'evenement WM_SYSKEYDOWN et c parfait :-) ...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 30 oct. 2004 à 18:58
Merci pour vos commentaires.
C'est vrai que ça peut servir car d'habitude il fallait créer deux projets distincts, celui de la DLL et celui de l'EXE. Ce que j'avais toujours trouvé un peu abérrant. Ce que je ne comprends pas c'est pourquoi Microsoft insiste sur l'emploi de la DLL externe et ne dit pas le moindre mot sur une autre alternative possible. A t-elle peur des Hookers?
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 30 oct. 2004 à 17:43
Ceci je connaissais depuis peu, ça m'avait bien servi pour un des mes programmes ;)
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 30 oct. 2004 à 10:47
c'est pas idiot... ca peut toujours servir!
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 30 oct. 2004 à 03:56
Salut,
Pas mal, c'est astucieux en tout cas..
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 30 oct. 2004 à 03:55
Pas bête le coup de l'export de fonction directement dans l'exécutable, bien vu ! ;-)
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 ?
4 juin 2007 à 17:55
3 mai 2007 à 04:35
racpp et BruNews(Le chat noir ;-) vive l'horreur) 10/10.
9 avril 2007 à 04:54
8 avril 2007 à 09:33
http://www.cppfrance.com/code.aspx?ID=38359
ne pas oublier la pose du platform SDK, etc... comme expliqué.
Ensuite c'est un projet 'Win32 App' qu'il faut faire et non de la dotnetterie.
Compiler en RELEASE pour prog system.
8 avril 2007 à 05:43
Tout nouveau tout blaireau, j'ai installé ya tout juste 4 heures Visual C++ 2005 Express en suivant ce tuto :
http://arb.developpez.com/vc++/express/?page=installation
Me suis dit "tiens je vais faire un essai avec un code simple" et je suis tombé sur celui-là (marrant, un keylogger)
J'installe le tout et je lance HookSansDLL.dsp puis direct générer\généré HookSansDLL et là patatra :
------ Début de la génération : Projet : HookSansDLL, Configuration : Debug Win32 ------
Compilation en cours...
HookSansDLL.cpp
Compilation du manifeste en ressources en cours...
Édition des liens en cours...
Création de la bibliothèque .\Debug/HookSansDLL.lib et de l'objet .\Debug/HookSansDLL.exp
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__CallNextHookEx@16 référencé dans la fonction "long __stdcall HookProc(int,unsigned int,long)" (?HookProc@@YGJHIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__UnhookWindowsHookEx@4 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__SetWindowTextA@8 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__SetWindowsHookExA@16 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__CreateWindowExA@48 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__EndDialog@8 référencé dans la fonction "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z)
HookSansDLL.obj : error LNK2019: symbole externe non résolu __imp__DialogBoxIndirectParamA@20 référencé dans la fonction _WinMain@16
.\Debug/HookSansDLL.exe : fatal error LNK1120: 7 externes non résolus
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Admin\Bureau\HookSansDLL\Debug\BuildLog.htm"
HookSansDLL - 8 erreur(s), 0 avertissement(s)
======== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
J'ai raté un épisode ou bien y a-til un problème quelque part ?
Merci pour votre aide.
5 nov. 2006 à 12:58
1 nov. 2006 à 22:52
Au fait, faut il que le programme ai le focus pour hooker ou pas ? Je comprend pas trop l'utilisation des hooks...
1 nov. 2006 à 12:31
__declspec(dllexport) sert à exporter une fonction d'une DLL. Ca doit donc figurer dans le code source de cette DLL. Je l'ai laissé dans ce code source car j'étais en train de faire des tests et je pensais que c'était indispensable. Finalement, je me suis apperçu qu'on peut s'en passer et écrire la fonction de hook directement.
31 oct. 2006 à 18:37
Mais j'ai encore quelques questions :
- j'avais dans l'idee de concevoir un parfeu (rien de bien mechant. Surtout l'etude des trames en fait). J'ai lu qu'il etait indispensable d'utiliser un hook (par contre je connais pas trop la dll a hooker). Disons qu'en fait je fais les demarches afin de me renseigner et de juger a la fin si je le fais ou pas.... Aurais-tu des infos la dessus (ou une petite idee) ?
- a quoi correspond __declspec(dllexport) ? Je l'ai deja vu dans un source d'une dll mais je comprend pas quel est l'interet de le mettre dans un programme directement...
Merci !!
30 oct. 2006 à 22:32
Quelques exemples globaux en dll:
HOOK SYSTEM SUR WM_MOUSEWHEEL (WIN32)
http://www.cppfrance.com/code.aspx?ID=25998
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450
HOOK F11 SUR IE (WIN32)
http://www.cppfrance.com/code.aspx?id=18202
HOOK CLAVIER
http://www.cppfrance.com/code.aspx?id=17818
LIMITE LE NBR DE FENETRES IE V2 (WIN32)
http://www.cppfrance.com/code.aspx?id=17387
LIMITE LE NBR DE FENETRES INTERNET EXPLORER (WIN32)
http://www.cppfrance.com/code.aspx?id=11059
NO TASK MANAGER (WIN32)
http://www.cppfrance.com/code.aspx?id=11186
HOOK DE ENTER SUR DIALOGBOX (WIN32)
http://www.cppfrance.com/code.aspx?id=11007
HOOK SUR FENETRE (WIN32)
http://www.cppfrance.com/code.aspx?id=10997
AJOUTER UN MENU A NOTEPAD (WIN32)
http://www.cppfrance.com/code.aspx?ID=28181
30 oct. 2006 à 21:56
@++
30 oct. 2006 à 21:54
Je suis pas tres bon pour tout ce qui est api win32 donc je me permet de poser quelques questions :
"// Fonction de gestion du hook
__declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)"
Je comprend pas a quoi sert le __declspec(dllexport) ? Est-ce que ce code permet de hooker tout le systeme ou seulement le programme appellant (un peu comme les autres hook en gros...) ?
Que faudrait-il modifier pour pouvoir hooker une dll ??
Je ne demande evidement pas de code tout fait mais seulement des liens ou des indices pouvant m'aiguiller dans mes recherches (compression des hooks, utilisation et mise en place, ect ...)
Merci par avance ;-)
@++
11 oct. 2006 à 12:58
Cela permet de récupérer les caractères saisis depuis n'importe quel fenetre mais comment faire pour récupérer la saisie que sur une seule fenetre (notepad par exemple) ?
Merci.
28 avril 2006 à 17:09
Quand même c'est super bien
24 avril 2006 à 05:36
L'erreur est que, tout simplement, ton programme ne contient pas de boucle de récupération des messages Windows pour cette application. C'est indispensable pour le hook. J'aimerais préciser aussi que le code que tu nous soumets ici ne correspond pas à une application console mais plutôt à une application Win32 sans fenêtre. Pour les boites de dialogue, on n'a pas besoin de boucle de messages.
Voici la fonction main corrigée et testée:
int main ()
{
hExe = GetModuleHandle(0);
hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);
MSG message;
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage( &message );
DispatchMessage( &message );
}
UnhookWindowsHookEx(hHook);
return 0;
}
N'oublie pas de créer un vrai projet console.
Bonne chance.
21 avril 2006 à 13:09
17 avril 2006 à 02:12
// 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,0,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 principale: Création d'une boite de dialogue sans ressources
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd,int nShow )
{
hExe = hInstance;
hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);
system("pause");
UnhookWindowsHookEx(hHook);
return 0;
}
mais ça ne fonctionne pas ou est mon erreur?
31 oct. 2005 à 18:34
bravo :p
27 oct. 2005 à 16:03
Donc si tu veux faire un hook (ce qui est relativement inutile à par pour faire un keylogger) tu utilises WH_KEYBOARD et une dll, c tout
26 oct. 2005 à 23:34
26 oct. 2005 à 22:42
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp
c'est donc indépendant de l'utilisation d'une dll, et ca fonctionne pas sur win95/98 sans parler de win3.1 ...
26 oct. 2005 à 22:38
lol
En attendant ma(es) question(s) reste sans réponse !
26 oct. 2005 à 22:36
26 oct. 2005 à 22:33
26 oct. 2005 à 22:30
26 oct. 2005 à 22:30
26 oct. 2005 à 22:20
J'ai une question :
Pq ça ne fonctionne que sur les PC Win2000 ou plus et pas 98 ou 95 ou 3.1 ?
Est-ce qu'avec une dll ça fonctionne ?
Comment on pourrait faire pour que ça fonctionne ?
Bon d'accord ça fait trois questions mais bon on est pas à ça près !
17 sept. 2005 à 19:02
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad) {
par
__declspec(dllexport) LRESULT CALLBACK XXXX ( int nCode, WPARAM wParam, LPARAM lParam)
?
24 juil. 2005 à 14:09
Enfin j'ai peut être mal compris quelque chose...
12 juil. 2005 à 07:14
11 juil. 2005 à 12:35
Bonne prog à tous
Filipe
10 juil. 2005 à 19:54
CALLBACK n'est qu'un alias de __stdcall (fonction dépile les params) et donc ne définit que la convention d'appel.
10 juil. 2005 à 19:37
Filipe35 >> Pour bien comprendre tout ça, il faut laisser Delphi de côté pendant quelque temps pour apprendre les bases de la programmation Windows en C/C++.
__declspec(dllexport) : Permet à une fonction d'être exportée d'une DLL.
LRESULT : Type de valeur de retour de la fonction.
CALLBACK : Une fonction de ce type intercepte les messages système.
HookProc : Nom de la fonction.
( int nCode, WPARAM wParam, LPARAM lParam) : Paramètres d'entrée de la fonction (appelée par le système).
5 juil. 2005 à 12:27
je sais pas keske veut dire ceci (par ex):
__declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)
Merci
Filipe
4 juil. 2005 à 16:17
scelw >> Comme précisé dans la présentation de ce code, le keylogger est réduit au strict minimum. hookstruct.vkCode est un DWORD. Il est vrai que pour certaines touches, il contient le code du caractère pour clavier américain. Il faut donc le convertir en code pour caractère français.
Filipe35 >> Désolé, j'ai jamais travaillé sur Delphi.
15 juin 2005 à 15:23
je tiens à préciser aussi:
J'ai remarqué dans W32dasm dans export fonction : "?HookProc@@YGJHIJ@Z"
J'ai fait de même avec un export de Delphi:
exports HookActionCallBack; // (HookActionCallBack apparait dans les exports de w32dasm)
mais ca ne corrige rien au problème....
Filipe
14 juin 2005 à 16:20
J'ai essayé de l'adapter au Delphi, voici ce que ca donne:
procedure TForm1.ActiverClick(Sender: TObject);
begin
// Cpp: hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe , NULL );
// Del: HookHandle:= SetWindowsHookEx( WH_KEYBOARD ,HookActionCallBack ,HInstance, 0 );
SetWindowsHookEx( WH_KEYBOARD , HookActionCallBack , HInstance , 0 );
end;
function HookActionCallBack(Code: integer; MSG: WPARAM; KeyHook: LPARAM):LRESULT; stdcall;
{cette fonction reçoit tous les messages détournés}
begin
messageBeep(1);
Result:=CallNextHookEx(hHook,Code,Msg,KeyHook);
//afin que le message continue à se propager
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(hHook);
end;
Mais hélas ca ne marche pas comme il faudrait.
C'est nikel quand on tape dans notre application mais les autres, ca marche plus ( 0 beep => désactivé ?)
Alors j'aimerais savoir qu'est ce qui fait que ton code marche...
Merci
Bonne prog à tous
Filipe
PS: erreur dans la page j'éspère que je n'ai pas posté en double
12 juin 2005 à 12:07
actuellement, ton keylogger n'enregistre que les caractères alphabétiques (a, b, c, d, ..., y, z) et non les chiffres (0, 1, 2, 3, ..., 8, 9). Or j'aimerais savoir comment faire pour changer ça et permettre au keylogger d'enregistrer AUSSI les chiffres.
Et pourquoi pas les caractères spéciaux (&, é, ", {, ..., %, $) tant qu'on y est...
Le problème vient de cette ligne (je crois) :
// Obtenir la lettre de la touche tapée
char lettre=(char)hookstruct.vkCode;
ici, la variable "lettre" est de type "char", donc elle ne peut contenir que des caractères alphabétiques. C'est ce qui limite le keylogger.
Selon moi, il faudrait ajouter à cela une structure conditionnelle pour déterminer si la valeur renvoyée par hookstruct.vkCode est supérieur à un certain nombre (et dans ce cas ça veut dire qu'il s'agit de chiffres) ou inférieure (et dans ce cas, ce sont des lettres de l'alphabet). Mais je n'arrive pas à coder ça...
Scel W
11 juin 2005 à 15:57
25 mai 2005 à 11:04
18 déc. 2004 à 22:11
18 déc. 2004 à 21:11
Si Microsoft recommande l'ustilisation d'une DLL c'est (à vérifier) que les messages traités par les DLL sont prioritaires sur les hooks traités par les exe. Je cherche quand même une solution pour faire un exe capable de faire un hook sur les autres type de message mais sans DLL, si vous avez une solution je suis preneur. (peut-être une solution à la trojan-style avec une DLL en embed dans le programme, je sais pas si c'est possible). Merci quand même pour ta source Racpp.
4 nov. 2004 à 10:22
Merci.
eRoZion
1 nov. 2004 à 21:47
1 nov. 2004 à 21:04
Merci!!
31 oct. 2004 à 22:14
Là je compile le code source et miracle ça marche!!!
31 oct. 2004 à 17:07
LOL sans commentaire...
31 oct. 2004 à 15:14
"Must" signifie bien l'obligation...C'est assez etonnant qu'il fournisse un contre exemple !!!
31 oct. 2004 à 13:35
sibi12 >> En effet, je viens de compiler le source exemple et ça marche. Franchement, je ne savais pas que cela existait (Merci). L'auteur de l'exemple (Jeffrey Richter) ne fait aucune allusion à une DLL. On peut dire qu'il est en train de contredire Microsoft. Car dans ses pages sur les hooks, ils sont formels: Pas de hook global sans DLL externe:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks.asp
Cela prouve que microsoft nous cache beaucoup de choses. C'est une raison de plus pour ne pas lui faire toujours confiance. Voulant faire un hook glogal sans dll, j'ai cherché partout en vain. Tout le monde dit qu'une DLL externe est indispensable. Puisque le handle d'une DLL et d'un EXE sont pareils, je me suis dit que si on exporte une fonction de l'EXE, la fonction SetWindowsHookEx() pourrait l'accepter. Ca a marché. En réalité, en regardant le source de Jeffrey Richter, on s'aperçoit qu'on n'a même pas besoin de l'exporter. Pourquoi Microsoft nous a-t-elle menti? :)
31 oct. 2004 à 11:21
"Ce que je ne comprends pas c'est pourquoi Microsoft insiste sur l'emploi de la DLL externe et ne dit pas le moindre mot sur une autre alternative possible. A t-elle peur des Hookers?"
ta ta ta ta ta...chhuuuuuuttttt !!! En cherchant d'un peu plus près :
http://msdn.microsoft.com/msdnmag/issues/0700/Win32/toc.asp
C'est vrai que dans la masse de la MSDN fallait aller la degotter mais bon... C'est on ne peux plus clair come code. (Telecharge le .exe)
;-)
Ce code m'avait servi pour un programme il y a peut aussi.
30 oct. 2004 à 20:32
30 oct. 2004 à 20:28
30 oct. 2004 à 20:19
30 oct. 2004 à 18:58
C'est vrai que ça peut servir car d'habitude il fallait créer deux projets distincts, celui de la DLL et celui de l'EXE. Ce que j'avais toujours trouvé un peu abérrant. Ce que je ne comprends pas c'est pourquoi Microsoft insiste sur l'emploi de la DLL externe et ne dit pas le moindre mot sur une autre alternative possible. A t-elle peur des Hookers?
30 oct. 2004 à 17:43
30 oct. 2004 à 10:47
30 oct. 2004 à 03:56
Pas mal, c'est astucieux en tout cas..
30 oct. 2004 à 03:55