2008-11-22 6 views
33

En résumé: je souhaite surveiller les appels sélectionnés d'une application vers une DLL.Surveillance des appels d'application à la DLL

Nous avons une ancienne application VB6 pour laquelle nous avons perdu le code source (la société n'utilisait pas le contrôle de source à l'époque ..). Cette application utilise une DLL tierce.

Je souhaite utiliser cette DLL dans une nouvelle application C++. Malheureusement, l'API DLL n'est que partiellement documentée, donc je ne sais pas comment appeler certaines fonctions. J'ai la signature des fonctions.

Depuis l'application VB6 utilise cette DLL, je veux voir comment il appelle plusieurs fonctions. Jusqu'ici j'ai essayé ou regardé -

  1. APIHijack - exige que j'écrive le code C++ pour chaque fonction. Puisque j'ai seulement besoin de noter les valeurs, cela semble être une surcharge.
  2. EasyHook - Identique à 1, mais permet d'écrire dans le code en langage .NET.
  3. OllyDbg avec uHooker - Je dois encore écrire du code pour chaque fonction, cette fois en Python. Aussi, je dois faire beaucoup de conversions en Python en utilisant le module struct, puisque la plupart des fonctions transmettent des valeurs en utilisant des pointeurs.

Étant donné que j'ai seulement besoin de consigner les paramètres des fonctions, je veux une solution simple. Existe-t-il un outil automatisé, pour lequel je pourrais dire quelles fonctions surveiller et leur signature, puis obtenir un fichier journal détaillé?

Répondre

10

Un peu plus Google recherche trouvé ce que je cherchais: WinAPIOverride32. Il permet d'écrire des fichiers texte tels que:

CustomApi.dll|void NameOfFunction(long param1, double& param2); 

Par la suite, ces fichiers peuvent être utilisés à l'intérieur du programme pour enregistrer tous les appels à NameOfFunction. Maintenant, j'ai juste besoin de comprendre comment enregistrer les tableaux et les paramètres des structures.

+2

Bah. Pour moi ce n'est pas si facile.J'essaye de _find_ la fonction qu'Outlook appelle, mais je n'ai aucune idée de la fonction qu'elle appelle: / –

25

Une solution "statique" (en ce sens qu'elle peut capturer une trace de pile sur demande) serait Process Monitor.

Process Monitor

Une solution plus dynamique serait ApiMonitor, mais il peut être trop vieux pour être compatible avec les applications à surveiller. Cela vaut la peine d'essayer.

http://www.rohitab.com/gallery/api-monitor-2-0/main-window.png

+4

Apparemment, il surveille uniquement les fonctions de l'API Windows. J'ai besoin de surveiller une DLL API non-Windows. Est-ce que je manque quelque chose? – kshahar

+0

Non, en effet. Même Process Monitor affichera votre pile DLL, mais avec "Inconnu" pour la méthode. – VonC

+2

ApiMonitor est génial. – expert

3

Visual Studio Addin Runtime fluxhere:

Runtime Flow moniteurs en temps réel et les appels de fonction de journaux et paramètres de la fonction dans votre fonctionnement application .NET et montre un arbre de trace pile . Aucune instrumentation ou code source requis pour la surveillance.

Questions connexes