3

不是一个非常好的问题,对不起。

我有一个程序需要在从资源管理器打开文件时发出警报(即调用 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 中充满了垃圾值,因此(据我所知)无法检索任何导入函数的条目。
看起来代码隧道是挂钩的唯一方法。

4

4 回答 4

3

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

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

于 2009-11-19T17:36:49.950 回答
3

Detours 库:

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

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

于 2009-11-20T01:20:30.173 回答
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。

于 2009-11-24T16:33:10.810 回答
-2

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

没必要打扰。哈哈 :-)

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

对不起。哈哈 :-)

于 2011-04-10T20:21:06.500 回答