9
votes

Quelle est la manière recommandée de gérer les API Win32 pour une application commerciale?

Quelle est votre recommandation pour une bibliothèque ou un code d'accrochage d'API à utiliser dans une application commerciale?

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.

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?


3 commentaires

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).


6 Réponses :


1
votes

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.


0 commentaires

0
votes

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.

http://www.codeplex.com/easyhook


1 commentaires

EasyHook a déménagé à Github.com/easyhook/easyhook



3
votes

Vous pouvez également essayer NCodeHook Lib ( http://newgre.net/ncodehook ), c'est gratuit et petit.


1 commentaires

... mais pas aussi bien documenté que possible / devrait être. Toujours +1.



18
votes

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).

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 LoadLibrary afin de corriger les nouvelles DLL chargées à la volée.

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.

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.

L'injection DLL devient un peu méchant, et encore une fois, il existe plusieurs techniques: appinit_dlls , qui fonctionne uniquement pour les processus qui chargent user32.dll (et ont plusieurs nouvelles restrictions dans Vista et Windows 7), en utilisant Setwindowshookex , ou en utilisant Createremotethread . 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.

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 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>


0 commentaires


0
votes

Avez-vous essayé le Hook Deviare API ...

Deviare est autorisé sous une licence commerciale et open source (GNU General Public License version 3).


0 commentaires