winapi – 为商业应用程序挂钩Win32 API的推荐方法是什么?

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

我看过微软Detours,看起来非常好,但绝对超出预算,我期待从我的应用程序中获利.

是否有任何库可以提供WinXP和Vista之间的兼容性(如果没有太多要求,可以使用Windows 7)?是否有人在商业产品中使用这样的图书馆?

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

修补调用程序(IAT修补)意味着您需要枚举在进程中加载​​的每个DLL并分别修补每个DLL.您还需要挂钩LoadLibrary以修补任何即时加载的新DLL.

修补被调用者(Detours)的优点是您只需要修补一个位置以使钩子适用于整个过程.

即使您从共享系统DLL挂钩API,也必须执行每进程修补;操作系统将调用copy-on-write,当您修补系统DLL时,将为该进程提供要修补的私有副本.

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

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

相关文章
相关标签/搜索