【问题标题】:How to hook api calls in another application如何在另一个应用程序中挂钩 api 调用
【发布时间】:2011-03-28 17:17:54
【问题描述】:

我正在尝试挂钩另一个应用程序的 ExtTextOut 和 DrawTextExt GDI 方法调用。

我知道我需要使用 GetProcAddress 在 gdi32.dll 中找到那些方法的地址,并用我的函数的地址覆盖我要挂钩的进程中的地址。然后在我的函数中做我需要的,然后调用原始函数。

我想让这个钩子功能可用于 .net 应用程序,显然这可以通过创建一个“中间”非托管 dll 来实现钩子,并且能够在 .net 端触发事件,所以新功能可以在托管环境中编写。我只是不确定如何实现这一点。有没有人有任何代码示例或信息链接?

【问题讨论】:

    标签: c# winapi hook


    【解决方案1】:

    我会推荐 Microsoft 的 Detours(仅限 C++ x86)或 EasyHook(C++ 和 C#,x86/x64)。

    http://easyhook.codeplex.com/

    我以前用过,效果很好。您必须传递一个函数或地址以及您希望将其重定向到的位置,并且您可以将所有调用(针对所有进程或特定进程)发送到您的函数中。教程涵盖了大部分基础知识,但如果您愿意,我可以将代码编辑到此答案中。

    有点琐碎的是,它也可以以另一种方式工作。将指针传递给您的函数,您可以将调用重定向到外部代码。与旧应用或闭源应用进行一些有趣的集成。

    【讨论】:

    • FWIW 专业版 Detours 支持 ia/x64
    • EasyHook 对我来说听起来更好,因为它功能齐全(可以免费运行 64 位)... 是否有某种教程可用于指导运行一个小示例?我在文档部分什么也没看到。
    • 它隐藏在下载页面上:easyhook.codeplex.com/releases/view/24401 Managed API docs,Tutorial and Introduction。不是最好的教程,但它们应该足以让您入门。 :)
    • 尝试将EasyHook 用于MicrosoftEdge 进程,结果出现Unable to find EasyHook library in target process context. (Code: 5) 错误
    【解决方案2】:

    您可以使用Deviare API Hook,使用 DeviareCSharpConsole,它是包中的一个工具,可让您挂钩任何 API 并在类似树视图的控件中查看参数值。 据我报道,它在 Windows7 中需要的唯一技巧是以管理员身份加载。

    【讨论】:

      【解决方案3】:

      How I Built a Working Poker Bot 有注入代码和挂钩 gdi 事件的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多