【问题标题】:Help needed with windows hookswindows挂钩需要帮助
【发布时间】:2011-06-23 18:24:11
【问题描述】:

我正在构建一个系统,该系统可以监控用户对其系统上的安全警报(软件更新、警告等)的反应。它还需要监控网络流量和系统上运行的进程,我期待社区帮助我设计这个系统。我们打算为用户提供测试笔记本电脑并在一段时间内监控他们的行为,以了解他们对各种应用程序和操作系统(本例中为 Windows)引发的安全警报有何反应。

以下是我的问题

  • 我能否使用 Windows 挂钩来解决第一个问题,即找出用户对各种应用程序引发的警报的反应。具体来说,可以使用全局钩子来解决这个问题吗? (如何收集这些信息(XML?)并将其转发回服务器(频率如何?)是另一个问题)

    • 我可以在 C# 中执行此操作,还是只能在 C++ 或 VB 中执行此操作?

    • 您知道解决问题的任何替代方法吗?有没有具备这些功能的软件。

我还有很多问题,但回答这些问题将是很好的第一步。真的希望从这个社区的知识渊博的人那里得到一些好的见解

提前谢谢你

编辑: 示例场景是当 adobe 提示您更新 flash 播放器或防病毒软件提示您更新定义或任何应用程序显示通知(与安全相关的关键字,如更新、警告、安装等)时,需要用户采取一些措施。 Windows 系统更新是另一个例子。我想知道用户对这些警报/通知/更新(通常是一个弹出窗口)的反应。所以我想知道我是否放置了一个全局钩子,它可以监视屏幕上显示的窗口的内容,并在窗口的内容/标题中出现某些单词(如更新、警报、警告等)时通知我(服务器)以及什么用户对消息做了处理(解雇了它,确定了它等)。不幸的是,我没有比这更多的规格。我可以使用任何我想实现的东西,但我不清楚我的选择是什么。

编辑 2:

在查看了我的要求并阅读了有关 hooks 的内容后,我觉得我可以通过结合使用 hooks 和以下 textGrab SDK http://www.renovation-software.com/en/text-grab-sdk/textgrab-sdk.html 来实现这一点。我需要一些指导,以了解我是否走在正确的轨道上。我在想如果我可以安装钩子,那么它可以让我处理屏幕上所有可能的窗口,我可以使用 textGRAB SDK 在这些窗口中查找某些关键字。尽管这可能会捕获一些有趣的文本,但我仍然不确定如何知道用户在窗口上执行了哪些操作。任何对钩子或 textGRAB 有任何经验的人,请让我知道这看起来是否合理。如果社区对我如何监控系统中任何应用程序抛出的安全相关消息有其他想法,请提出建议。我期待一些有用的建议来完成一个具有挑战性的项目。

【问题讨论】:

  • 任何从这些应用程序中收集有用数据的尝试都是一种黑客行为。您基本上是在谈论拦截每个 Windows 消息并尝试重新构建他们采取的操作。这样做的问题是每个应用程序都可以编写不同的,并且您不会找到一种方法来完成您正在寻找的事情。即使您确实设法完成了这项工作,您的应用程序也可能在任何给定时间更改(更新?)并且您的代码将不再像您预期的那样工作。
  • 如果您碰巧可以控制要监控的应用程序,那将是一回事。如果这只是一小部分人的学习练习,我是否可以建议模仿您希望他们响应的消息类型?示例:编写一个应用程序来显示错误、警报、警告、问题,以及任何你想要的 - 并以你喜欢的格式(xml?)简单地记录他们的操作。
  • @syllogism:我一直在尝试了解更多关于钩子的信息并查看了我的要求。我需要监视任何运行的应用程序,看看它们是否会发出任何警报、警告或提示更新。我相信可以通过钩子进行监控。我希望安装一个钩子,当一些“有趣的事件”发生时,被调用的过滤器函数会记录下来。但是,我仍然不清楚我需要哪个确切的钩子。 WH_CBT 看起来很有希望,但 WH_SYSMSGFILTER 和 WH_CALLWNDPROC 也是如此。我不确定监控所有应用程序的事件需要哪个钩子或钩子组合。

标签: windows security process hook monitor


【解决方案1】:

老实说,您需要一个更坚实的方向。我赞扬您尝试提供详细信息,但您似乎仍需要有关您的问题的更多信息..

我将尝试回答您的一些问题,但就像我说的那样 - 听起来您需要更多地了解您的问题,然后我们才能为您提供最佳答案。

-Alerts 是一个过于模糊的术语,您需要更好地定义它。这些“警报”应用程序是您可以控制的还是第三方应用程序?并非每个应用程序都会以相同的方式显示“警报”,即使他们这样做了 - 我认为使用系统级挂钩可能会太成问题而无法实施您的解决方案。我并不是说这一定是不可能的,但您说的是可能为您要监控的每个应用程序实现一组不同的逻辑(以确定给定应用程序的警报的数据)。

-我们中的任何人都无法确定满足您特定需求的最佳存储机制,您需要提供更多详细信息或自行决定。

-您收集数据的频率也是您必须提供更多详细信息或自行决定的事情。

-C/C++ 可能会为您提供最便携的解决方案,尽管没有什么可以阻止您使用 c# 调用 Win32 API。 (不是每个人都安装了 .NET 框架 - 信不信由你)

-您提到的问题似乎是一个有些特殊的问题...我不知道任何现有的软件可以完成您想做的所有事情。

另一个您尚未涉及的可能问题: 您尚未指定此“服务”的目标受众,但我想让您知道,如果我发现一个应用程序监控的事件与您所说的一样多,我会立即将其删除并写一封讨厌的信给写它的公司。

总之,请阅读此Article on hooks 以更好地了解它们的工作原理。

【讨论】:

  • 首先感谢您的详细回复。我想首先解决目标受众部分。这不是我们试图出售的服务。这是我们需要构建的系统,以便我们可以进行用户研究并了解人们对安全警报的反应。简而言之,这是研究所需要的。我将编辑我的问题并发布一个示例以使事情更具体。
【解决方案2】:

首先,您需要定义如何在代码中“看到”安全警报。 “安全警报”是一个相当模糊的术语。它会是一些带有一些标题和一些信息给用户的窗口还是......?

接下来,关于 Web 和流程:Windows 挂钩不会帮助您完成任务。它们更底层,没有你需要的那么先进。您不能挂接网络流量(您需要 network filter driver 用于 pre-Vista 或 Microsoft Filtering Platform 用于 Vista 及更高版本)。有关使用 C# 检查进程列表的一些信息,请参阅this question(似乎也没有简单的方法来捕获进程启动)。

【讨论】:

  • 我希望当窗口的内容(包括标题)包含某些关键字(例如:警告、更新、风险等)时会触发一些通知。这有意义吗?
  • @Sid 看起来太模糊了。 IE。如果这只是用于记录,您可以获取任何此类消息(Windows 挂钩将让您跟踪正在显示的窗口)并记录它。但是,您将需要手动验证消息是否真的是安全警报或其他内容(例如浏览器窗口中的 SO 帖子;)。
  • 以下工具对此有用吗? easyhook.codeplex.com我可以通过使用它来完成我想要做的事情吗?我只是想知道它是否有用。感谢您提供反馈。
  • @Sid 您需要区分 Windows 钩子(SetWindowsHookEx 函数及相关函数)和“钩子”作为一般方法。 Detours 和 EasyHooks 通过注入代码片段代替 WinAPI 函数的入口点来挂钩函数调用。这行得通,但总的来说这是黑客攻击,即这种方法存在副作用(例如,如果两个应用程序挂钩相同的功能,停用其中一个应用程序可能会导致麻烦)。但总的来说是的,EasyHook 将帮助您挂钩进程创建。但 EasyHook 并不能替代 Windows 挂钩机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 2011-03-03
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多