‘安全’DLL注入

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

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

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

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

我最关心的是防病毒。 他们会关心我注入探险家吗? 他们会关心我正在修改IAT吗?

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

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

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

最好的防病毒启发式应该在导入表修补时将其作为特洛伊木马的红旗。

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

Detours图书馆:

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

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

有关API挂钩的更多资源:

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

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

一篇有趣的post: http : //www.codeproject.com/KB/system/hooksys.aspx

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

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

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

没点麻烦。 大声笑 :-)

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

抱歉。 大声笑 :-)