Voilà, j'ai écris une petite DLL de hook pour une certaine fonction de
l'API win32, je voulais tout simplement savoir comment la charger dans
tous les programmes existants en memoire j'ai fait un petit programme
client qui lance le hook de la DLL, cela fait que tous les appels à la
fonction hooked dérivent correctement vers la fonction faite-maison,
mais est-ce que la dérivation sera bien effectuée pour les autres
progrs en memoire ? La DLL est-elle bien chargee dans tous les prog
dans la memoire ?
Une derniere question : l'appel de la fonction faite-maison est bien
effeectué mais apres la sortie de celle-ci j'ai une erreur fatale
concernant la convention d'appel, quelle serait diferente d'une autre
ou un truc comme ça (c'est peut-etre parce que je n'ai pas mis les
memes arguments dans la fonction faite-mason que l'originale ?), dans
la DLL je l'ai mise en __stdcall.
tu fais pointer pMyRegFunc sur la fonction de remplacement et apres
il faudrait modifier l'adresse dans l'import address table avec ce
pointeur de fonction ? ce serait de la donc que viendrait l'erreur de
cast ?
Encore merci (j'ai pas pu encore essaye je suis pas chez moi)
Le mieux est d'aller voir les sources et tu demandes explications sur place si besoin.
Pour terminer avec ta question initiale, la dll hook ne sera pas mappée dans les processus system. Pour réellement toucher à la table d'import du système il faut passer au kernel mode.
Je voulais savoir, dans le petit programme qui injecte la DLL j'utilise
SetWindowHookEx et je voulais savoir si la DLL etait bien injectée dans
les processus en marche (mise a part les processus system) ?
Et si oui le hook devrait avoir effet sur tous les programmes en marche utilisant la fonction API spécifiée n'est-ce pas ?
Ou si la DLL n'est pas injectée automatiquement, je devrai utiliser
VirtualAlloc, WriteProcessMemory, CrateRemoteThread et sa bande ?
C'est le hook OU CreateRemoteThread mais pas les 2. Si hook le system mappera code de la dll dans tous les processus "normaux". Tu peux faire un log fichier et écrire le nom des modules dans lequel elle entre, utiliser GetModuleFilename pour cela.
Je ne pense pas que CreateRemoteThread passera sur les process system mais tu peux essayer, on verra bien. Si vraiment tu veux dérouter pour tout le systeme, je pense que le kernel mode est plus approprié mais nettement plus délicat à faire.
Ha je comprends mieux, moi j'ai utilisé le hook même si le
CreateRemoteThread reste intéréssant (attention aux prochains SP tout
de même si MS decide de la jouer la secu). Je ne souhaite pas dérouter
tout le system nan, donc le hook fera l'affaire...
Pour le debugging j'affiche dans une MessageBox le path du prog qui utilise la DLL.
Je tiens compte de tes conseils concernant le kernel mode pour un hook integral.
MessageBox surtout jamais dans l'initialisation d'un hook, tu risques un timeout excessif et en ce cas Windows considèrera qu'il y a un problème donc ne mappera pas dans le process. Sans parler de tant de cas où ça pourrait embarquer le systeme dans des boucles infinies.