【问题标题】:What is the recommended way to hook Win32 APIs for a commmercial application? [closed]为商业应用程序挂钩 Win32 API 的推荐方法是什么? [关闭]
【发布时间】:2010-11-08 10:58:37
【问题描述】:

对于用于商业应用程序的 API 挂钩库或代码,您有什么建议?

我看过 Microsoft Detours,它似乎非常好,但绝对超出了我期望从我的应用程序中获得的利润的预算。

是否有任何库提供跨 WinXP 和 Vista(以及 Windows 7,如果不是太多要求的话!)的兼容性?有没有人在商业产品中使用过这样的库?

【问题讨论】:

  • 如果您能说明您想要挂钩的 API 以及原因,这可能会有所帮助。
  • Detours 是一个检测包。这就是你想要做的,检测你的 Win32 DLL 吗?
  • 首先,真的很抱歉没有及时回复,正在放长假。回到正题,我想把Windows的CreateProcess和文件处理函数挂钩。基本上,我希望我的应用程序在 Windows 操作系统接触文件(可能是 EXE 文件)之前获得控制权。

标签: winapi api hook detours


【解决方案1】:

你试过Deviare API Hook ...

Deviare 根据商业和开源许可证(GNU 通用公共许可证第 3 版)获得许可。

【讨论】:

    【解决方案2】:

    我推荐MinHook。它绝对是你能找到的最好的免费库,而且不比 Microsoft Detours 差。

    【讨论】:

    • 我曾多次使用 minhook 并取得了巨大的成功。绝对推荐。
    【解决方案3】:

    你想做什么?修补导入表是否足够?我在家里使用了http://jpassing.wordpress.com/2008/01/06/using-import-address-table-hooking-for-testing/ 的变体来进行一些有趣的副业。

    【讨论】:

      【解决方案4】:

      在系统范围内,Win32 中的 API 挂钩实际上是不可能的。您可以通过将 DLL 注入每个进程然后从内部修补每个进程来近似它。您可以使用 IAT 修补(修补调用二进制文件的位置)或 Detours 样式的修补程序(修补被调用方的位置)。

      修补调用者(IAT 修补)意味着您需要枚举进程中加载​​的每个 DLL 并单独修补每个。您还需要挂钩 LoadLibrary 以修补任何动态加载的新 DLL。

      修补被调用者(Detours)的好处是你只需要修补一个位置即可让钩子应用于整个过程。

      即使您从共享系统 DLL 挂钩 API,您也必须为每个进程打补丁;操作系统将调用写时复制,当您修补系统 DLL 时,该进程将获得一个要修补的私有副本。

      DLL 注入变得有点讨厌,而且还有几种技术:AppInit_DLLs,它只适用于加载 USER32.DLL 的进程(并且在 Vista 和 Windows 7 中有几个新限制),使用 SetWindowsHookEx ,或使用CreateRemoteThread。 Vista 和 Windows 7 中的Integrity levels 使注入系统范围内的进程变得更加困难。您的应用需要以管理员权限和高完整性级别运行才能成功完成。

      另一种技术是在内核模式下挂钩系统服务。这需要编写设备驱动程序,但它基本上是Sysinternals Process Monitor 使用的技术(或至少使用过一次)。由于PatchGuard 和驱动程序签名要求,这是 64 位 Vista 和 Win7 上的问题。您可以使用file system filter 驱动程序监控某些文件系统活动。

      【讨论】:

        【解决方案5】:

        您也可以尝试 NCodeHook 库 (http://newgre.net/ncodehook),它免费且小巧。

        【讨论】:

        • ...但没有像它可能/应该的那样有据可查。仍然 +1。
        【解决方案6】:

        你可以试试 EasyHook,它看起来很有用。虽然不能修补“系统范围”,但您需要类似 Proxy DLL 之类的东西。

        http://www.codeplex.com/easyhook

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多