0

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

https://easyhook.github.io/

但是当我这样做时

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

我得到错误:

连接到目标时出错:System.BadImageFormatException:无法加载给定程序集 [SomePathToAnExecutable.exe] 以进行反射。

这是一个有效的 NET 程序集吗?---> System.BadImageFormatException:无法加载文件或程序集 [SomePathToAnExecutable.exe] 或其依赖项之一。该模块应包含程序集清单。

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

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

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

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

4

1 回答 1

1

答案 1) 否。向GACConfig.Register注册托管程序集。因此,您注册了所有参与您的代码的程序集。这包括您要注入的 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)不。您也可以挂钩非托管程序集。

于 2010-12-02T21:38:26.660 回答