加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:12:53 所属栏目:Windows 来源:网络整理
导读:对于商业应用程序中使用的API挂钩库或代码,您有何建议? 我看过微软Detours,看起来非常好,但绝对超出预算,我期待从我的应用程序中获利. 是否有任何库可以提供WinXP和Vista之间的兼容性(如果没有太多要求,可以使用Windows 7)?是否有人在商业产品中使用这样的
对于商业应用程序中使用的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驱动程序监视某些文件系统活动.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读