【问题标题】:retrieve the global hook chain in windows在 windows 中检索全局钩子链
【发布时间】:2010-09-19 14:59:02
【问题描述】:

如果可能的话,我需要在 Windows 中获取全局钩子链中的函数列表,并获取它们对应的应用程序。但是,我不知道如何从全局钩子链中检索信息。

据我所知,没有 Windows API 可以做到这一点,所以我想我必须通过解析钩链链接列表来找到它们。问题是我不知道这个链表的数据结构和起始地址。

有人知道windows是如何管理其全局钩子链的吗?

【问题讨论】:

  • 据我所知,没有真正的 global 钩链。此外,即使是桌面上的钩子链也不与应用程序相关联。它们在注入的 DLL 中调用 DLL 函数。
  • 看看汉斯链接。 windows 中似乎存在一个真正的全局钩子链。
  • 没有记录的方法可以做到这一点。如果您开始挖掘未记录的内容,那么您可能会停止在未来版本的 Windows 中工作。 (您还会给 Windows 兼容性团队带来噩梦。)为什么您需要知道这一点呢?

标签: c++ windows hook


【解决方案1】:

blog post 显示了我见过的一种方法。它被this code 引用(注意慢速服务器)。当然是疯狂的东西,不知道这在不同 Windows 版本之间的移植效果如何。

【讨论】:

  • 感谢您的帮助。我看过博客,它给了我一个概述,但我认为代码可能更有用。现在我正在尝试阅读汇编代码并在win7下构建它。
【解决方案2】:

您知道所有 Window 挂钩都必须有一个与之关联的已加载模块,该模块已被注入到目标进程中,而不是尝试遍历内部 Windows 结构;如果您试图确保您自己的应用程序没有被挂钩,请枚举已加载的模块列表并查找不应该存在的模块。

【讨论】:

  • 这对您有什么帮助,您应该如何确定“应该”存在什么?如果我正确地解释了他的问题,他想要函数指针本身
  • 运行应用程序,列出你机器上的模块,然后这些就是应该存在的。
  • 没有办法知道“应该”在那里。有很多应用程序会在全局范围内注入不执行窗口挂钩的 DLL。
  • @Mike 我们不知道为什么 OP 只寻找钩子而不是寻找任何可以改变程序行为的东西。如果他们正在寻找任何可以改变程序行为的东西,那么注入的 DLL 就像钩子一样不受欢迎。
猜你喜欢
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多