0

有没有办法(以编程方式)检测用户模式挂钩列表?我曾尝试阅读一些相关的文章,但无法通过。任何指示或想法或示例都会有很大帮助。由于我直到现在还没有开始编写代码,所以请随时用 C 或 C++ 帮助我。TIA。

编辑::我正在尝试一种方法来枚举当前正在运行的所有进程,然后再次枚举每个进程使用的所有模块。我真正想尝试的(正如一些专家所解释的)是比较当前加载到内存中的所有模块的枚举列表和每个进程的磁盘上的模块列表以检查挂钩。有人可以解释一下吗?我不知道我的问题是什么,但如果你明白我的困惑是什么,请在这里帮助我。

4

2 回答 2

0

有几种方法可以实现用户模式挂钩。例如:

  1. 可以在函数的开头内嵌插入无条件分支指令。
  2. 导入地址表的修补。
  3. 某些机制可用于在int 3输入函数时引发异常(更改页面保护等),然后使用向量异常处理程序重定向执行。

检测方法因您要检测的用户模式挂钩方法而异。举个例子,

  1. 检测用户模式挂钩的最常见方法(JMP目标函数开始处的指令)的经典方法是反汇编函数并检查第一条指令。
  2. 动态解析 IAT 中预期的函数地址,GetProcAddress并检查表是否符合预期。
  3. 检查页面保护、反汇编等。

我不打算提供所有可能的挂钩(和检测)方法的详尽枚举,而是要解释没有单一的通用方法可以生成用户模式挂钩列表。

于 2012-11-05T11:34:15.840 回答
0

我建议先寻找其他一些东西。

  1. 检查 . 中是否有 RWX 内存块Process Address Space。它不像将内存中的每个函数与磁盘进行比较那样的激烈操作。
  2. 要检查 IAT 挂钩,请检查是否Function Address不在加载的模块范围之外。
于 2014-06-17T21:51:13.713 回答