3

在 Windows 上,所有磁盘 I/O 最终都通过 Win32 API 调用(如CreateFileSetFilePointer等)发生。

现在,是否可以在运行时拦截这些磁盘 I/O Win32 调用并在您自己的代码中为所有动态链接的 Windows 应用程序挂接?也就是说,应用程序CreateFile通过 Windows DLL 而不是静态的 C 库获得其功能。

我有一些限制是:

  1. 没有源代码:我没有想要拦截的进程的源代码。

  2. 线程安全:我的钩子代码可能会动态分配自己的内存。此外,由于该内存将与多个拦截的进程(及其线程)共享,我希望能够序列化对它的访问。

  3. 条件委托和覆盖:在我的钩子代码中,我希望能够决定是委托给原始的 Win32 API 功能,还是使用我自己的功能,或两者兼而有之。(很像 C++ 或 Java 中子类的覆盖方法中对超类方法的可选调用。)

  4. 常规用户空间代码:我希望能够在不编写任何设备驱动程序的情况下完成上述操作,这主要是因为编写设备驱动程序涉及的复杂性。

如果这是可能的,我会很感激一些指示。源代码不是必需的,但总是受欢迎的!

4

2 回答 2

2

如果 Detours 不是您想要的,您可能需要查看mhook 。

以下是您在使用钩子时可能会遇到的几个问题:

于 2013-10-18T11:11:30.523 回答
0

我建议您从 Microsoft Detours 开始。它的免费版也存在,而且它相当强大的稳定版。对于注入,您必须找到适用于目标应用程序的注入方法。不确定您是否需要自己编写这些代码,但是像“Extreme Injector”这样的简单工具可以很好地测试您的方法。至少在我看来,您绝对不需要为如此简单的任务开发任何内核级驱动程序。为了得到我和其他人的全力帮助,我想先看看你的方法,或者列出手头问题的更多限制,或者你到目前为止从哪里开始,但遇到了问题。这缩小了很多闲聊范围,也可以节省您的时间。

现在,如果您不熟悉 Detours from Microsoft (MSFT),请在下载后从以下链接下载它:http ://research.microsoft.com/en-us/projects/detours/ 。您需要自己编译它。它非常简单,并带有一个已编译的 HTML 帮助文件和示例。到目前为止,您的个人资料属于 IAT(导入地址表)和 EAT(导出地址表)。

我希望这个非摘要的答案对您解决问题的方法有所帮助,如果您遇到困难,请再次询问。祝你好运!

于 2015-08-30T06:16:06.503 回答