您对于商业应用中使用的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,您仍需要执行按进程的修补;操作系统会调用写时复制,当您修补系统DLL时,进程会获得一个私有副本进行修补。
DLL注入变得有点棘手,而且有几种技术: AppInit_DLLs
,它仅适用于加载USER32.DLL
的进程(并且在Vista和Windows 7中有几个新限制),使用SetWindowsHookEx
,或通过使用CreateRemoteThread
。 Vista和Windows 7中的完整性级别使得系统范围内注入进程变得更加困难。您的应用程序将需要以管理员特权和高完整性级别运行,才能成功完成此操作。
另一种技术是在内核模式下钩取系统服务。这需要编写设备驱动程序,但基本上这就是Sysinternals Process Monitor使用的技术(至少曾经)。在64位Vista和Win7上出现问题,因为PatchGuard和驱动程序签名要求。您可以使用文件系统过滤器驱动程序来监视某些文件系统活动。