【问题标题】:'Safe' DLL Injection'安全' DLL 注入
【发布时间】:2010-12-18 09:50:06
【问题描述】:

这不是一个非常好的问题,抱歉。

我有一个程序需要在从资源管理器打开文件时发出警报(即调用 ShellExecute(A/W))。

不幸的是,微软删除了允许您在 Vista 及更高版本中挂钩这些事件的 COM 接口 (IShellExecuteHook),据说是因为旧代码可能会因更改而导致崩溃。有一种解决方法可以重新启用此功能,但它不再有效。

我进行了一些研究,看起来捕获对 ShellExecute 的调用的唯一方法是将调用重新路由到 shell32.dll。目前,我正在考虑将自己的 DLL 注入资源管理器进程,然后将 ShellExecute 的 IAT 条目复制到我的 DLL 中的某个地址分配中,最后修改 ShellExecute 的 IAT 条目以指向我的函数,这将通知打开文件的程序并跳转到我们之前存储的原始 ShellExecute 函数。

我最关心的是防病毒软件。他们会在乎我注射到 explorer 中吗?他们会关心我正在修改 IAT 吗?

另一个问题是这是否安全;浏览器的安全权限是否有可能(或相当可能)不允许通过 CreateRemoteThread 进行注入?如果是这样,有没有更好的方法来进行这种注入?

一般来说有没有更好的方法来做到这一点?

编辑:对于将来遇到此问题的任何人,explorer.exe 没有 shell32.dll 的 IAT;它有一个标头,但是 thunk 中充满了垃圾值,因此(据我所知)无法检索任何导入函数的条目。
看起来代码隧道是唯一的方法。

【问题讨论】:

  • 由于似乎没有简单的解决方法,您可以解释一下您尝试以这种方式实现应用程序的哪些功能:也许有更简单的方法可以做到这一点。
  • 我们将新下载的文件标记为未读。当用户打开文件时,我们希望将其标记为已读。没有可能的包罗万象来实现这一点,但我们希望尽可能准确。另一种方法是编写一个驱动程序来获取 CreateProcess 的通知并解析文件名的参数,但它不如钩子那么可取。
  • 你没有提到是什么类型的文件,但是应用程序可能会在不涉及资源管理器的情况下打开文件。您能改为监控“查看器”应用吗?

标签: c++ c winapi hook shell32


【解决方案1】:

大多数优秀的防病毒启发式算法都应该将导入表修补视为特洛伊木马的危险信号。

madcodehook 的在线文档有一些关于各种代码注入技术、它们的优点/缺点的扩展文章,并且 API 提供了一些用于指定“安全”挂钩的选项: http://www.madshi.net/madCodeHookDescription.htm

【讨论】:

  • 谢谢。我也考虑过他们建议的扩展代码覆盖技术,但我担心覆盖 shell32 可能是危险的。不过,我会试一试。
【解决方案2】:

Detours 库:

http://research.microsoft.com/en-us/projects/detours/

来自 Microsoft Research 允许任意挂钩函数。你可以试一试。

【讨论】:

  • 但请注意,如果您在发布代码中使用它,则后果自负,任何操作系统修补程序/补丁/SP 都可能破坏您的代码。
【解决方案3】:

更多关于 API 挂钩的资源:

易钩:http://www.codeplex.com/easyhook

偏差:http://www.nektra.com/products/deviare-api-hook-windows/

一个有趣的帖子:http://www.codeproject.com/KB/system/hooksys.aspx

在进行 API 挂钩时,评估您需要在哪些环境中运行非常重要。 例如,并非所有库都支持 x86/x64。

Detours 仅在许可(付费)版本中支持 x64。 Easy hook 支持 x86 和 x64。

【讨论】:

  • 不幸的是,这些都不是有效的选项。 Easyhook 是 GPL 的,我怀疑我的公司是否想让产品开源。此功能非常琐碎(并且从未在 Vista 及更高版本上运行过)并且不保证出去购买图书馆的许可证。
【解决方案4】:

Windows Vista 和 Windows 7 中的 Windows 资源管理器甚至不调用 ShellExecuteA 或 ShellExecuteW。

没必要打扰。大声笑:-)

并且,如果我可以补充的话,我已经通过使用 32 位和 64 位内联挂钩来挂钩这两个函数进行了测试。

对不起。大声笑:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多