Si une application (la mienne, ou dans un processus externe, par exemple) appelée SetWindowsHookEx, serait-il possible pour moi de décrocher le hook? Rappelez-vous que ce n'est pas moi qui ai fait la première place, donc je n'ai aucun type de variables ou de pointeurs vers les hooks d'origine.Possible de désactiver un hook fait avec SetWindowsHookEx runtime?
Répondre
Je ne pense pas que vous le pouvez. Vous avez besoin de la poignée au crochet qui a été inscrit SetWindowsHookEx() afin que vous puissiez décrochez avec UnhookWindowsHookEx()
HMM BTW, si vous pouviez créer votre propre crochet avant tout autre crochet est inscrit (c.-à- pendant le démarrage de l'application), vous pouvez dans ce crochet choisir de ne pas appeler CallNextHookEx() et ainsi empêcher les crochets suivants d'être appelés. Cela pourrait valoir le détour. Je soupçonne que cela pourrait ne pas être possible pour tous les types de crochets.
Non, il n'y en a pas. De retour dans la journée (avant l'ère NT), vous avez peut-être déjà joué à des jeux avec un HHOOK que vous avez obtenu, car le HHOOK was a link in the chain of hooks retourné a été appelé. Même alors je ne suis pas sûr que c'était possible.
Aujourd'hui, Windows ne vous délègue pas l'appel du crochet suivant dans la chaîne (donc le paramètre obsolète à CallNextHookEx) et les HHOOKs ne vous permettent pas de tendre la main aux hooks que vous n'avez plus enregistrés.
Plus correctement, il n'y a pas bonne et soutenu façon de le faire.
Vous pouvez installer un rootkit, creuser profondément dans Windows internes et trouver la chaîne de crochet de cette façon; mais cela va évidemment à ridicule - et dangereux - longueurs.
Accrocher (via l'une des solutions d'accrochage API myriade là-bas, Detours semble populaire) SetWindowsHookEx et CallNextHookEx pouvez-vous obtenir la plupart du chemin pour les applications qui sont conformes aux conventions pré-NT. L'essentiel est de décrocher immédiatement les nouveaux hooks après les appels à SetWindowsHookEx, décrochez les hooks passés (qui ne sont pas les vôtres) à CallNextHookEx. Pour garantir une application "propre", vous devez également simuler un certain nombre d'événements pour forcer les hooks déjà appelés à être invoqués afin qu'ils puissent être décrochés. En outre, ce régime échouera dès que vous rencontrerez l'une des applications écrites au cours des 8 dernières années qui passent NULL à CallNextHookEx.
Ainsi, même si elle est techniquement possible (peut-être) à décrochez HHOOKs votre application n'a pas enregistré, vous êtes probablement mieux essayer d'accomplir quoi que ce soit que vous êtes après une autre façon, moins horriblement fragile.
En fait, je pense avoir découvert que oui, c'est possible. Accrocher CallNextHook vous donnera l'identifiant du crochet, que vous pouvez utiliser pour décrocher.
Par curiosité professionnelle et désir d'obtenir une réponse «correcte»; pouvons-nous obtenir un code à cet effet dans cette réponse? –
Juste utilisé une API appelée Deviare, vous pouvez google it. Il vous permet d'accrocher des fonctions dans 5 lignes, donc vous devez juste attacher CallNextHook, et si hook! = 0, appelez UnhookWindowsEx() dessus. –
Vous n'avez pas été obligé de passer le hook à CallNextHookEx depuis Windows Me, donc ça va casser pour certaines applications. En outre, le hook doit être exécuté au moins une fois avant de pouvoir le décrocher afin de ne pas pouvoir dire "cette application n'est pas accrochée par [hook type here]". Peu importe, je mettrai à jour ma réponse pour la rendre plus "complète". –
- 1. WM_MOUSEHOVER dans un hook global
- 2. Membres de SetWindowsHookEx, KeyboardProc et non-static
- 3. Possible de désactiver l'élément flash?
- 4. Besoin d'aide avec Windows Journal Record Hook
- 5. Comment utiliser correctement SetWindowsHookEx & CallNextHookEx
- 6. Comment est-il possible de construire un site web avec un framework fait maison sans documentation?
- 7. tutoriels de scripts hook?
- 8. Commit Hook Failure
- 9. Echec de SetWindowsHookEx sur bêta2 x64
- 10. Comment accrocher le processus externe avec SetWindowsHookEx et WH_KEYBOARD
- 11. Comment écrire un hook de sauvegarde global pour Emacs?
- 12. Delphi Keyboard Hook
- 13. Java task runtime
- 14. SetWindowsHookEx - Dll Injection manque les premiers appels
- 15. UITouch - Est-il possible de désactiver plusieurs écoutes
- 16. Utilisation de PowerShell avec .NET 3.5 runtime/libraries
- 17. Post-Commit Hook & Trac
- 18. MMC .Net Runtime Version
- 19. C++ Runtime formatage de chaîne
- 20. Erreur .NET Runtime 2.0 dans un service
- 21. Démarrage de Java Runtime Process avec droits d'administrateur sur Vista
- 22. SetWindowsHookEx avec WH_MOUSE pas capturer la souris se déplace sur la zone de HTCAPTION
- 23. Intégration .Net Runtime
- 24. Autofac avec Open Generics et type spécifié au Runtime
- 25. Comment désactiver un composant WebPart SharePoint temporairement? Cela peut-il être fait en définissant une propriété?
- 26. Que fait poll() avec un timeout de 0?
- 27. Java Deployment Toolkit - hook beforeRedirect?
- 28. Création de bibliothèques Windows C++ sans runtime?
- 29. Contrôle CRC Runtime
- 30. Android - Est-il possible de désactiver par programme certaines fonctionnalités?
Bien que je n'ai pas de solution pour le moment, je pense que cela devrait être possible. Fondamentalement, chaque AntiSpyware/Virusscanner doit utiliser ceci ou une fonctionnalité équivalente, par exemple pour trouver et décrocher des keyloggers. Bonne question! – merkuro
Je viens de trouver un programme appelé "Rootkit Unhooker 3.8". Ce qui fait à peu près ce que vous voulez, mais toujours pas de longs échantillons de code: http://www.rootkit.com/newsread.php?newsid=902 Bien que je considère cette page légitime, vous voulez probablement télécharger une ancienne version d'un site plus digne de confiance. – merkuro
Je ne pense pas que les rootkits se préoccupent des HHOOKs. Ils sont tellement plus profonds dans le système que je doute qu'ils aient jamais besoin de ce mécanisme particulier. –