如何使用非托管可执行文件的Easyhook

时间:2010-11-25 15:51:07

标签: c# hook

我正在尝试用c#做一些挂钩(我宁愿不使用Detours或c ++)所以我一直在使用EasyHook。

http://easyhook.codeplex.com/

然而,当我这样做时

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

我收到错误:

  

连接时出错   目标:   System.BadImageFormatException:无法使用   加载给定的程序集   [SomePathToAnExecutable.exe] for   反射。

     

这是一个有效的NET程序集吗? --->   System.BadImageFormatException:可以   不加载文件或程序集   [SomePathToAnExecutable.exe]或其中之一   它的依赖关系。该模块是   预计包含一个集会   清单。

问题1)我是否认为SomePathToAnExecutable是您要挂钩的进程???

问题2)可执行文件是否必须是托管代码?

我也曾在codeplex项目网站上询问过,但没有回复。

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

1 个答案:

答案 0 :(得分:1)

答案1)否Config.Register使用GAC注册托管程序集。因此,您注册参与代码的所有程序集。这包括您要注入的DLL和为IPCServer提供公共接口的程序集。对于我来说,它看起来就像这样:

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

HookManager.dll包含我用来创建IPCServer的接口(以及从钩子函数发送所有消息的地方)。 NetworkIncomingHook.dll和NetworkOutgoingHook.dll都是我注入我的程序的dll。这是由RemoteHooking.Inject完成的。

2)否。您也可以挂钩非托管程序集。