Quelle est votre recommandation pour une bibliothèque ou un code d'accrochage d'API à utiliser dans une application commerciale? P>
J'ai examiné Microsoft Detours, ce qui semble être très bon, mais est absolument hors budget pour le profit que je m'attends à sortir de ma demande. p>
Y a-t-il une bibliothèque qui offre une compatibilité à travers WinXP et Vista (et Windows 7 si pas trop à poser!)? Y a-t-il quelqu'un avec une expérience passée d'utiliser une telle bibliothèque dans un produit commercial? P>
6 Réponses :
Qu'essayez-vous de faire? corrige la table d'importation suffisante? J'ai utilisé une variante de http://jpassing.wordpress.com/2008/01/06/Unuant-import-address-table-Hooking-for-Testing/ Pour des projets secondaires amusants à la maison. p>
Vous pouvez essayer EasyHook, il semble être utile. Impossible de corriger le "système large" cependant, vous auriez besoin de quelque chose comme une dll proxy pour cela. P>
EasyHook a déménagé à Github.com/easyhook/easyhook
Vous pouvez également essayer NCodeHook Lib ( http://newgre.net/ncodehook ), c'est gratuit et petit. p>
... mais pas aussi bien documenté que possible / devrait être. Toujours +1.
L'accrochage de l'API à Win32 n'est pas vraiment possible dans un sens à l'échelle du système. Vous pouvez l'approcher en injectant une DLL dans chaque processus, puis en corrigeant chaque processus de l'intérieur. Vous pouvez utiliser la correction IAT (où vous corrigez le binaire appelant Binary) ou un patch de style détours (où vous tapez la callee). P>
Patage de l'appelant (Patching IAT) signifie que vous devez énumérer chaque DLL chargée dans le processus et correctement de manière séparément. Vous auriez également besoin de crochet code> LoadLibrary Code> afin de corriger les nouvelles DLL chargées à la volée. P>
Patching La callee (détours) présente l'avantage que vous n'avez besoin que de corriger un emplacement pour que le crochet soit appliqué à l'ensemble du processus. P>
Vous devez effectuer le correctif per-traite même si vous accrochez des API des DLL système partagée; Le système d'exploitation invoquera Copy-on-Write par lequel lorsque vous corrigez la DLL système, le processus reçoit une copie privée à corriger. P>
L'injection DLL devient un peu méchant, et encore une fois, il existe plusieurs techniques: Une autre technique consiste à accrocher les services système en mode noyau. Cela nécessite une rédaction d'un pilote de périphérique, mais c'est fondamentalement la technique que moniteur de processus Sysinternals a> utilise (ou au moins, une fois). Il s'agit d'un problème sur Vista et Win7 64 bits à cause de PatchGuard et les exigences de la signature du conducteur. Vous pouvez surveiller une activité du système de fichiers en utilisant filtre du système de fichiers pilotes. < / p> appinit_dlls code>
, qui fonctionne uniquement pour les processus qui chargent user32.dll code> (et ont plusieurs nouvelles restrictions dans Vista et Windows 7), en utilisant
Setwindowshookex code>
, ou en utilisant Createremotethread code> a>. Niveaux d'intégrité en Vista et Windows 7 le faire plus difficile à injecter dans les processus à l'échelle du système. Votre application devra courir avec des privilèges d'administrateur et un niveau d'intégrité élevé pour pouvoir le retirer avec succès. P>
Je recommanderais Minhook < / a>. C'est certainement la meilleure bibliothèque libre que vous puissiez trouver et n'est pas pire que Microsoft Detours. P>
J'ai utilisé Minhook à plusieurs reprises avec un grand succès. Définitivement recommandé.
Avez-vous essayé le Hook Deviare API ...
Deviare est autorisé sous une licence commerciale et open source (GNU General Public License version 3). P>
Cela pourrait être utile si vous pouviez indiquer ce que l'API vous vouliez accrocher et pourquoi.
Detours est un forfait d'instrumentation. Est-ce ce que vous voulez faire, instrument votre dll Win32?
Premièrement, je suis vraiment désolé de ne pas avoir répondu à temps, était sur de longues vacances. Retour au sujet, je souhaite accroître les fonctions de gestion des fenêtres de CreateProcess et de fichiers. Fondamentalement, je veux que mon application gagne le contrôle avant que Windows, le système d'exploitation puisse toucher un fichier (éventuellement un fichier EXE).