2010-11-25 3 views
0

J'essaye de faire du hooking dans C# (je préfère ne pas utiliser Detours ou C++) donc j'utilise EasyHook.Comment utiliser Easyhook avec un exécutable non géré

http://easyhook.codeplex.com/

Cependant Quand je fais ce

Config.Register("This description can be anything.", @"SomePathToAnExecutable.exe", "MyInjectionDll.dll"); 

Je reçois l'erreur:

There was an error while connecting to target: System.BadImageFormatException: Unable to load given assembly [SomePathToAnExecutable.exe] for reflection.

Is this a valid NET assembly? ---> System.BadImageFormatException: Could not load file or assembly [SomePathToAnExecutable.exe] or one of its dependencies. The module was expected to contain an assembly manifest.

Question 1) Ai-je raison de penser que SomePathToAnExecutable est le processus que vous vouloir accrocher dans ???

Question 2) Est-ce que l'exécutable doit être géré alors?

J'ai également demandé à sur le site du projet codeplex, mais aucune réponse.

http://easyhook.codeplex.com/Thread/View.aspx?ThreadId=235616

Répondre

1

Réponse 1) N ° Config.Register registres gérés assemblées avec le GAC. Ainsi, vous enregistrez tous les assemblages participant à votre code. Cela inclut la DLL que vous souhaitez injecter et l'assembly qui fournit l'interface commune pour IPCServer. Pour ma il ressemble à celui-ci par exemple:

 Config.Register("MyHook", 
      Path.Combine(startupPath, "HookManager.dll"), 
      Path.Combine(startupPath, "NetworkIncomingHook.dll"), 
      Path.Combine(startupPath, "NetworkOutgoingHook.dll") 
     ); 

Le HookManager.dll contient l'interface que j'utilise pour créer le IPCServer (et où tous les messages sont envoyés à des fonctions crochus). Le NetworkIncomingHook.dll et NetworkOutgoingHook.dll sont les deux DLL que j'injecte dans mon programme. Ceci est fait par RemoteHooking.Inject. 2) Non. Vous pouvez également raccorder des assemblages non gérés.

+0

Pouvez-vous me diriger vers quelques exemples simples d'accrochage d'assemblys managés dans un exécutable non géré? –

+0

@Lee: Mon interface partagée: http://pastebin.com/C5SRVqtB. Doit être mis dans votre application réelle. Ma classe qui gère l'accrochage de mon application dans le non géré: http://pastebin.com/4FnM25bS. Pour réellement accrocher une instance, je dois bien sûr appeler la méthode HookInstance (avec l'identifiant du processus en paramètre). – Fge

Questions connexes