【问题标题】:Hooking API Calls in Current Process?在当前进程中挂钩 API 调用?
【发布时间】:2011-06-13 19:22:38
【问题描述】:

如何挂钩/重定向在 当前 进程中加载​​的 DLL(例如,来自 Kernel32.dll 的 CreateThread)中的函数?

(我无法控制哪些代码调用CreateThread,所以我不能只使用其他代码。)

语言并不重要;我猜 C/C++ 将是最好的选择。


更新:

我忘了提一下:我不是在寻找需要将额外库捆绑到我的程序中的解决方案;我一直在寻找一种手动挂钩的方法(例如通过重写函数的地址),而不是使用外部库来执行此操作。

但感谢那些提到外部库的人;对不起,我没有早点说。

【问题讨论】:

标签: c++ c winapi hook


【解决方案1】:

有用于此的 MS 库:Detours

【讨论】:

  • 嗯...我听说过 Detours,但从未使用过。它有多轻?我认为它需要加载另一个库......我想我应该说,我需要避免这种情况。
  • 它非常轻量级并且源代码是公开的,但是许可证会强制您将其用作 DLL。无论如何,您都可以检查他们是如何做到的
【解决方案2】:

(这很可能更适合作为“Detours”答案下的“评论”,但是,由于我的“声誉”还不足以添加我猜的 cmets,让我将其发布为一个答案)

This post 在this thread ("DirectShow question") 下提到了 Alessandro Angeli 的 Detours 的替代/本土替代方案(还有一些粗略的代码示例)。

实际上,我首先发现它在 another thread ("problem in hooking cocreateinstance") 中引用,同时还在搜索 COM 组件创建挂钩/跟踪(不过,第二个线程更侧重于跨进程挂钩)。

为了方便起见,我还要在这里添加一个WinAPIOverride32(由 Jacquelin Potier 提供)的链接。它似乎有“开发人员设计的 GUI”:) 但是,因为它是开源的(如上所述),所以没有任何抱怨。

【讨论】:

    【解决方案3】:

    查看http://easyhook.codeplex.com/

    这是一个 API Hooking 框架。 开源,非常好用!

    【讨论】:

    • 感谢您的链接;不幸的是,我已经听说过(并使用过)EasyHook,但我一直在寻找更轻量级的解决方案。 (我不想加载整个库只是为了挂钩一个函数。)
    • 查看“WinAPIOverride32” - 它是一个非常开源的应用程序,可以运行执行 API 挂钩来探索/研究应用程序。他们没有完整的框架,因此您可以查看他们的代码作为您想要实现的示例。
    • 哇很有趣!我从没听说过那个。 :) 谢谢!我会调查的。
    • 嗯...它仍然需要加载外部 DLL 吗?有几个提到不同的库。 (我想我可以将源代码插入到我自己的程序中;我会尝试的..)
    • 这就是我的意思 :-) 您可以只使用源代码作为示例。顺便说一句,它是一个很棒的应用程序!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多