2011-10-27 51 views
0

我的应用程序使用一些API,如GetProcAddressCreateProcess,它们有时会导致防病毒将其标记为恶意,即使它不是。检查API是否受监视(挂钩?)

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

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

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

谢谢。

+3

你会如何检查你的API监视器检测器没有被挂钩? –

+0

'GetProcAddress'和'CreateProcess'本身不应该引发任何AV标志。你使用'CreateRemoteThread'进行远程dll注入吗?如果是这种情况,您的功能的签名可能会匹配恶意软件。 – JosephH

+0

没有dll注入,也没有创建远程线程。这两个API在执行不同事情的程序中处于不同的部分。你知道如何检查API钩子吗? –

回答

1

在win32上没有检测和/或放置钩子的正式方法(除了仅涵盖一小部分功能的SetWindowsHookEx()http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990)等功能)。

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

有两种常用的方法放置一个钩:

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

要详细了解不同的方法来将挂钩(优点/缺点)请考虑在这里阅读http://help.madshi.net/ApiHookingMethods.htm

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

有关如上所述检测挂钩的方法,请在此处查看“ApiHookCheck算法”http://www.security.org.sg/code/apihookcheck.html。有这个网页上有样品来源,我做了而不是测试。

+0

这是我需要的信息。谢谢! –

+0

ApiHookCheck算法的链接不再起作用。有人可以提供一个很好的链接吗? – Benny

+1

@Benny:这可能是一个开始:http://security.stackexchange.com/q/17904/36769 – alk