2009-10-01 6 views
6

Je me suis assigné une nouvelle tâche qui consiste à "espionner" sur les objets COM.Espionnage sur les objets COM

Même si vous ne faites pas COM, vous êtes probablement familier avec les techniques d'accrochage API où vous pouvez vous accrocher à une fonction importée et exécuter votre propre code avant d'appeler l'original. L'accrochage à l'API est quelque peu complexe mais il devient rapidement désordonné (trop compliqué pour le code de production IMO) si vous essayez de vous connecter à des méthodes d'objet COM. Donc, en ce moment, pour faire "mon boulot", je mets un hook API pour CoCreateInstance et je distribue des proxies écrits à la main pour les interfaces qui m'intéressent. Maintenant, ce n'est pas beaucoup d'interfaces mais ce n'est pas le plus propre des solutions soit.

Existe-t-il un moyen de faire cela de façon plus nette, de préférence sans utiliser l'accrochage API?

Sur une autre note, cet article semble être un excellent travail http://www.ddj.com/windows/184416546?pgno=5 mais le binaire ne fonctionne plus (je suppose qu'il a été écrit autour de l'heure Win98). Est-ce que quelqu'un en connaît les rouages ​​internes et peut me diriger vers la bonne direction pour le faire fonctionner à nouveau?

Merci

Répondre

2

Je recommande fortement d'utiliser le 'Universal Delegator' de Keith Brown pour effectuer l'interception de bas niveau. L'outil ComTrace mentionné par Kim Grasman l'utilise. Il vous permet d'enrouler un objet com arbitraire dans un 'shell' qui peut effectuer une interception, une journalisation, etc. Les articles originaux (avec code) décrivant le délégant universel sont here et here.

Si vous souhaitez espionner des objets com dans des processus arbitraires (dont vous n'avez pas la source), vous devrez également effectuer une injection de code en utilisant CreateRemoteThread() ou quelque chose de similaire. Il y a un article here qui pourrait vous aider à démarrer si vous ne l'avez pas fait auparavant.

3

Je n'ai pas de réponse définitive, mais je connais un gars qui pourrait :)

Jonas Blunck's outils sont tout au sujet de l'interception à différents niveaux, son ComTrace est basé sur la technique de Keith Brown, si je me souviens bien, et ressemble à ce que vous faites, sauf qu'il analyse les bibliothèques de types et les en-têtes pour garder une trace dynamique des interfaces. Nous avons écrit Developer Playground ensemble (j'ai surtout fait de l'interface utilisateur), basé sur API, et je sais que Jonas a dit qu'il voulait retravailler ComTrace pour utiliser la même bibliothèque d'accrochage API, car elle donnait la meilleure résolution pour l'interception . Je ne sais pas ce que vous voulez utiliser pour cela, mais je vous suggère de vérifier les outils de Jonas et de lui envoyer un e-mail - il pourrait être en mesure de vous aiguiller dans la bonne direction.

Questions connexes