【问题标题】:Checking if an API is monitored (hooked?)检查 API 是否被监控(挂钩?)
【发布时间】:2011-12-16 12:32:37
【问题描述】:

我的应用程序使用了一些 API,例如 GetProcAddressCreateProcess,这有时会导致防病毒软件将其标记为恶意,即使它不是。

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

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

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

谢谢。

【问题讨论】:

  • 您将如何检查您的 API 监视器检测器是否已被钩住?
  • GetProcAddressCreateProcess 单独不应引发 AV 的任何标志。您是否正在使用CreateRemoteThread 进行远程 dll 注入?如果是这种情况,您的函数的签名可能与恶意软件的签名匹配。
  • 无 dll 注入和远程线程创建。这两个 API 在程序的不同部分做不同的事情。你知道如何检查 API 挂钩吗?
  • "...检查某个特定的 API 是否正在...",您说的是哪个 API?
  • 没有可靠的方法来检查 API 是否已被钩住,因为钩住 API 的人可能也钩住了您的 API 检测器。

标签: c windows winapi hook


【解决方案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。此页面上有可用的示例源,我没有测试过。

【讨论】:

  • ApiHookCheck 算法的链接不再起作用。有人可以提供一个好的链接吗?
  • @Benny:这可能是一个起点:security.stackexchange.com/q/17904/36769
  • @alk 谢谢,我也发现了这个问题。如果它类似于您提到的 APIHookChecking 算法,在您的答案中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多