Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
7 mars 2007 à 14:16
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 2015
-
15 juin 2015 à 13:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 15 juin 2015 à 13:30
[Où est la DLL dans le zip ?]
Bonjour, il y a quelques années j'avais testé ta DLL. Mais aujourd'hui, la DLL est absente de ton projet ici publié. Pourrais tu re-fournir ta DLL stp, ou un lien permettant de récupérer ta DLL stp ? Merci d'avance !
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 16 mars 2011 à 11:36
Même soucis que toi, FREMYCOMPANY, sous C#.
Le hhok ne peut etre lancé depuis une appli .Net, apparement...
du coup, suffit de se faire un Launcher ; une appli qui lancera le hook a ta place :
(C++)
#include <windows.h>
inline __declspec(naked) unsigned int __fastcall bnatoui(char *szsrc) { // Merci à BruNews
__asm {
xor edx, edx
xor eax, eax
nbrLoop:
mov dl, [ecx]
cmp dl, '0'
jb short nbrStop
cmp dl, '9'
ja short nbrStop
lea eax, [eax+eax*4]
sub dl, '0'
add eax, eax
inc ecx
add eax, edx
jmp short nbrLoop
nbrStop:
ret 0
}
}
typedef int __stdcall Initialize(unsigned int, int);
typedef void __stdcall Terminate(int);
Ici, je me suis fait un truc taillé pour mon besoin : un hook CBT...
on lance l'appli en donnant le Handle de la fenetre de retour (.Net) en parametre.
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008 4 mai 2008 à 17:36
Je suis actuellement en train de faire une application VB.NET qui doit hooker sur la création de fenêtre.
Seulement voila je n'y arrives pas à le faire (en DotNet, impossible de récupérer le "hMod" car DotNet ne load pas une DLL, vu qu'il est compilé "Just-In-Time".
Je dois donc me tourner vers une DLL externe, comme la tienne.
Seulement, je ne sais pas comment la compiler.
Pourrais-tu m'expliquer comment faire ou m'envoyer la DLL complié via mail (f r e m y c o m p a n y (A) y a h o o . f r) ?
Et, tant que j'y suis, peux-tu me confirmer la marche à suivre ?
> Déclarer mes fonctions avec Declare Sub/Function
> Appeler Initialize avec le Handle de ma window
> Recevoir les appels WndProc sur ma window et soustraire WM_USER pour obtenir le type de hook (si c'est un hook)
> Appeler Terminate sur le FormClosing de ma window
Merci d'avance,
Fremy
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 29 févr. 2008 à 16:29
celui de la fenetre que tu subclasses
c'est elle qui sera avertie des hooks
maxgwen
Messages postés6Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention29 février 2008 29 févr. 2008 à 16:20
Merci pour ta reponse donc si jai bien compris apres le hoock accrocher on fait du subclassing simple avec la dll user32 les fonction SetWindowLongA & CallWindowProcA , pour SetWindowLongA je mais quelle parametre pour le handle celui de mon programme ou celui du programme hoocker ? ... merci encore pour cette reponse rapide
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 29 févr. 2008 à 15:41
gaffe:
Private Declare Function Initialize Lib "HookLIB.dll" (ByVal vhCallBackWnd As Long, ByVal vidHookType As Long) As Long
dans le Initialize, tu donnes le hWnd d'une fenetre qui recevra les notifications. comme décris en haut:
"les messages résultants du/des hooks installés sont transférés a une fenetre du client (via SendMessage).
subtilité cependant, le message recu est :
WM_USER + nCode
où nCode est le parametre eponyme dans la fontion de gestion du hook (voir la doc de ces procédures, sur MSDN)"
il te faut être capable (subclassing) d'intercepter lesdits messages.
maxgwen
Messages postés6Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention29 février 2008 29 févr. 2008 à 15:32
Bonjour tres belles dll moi je cherche a la faire marché sous visual basic un tlb aurai aiter simpa avec car la je me casse la tete , pour le debut ces pas trop compliquer pour l acrochage
Private Declare Function Initialize Lib "HookLIB.dll" (ByVal vhCallBackWnd As Long, ByVal vidHookType As Long) As Integer
Private Declare Function Terminate Lib "HookLIB.dll" (ByVal ProcesHook As Long) As Long
Process = Initialize(Me.hwnd, WH_CALLWNDPROC)
Terminate Process
pour sa pa bien dure apres avoir faite le hook ces pour le recuperer que sa me bloque donc merci par avance a toute ame charitable qui prendrai le temp de m aider ......
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 oct. 2007 à 17:54
content de voir que tu t'en soit sortit sans exemple ^^
cs_lol55
Messages postés86Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention 5 décembre 2010 7 oct. 2007 à 15:11
Super ça marche parfaitement ! :)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 mars 2007 à 09:26
ZIP mis à jour avec la gestion du CBT_CREATEWND.
j'ai également commenté le code.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 8 mars 2007 à 13:35
je suis en train de réorganiser l'architecture de la chose.
en effet, les parametres sont mappés dans l'espace mémoire de l'appli cliente, mais sur un seul niveau.
WH_CBT, par exemple, possède une structure pointée dans la structure pointée par lParam... ce qui pose un soucis.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 8 mars 2007 à 09:28
Zip mis a jour, probleme corrigé.
manque encore un client de test (et des commentaires)
et une petite intro :
Le hook, en fait, c'est un procédé qui permet de recevoir des messages suite a differentes actions systeme.
par exemple,
- la création/destruction de fenetre (WH_CBT)
- les actions clavier ou souris (WH_KEYBOARD_LL par exemple)
- etc
on peut cibler un process précis (pas possible depuis cette dll), ou cibler tout le systeme. pour 'hooker' le systeme, il faut passer par une dll, lauqelle pouvant ainsi être mappée convenablement.
ici, la dll est interfacables grace au deux fonctions Initialize et Terminate.
les messages sont renvoyés tel quels.
seule différence notable, le parametre nCode des messages, il vous faudra soustraire WM_USER :
long MsgProc(long hWnd, long uMsg, WPARAM wParam,LPARAM lParam)Dim sBuffer As String
switch(uMsg - WM_USER)
case HCBT_CREATEWND:
// Ce message avertit de la creation d'une fenetre. le handle de celle-ci est le wParam (voir doc concernant CBTProc sur MSDN)
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 8 mars 2007 à 09:06
Bonjour,
Est ce que quelqu'un pourrait expliquer ce qu'est le hook s'il vous plait ?
Par avance merci.
Marco (alias "p'tite t^te" :p).
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 mars 2007 à 18:49
Code imprimé, relu et corrigé dans le train.
je pense avoir trouvé une piste pour me débloquer...
xabiotxoa64
Messages postés4Date d'inscriptionmardi 6 février 2007StatutMembreDernière intervention 2 mai 2007 7 mars 2007 à 17:31
Zippe le, ou nomme le avec une extention *.txt que l'on se fera un plaisir de renommer.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 mars 2007 à 17:15
j'uploaderai un exe de test depuis chez moi...
si j'en met un, ca ne passe pas la sécurité du proxy ^^
xabiotxoa64
Messages postés4Date d'inscriptionmardi 6 février 2007StatutMembreDernière intervention 2 mai 2007 7 mars 2007 à 17:07
Bonjour, pratique comme dll. Tu devrais mettre à disposition un prog test qui fait appel à ta dll. Pour l'arrêt de ton hook il est probable qu'il faille chercher la raison dans le fait que tu initialises ton hook (SetWindowsHookEx) avec l'instance de ton premier client, mais ce n'est qu'une piste, pas du tout sur de moi.
Merci pour ton travail.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 mars 2007 à 14:16
J'aurais besoin d'aide, par contre...
je me suis arrangé pour que plusieurs exe clients puissent se servir simultanément de la dll.
seul gros bémol : si le premier client lancé est fermé, le hook s'arrete :/
je ne comprends pas vraiment pourquoi.
15 juin 2015 à 13:30
Bonjour, il y a quelques années j'avais testé ta DLL. Mais aujourd'hui, la DLL est absente de ton projet ici publié. Pourrais tu re-fournir ta DLL stp, ou un lien permettant de récupérer ta DLL stp ? Merci d'avance !
16 mars 2011 à 11:36
Le hhok ne peut etre lancé depuis une appli .Net, apparement...
du coup, suffit de se faire un Launcher ; une appli qui lancera le hook a ta place :
(C++)
#include <windows.h>
inline __declspec(naked) unsigned int __fastcall bnatoui(char *szsrc) { // Merci à BruNews
__asm {
xor edx, edx
xor eax, eax
nbrLoop:
mov dl, [ecx]
cmp dl, '0'
jb short nbrStop
cmp dl, '9'
ja short nbrStop
lea eax, [eax+eax*4]
sub dl, '0'
add eax, eax
inc ecx
add eax, edx
jmp short nbrLoop
nbrStop:
ret 0
}
}
typedef int __stdcall Initialize(unsigned int, int);
typedef void __stdcall Terminate(int);
#pragma comment(linker, "/entry:main")
void main() {
char* command = GetCommandLineA();
char* c = command + strlen(command);
while(*(--c)!=' ');
c++;
unsigned int hWnd = bnatoui(c);
if (hWnd) {
HMODULE hLib = LoadLibraryA("I:\\Papyrus-Intranet\\Core\\HookLib.dll");
if (hLib) {
int h = ((Initialize*)GetProcAddress(hLib, "Initialize"))(hWnd, WH_CBT);
MSG msg;
while(1)
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
((Terminate*)GetProcAddress(hLib, "Terminate"))(h);
}
}
}
Ici, je me suis fait un truc taillé pour mon besoin : un hook CBT...
on lance l'appli en donnant le Handle de la fenetre de retour (.Net) en parametre.
_Spy = Process.Start(@"E:\LaunchHook.exe", Handle.ToString());
4 mai 2008 à 17:36
Seulement voila je n'y arrives pas à le faire (en DotNet, impossible de récupérer le "hMod" car DotNet ne load pas une DLL, vu qu'il est compilé "Just-In-Time".
Je dois donc me tourner vers une DLL externe, comme la tienne.
Seulement, je ne sais pas comment la compiler.
Pourrais-tu m'expliquer comment faire ou m'envoyer la DLL complié via mail (f r e m y c o m p a n y (A) y a h o o . f r) ?
Et, tant que j'y suis, peux-tu me confirmer la marche à suivre ?
> Déclarer mes fonctions avec Declare Sub/Function
> Appeler Initialize avec le Handle de ma window
> Recevoir les appels WndProc sur ma window et soustraire WM_USER pour obtenir le type de hook (si c'est un hook)
> Appeler Terminate sur le FormClosing de ma window
Merci d'avance,
Fremy
29 févr. 2008 à 16:29
c'est elle qui sera avertie des hooks
29 févr. 2008 à 16:20
29 févr. 2008 à 15:41
Private Declare Function Initialize Lib "HookLIB.dll" (ByVal vhCallBackWnd As Long, ByVal vidHookType As Long) As Long
dans le Initialize, tu donnes le hWnd d'une fenetre qui recevra les notifications. comme décris en haut:
"les messages résultants du/des hooks installés sont transférés a une fenetre du client (via SendMessage).
subtilité cependant, le message recu est :
WM_USER + nCode
où nCode est le parametre eponyme dans la fontion de gestion du hook (voir la doc de ces procédures, sur MSDN)"
il te faut être capable (subclassing) d'intercepter lesdits messages.
http://www.vbfrance.com/codes/MODULE-SUBCLASSER_38442.aspx
29 févr. 2008 à 15:32
Private Declare Function Initialize Lib "HookLIB.dll" (ByVal vhCallBackWnd As Long, ByVal vidHookType As Long) As Integer
Private Declare Function Terminate Lib "HookLIB.dll" (ByVal ProcesHook As Long) As Long
Process = Initialize(Me.hwnd, WH_CALLWNDPROC)
Terminate Process
pour sa pa bien dure apres avoir faite le hook ces pour le recuperer que sa me bloque donc merci par avance a toute ame charitable qui prendrai le temp de m aider ......
7 oct. 2007 à 17:54
7 oct. 2007 à 15:11
9 mars 2007 à 09:26
j'ai également commenté le code.
8 mars 2007 à 13:35
en effet, les parametres sont mappés dans l'espace mémoire de l'appli cliente, mais sur un seul niveau.
WH_CBT, par exemple, possède une structure pointée dans la structure pointée par lParam... ce qui pose un soucis.
8 mars 2007 à 09:28
manque encore un client de test (et des commentaires)
COTMAR, tu y verras sans doute plus clair avec un exe de test...
en attendant, tu as la doc :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/cbtproc.asp
et une petite intro :
Le hook, en fait, c'est un procédé qui permet de recevoir des messages suite a differentes actions systeme.
par exemple,
- la création/destruction de fenetre (WH_CBT)
- les actions clavier ou souris (WH_KEYBOARD_LL par exemple)
- etc
on peut cibler un process précis (pas possible depuis cette dll), ou cibler tout le systeme. pour 'hooker' le systeme, il faut passer par une dll, lauqelle pouvant ainsi être mappée convenablement.
ici, la dll est interfacables grace au deux fonctions Initialize et Terminate.
les messages sont renvoyés tel quels.
seule différence notable, le parametre nCode des messages, il vous faudra soustraire WM_USER :
long MsgProc(long hWnd, long uMsg, WPARAM wParam,LPARAM lParam)Dim sBuffer As String
switch(uMsg - WM_USER)
case HCBT_CREATEWND:
// Ce message avertit de la creation d'une fenetre. le handle de celle-ci est le wParam (voir doc concernant CBTProc sur MSDN)
8 mars 2007 à 09:06
Est ce que quelqu'un pourrait expliquer ce qu'est le hook s'il vous plait ?
Par avance merci.
Marco (alias "p'tite t^te" :p).
7 mars 2007 à 18:49
je pense avoir trouvé une piste pour me débloquer...
7 mars 2007 à 17:31
7 mars 2007 à 17:15
si j'en met un, ca ne passe pas la sécurité du proxy ^^
7 mars 2007 à 17:07
Merci pour ton travail.
7 mars 2007 à 14:16
je me suis arrangé pour que plusieurs exe clients puissent se servir simultanément de la dll.
seul gros bémol : si le premier client lancé est fermé, le hook s'arrete :/
je ne comprends pas vraiment pourquoi.