我的应用程序使用了一些API,例如GetProcAddress
和CreateProcess
,这些API有时会将防病毒标记为恶意,即使它不是。
我要做的是检查是否正在监视或挂钩特定的API,如果是,那么我将不会调用该部分代码。
如何检查某个API是否已挂钩?
这是一个用C语言编写的Windows应用程序。
感谢。
答案 0 :(得分:1)
在win32上没有检测和/或放置钩子的官方方法(SetWindowsHookEx()
(http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990)等功能除了只包含很少的功能外)。
检测钩子取决于钩子的应用方式。
有两种流行的方法可以放置一个钩子:
有关放置挂钩的不同方法的详情(优缺点),请考虑阅读http://help.madshi.net/ApiHookingMethods.htm。
每种挂钩方法都需要采用不同的方法来检测它。
对于检测如上所述放置的挂钩的方法,请在此处查看“ApiHookCheck算法”http://www.security.org.sg/code/apihookcheck.html。此页面上提供了示例源,我做了 not test。