2010-02-07 7 views
3

Je veux intercepter le chargement de dll afin que je puisse les utiliser. Ma première idée était d'accrocher GetProcAddress. Étonnamment, en l'accrochant, je peux seulement intercepter des appels faits dans le processus qui possède ma bibliothèque. (J'ai ouvert un autre executables qui font appel GetProcAddress et ces appels ne sont pas interceptai) (je suppose parce qu'il est compilé dynamiquement contre ma lib)Hooking windows fonctions API pour intercepter le chargement dll (Windows uniquement)

Exemple de sortie:

C: \ Windows \ SysWOW64 \ kernel32.dll Module32NextW

C: \ Windows \ SysWOW64 \ kernel32.dll CreateToolhelp32Snapshot

C: \ Windows \ system32 \ dinput.dll DirectInputCreateW

C: \ Windows \ SysWOW64 \ ntdll.dll DirectDrawCreate

Quoi qu'il en soit, ce que je veux savoir est où je commence à être en mesure d'intercepter le chargement dll donc je peux alors utiliser leurs fonctions.

Fondamentalement, je veux pouvoir appeler GetModuleInformation pour n'importe quelle DLL chargée.

+0

Dupliquer de http://stackoverflow.com/questions/873658/how-can-i-hook-windows-functions-in-c-c et beaucoup d'autres questions similaires. – mghie

+3

Je ne sais pas si je devrais vous appeler des noms ou vous ignorer. Je ne veux pas savoir comment accrocher les fonctions. Je veux savoir quelles fonctions dois-je accrocher pour intercepter le chargement de Dll. – user246100

Répondre

3

D'abord, que faites-vous qui nécessite un crochet global?

Si vous souhaitez être notifié qu'un DLL a chargé dans un processus, vous pouvez rechercher dans PsSetImageLoadNotifyRoutine, qui est une routine en mode noyau. Bien qu'il soit en mode noyau, il n'est pas très difficile à utiliser et écrire un pilote de base est plutôt amusant. Une autre solution consiste à forcer un chargement de votre bibliothèque dans chaque processus. Il existe une variété de méthodes, l'une des plus légitimes serait Windows Message hooks.

+1

Bonjour. Je viens de voir ta réponse maintenant, désolé pour ça. Ceci est destiné à être utilisé pour intercepter le chargement d'un jeu et ensuite modifier son fonctionnement. Comme les tricheurs font. J'ai vu du code qui le détecte en utilisant une boucle permanente et en trouvant si un processus (par nom) a été créé à l'intérieur. Je cherchais une façon plus propre de faire cela et votre suggestion d'un pilote Windows de base semble bien. Je vous remercie! – user246100

0

Installez un crochet à l'échelle du système sur la fonction LoadLibrary. (Je n'ai aucune idée de comment utiliser cette petite chose commentaire sous la question donc)

+0

La question était: comment le faire "à l'échelle du système". – user246100

+0

Tout crochet que vous définissez sur votre processus n'est pas copié en raison de la fonctionnalité de copie en écriture. Pour insérer du code globalement, vous devez vous insérer globalement. –