检查API是否受到监视(挂钩?)

我的应用程序使用一些像GetProcAddressCreateProcess这样的API,有时会导致Antiviruses将其标记为恶意,即使它不是。

我想要做的是检查一个特定的API是否被监视或挂,如果是,那么我不会调用该部分的代码。

我如何检查某个API是否被挂钩?

这是用C编写的Windows应用程序

谢谢。

Solutions Collecting From Web of "检查API是否受到监视(挂钩?)"

在win32上,没有官方的方法来检测和/或放置钩子(除了SetWindowsHookEx()http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990 )等功能,它只覆盖非常小的一组功能)。

检测挂钩取决于如何应用挂钩。

有两种流行的方法来放置一个钩子:

  1. 导入/导出表格修补
  2. 代码覆盖

有关不同方法放置钩子的细节(优点/缺点),请考虑阅读http://help.madshi.net/ApiHookingMethods.htm

每种挂钩方法都需要一种不同的方法来检测它。

有关如上所述检测挂钩的方法,请参阅http://www.security.org.sg/code/apihookcheck.html中的 “ApiHookCheck算法”。 这个页面上有可用的示例源,我没有测试。