|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : août 2008 Messages : 152 ![]() |
Bonjour à tous,
Je suis à la recherche d'information au sujet de la mise en place de hook clavier sur un processus distant. Je m'explique, j'aimerai ouvrir une messagebox a chaque fois qu'une touche est pressée dans l'application 'cible' ; l'utilité ? Aucune, juste satisfaire ma curiosité. J'ai lu pas mal de tuto parlant de DLL à injecter et compagnie je m'y suis essayé. J'ai donc crée un injecteur de DLL qui fonctionne, j'ai crée également ma DLL qui met en place un hook avec un fichier de sortie pour pouvoir logger le déroulement de la chose. L'installation du hook se passe bien cependant je rencontre un souci un peu particulier voyez plutot : A la réussite de l'installation du hook, je demande (via ma dll) de m'afficher une messageBox à chaque action 'recue' , de plus une fois le hook placé et en cas de réussite, je me fais afficher une messageBox ("Hook en place") mais le hook est placé sur cette fenêtre. En effet si je valide la fenetre (hook en place) par la souris je n'ai plus de sortie par contre si je la valide en tappant sur entrée, j'ai une nouvelle MsgBox qui s'ouvre m'informant de la réception d'une action clavier ... J'en déduit que le hook est pas placé comme il faut (sur le mauvais process), malheureusement je n'arrive pas à isoler le souci, j'ai bien tenter de modifier le dernier paramètre de la fonction SetWindowHookEx() par 0 ou par le l'ID du thread ayant généré la fenêtre que je désire écouter mais rien n'y fait. Auriez vous une idée ? Merci d'avance. Bonne journée |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2008 Messages : 2 886 ![]() |
En gros, tu te plains que le hook fonctionne
Tu n'auras pas d'autres choix que de filtrer le handle de fenêtre à laquelle est destiné le message et le cas échéant appeler directement CallNextHookEx sans plus de traitement. Une autre approche serait de passer par Raw Input. |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : août 2008 Messages : 152 ![]() |
Mince, je pensais que le hook n'était actif que dans le process l'ayant lancé, d’où l’intérêt de l'injection de DLL et du remoteThread :s
Donc pour faire un hook global ou est l’intérêt de la DLL, j'ai lu partout qu'il en fallait une :s |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2008 Messages : 2 886 ![]() |
Mais injectée où si ce n'est dans les autres processus
Il y a deux façons d'implémenter un hook pour le clavier (ou la souris). Ce choix se fait par le type de hook installé :
Si tu vises une fenêtre particulière, c'est à toi de tester que le message lui est bien adressé. |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : août 2008 Messages : 152 ![]() |
D'accord, donc mon idée d'injecter dans chaque processus n'été donc pas totalement fausse.
Admettons que je veuille logger les WH_KEYBOARD (non LL) je dois donc injecter la dll et la faire loader par le processus via un appel a RemoteThread en lui passant comme fonction à executer un LoadLibrary donc ? |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2008 Messages : 2 886 ![]() |
Inutile, SetWindowHookEx s'en charge
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : août 2008 Messages : 152 ![]() |
Oula me serais bien compliqué la vie ?
Admettons que je veuille logger les saisies dans notepad PID (2069) Je crée donc un programme appelant setWindowsHookEx mais a quel moment je lui dis que c'est notepad que je veux logger, le dernier paramétre étant un threadId et pas un Pid ? De plus la fonction de callback doit elle etre situé dans une DLL ou simplement dans l'éspace mémoire du process appellant setWindowsHookEx ? |
|
|
00
|
|
|
#8 | ||
![]() ![]() Inscription : septembre 2008 Messages : 2 886 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : août 2008 Messages : 152 ![]() |
Bon alors j'ai refait un essaie.
J'injecte la DLL, dans le dllmain la fonction setWindowHookEx() est exécuté avec en dernier paramètre le thread qui gére les fenêtre graphique de cette application (vérifié avec Spy++) J'ai aucune erreur aux code retour mais j'ai pas de retour suite à la pression d'une touche clavier |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com