我的应用程序使用一些API,如GetProcAddress
和CreateProcess
,它们有时会导致防病毒将其标记为恶意,即使它不是。检查API是否受监视(挂钩?)
我想要做的是检查一个特定的API是否被监控或挂钩,如果是,那么我不会调用该部分的代码。
如何检查某个API是否被挂钩?
这是用C编写的Windows应用程序。
谢谢。
我的应用程序使用一些API,如GetProcAddress
和CreateProcess
,它们有时会导致防病毒将其标记为恶意,即使它不是。检查API是否受监视(挂钩?)
我想要做的是检查一个特定的API是否被监控或挂钩,如果是,那么我不会调用该部分的代码。
如何检查某个API是否被挂钩?
这是用C编写的Windows应用程序。
谢谢。
在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。有这个网页上有样品来源,我做了而不是测试。
你会如何检查你的API监视器检测器没有被挂钩? –
'GetProcAddress'和'CreateProcess'本身不应该引发任何AV标志。你使用'CreateRemoteThread'进行远程dll注入吗?如果是这种情况,您的功能的签名可能会匹配恶意软件。 – JosephH
没有dll注入,也没有创建远程线程。这两个API在执行不同事情的程序中处于不同的部分。你知道如何检查API钩子吗? –