抱歉,这不是一个非常好的问题。
我有一个程序需要在从资源管理器打开文件时收到警报(即调用ShellExecute(A / W))。
不幸的是,Microsoft删除了COM接口(IShellExecuteHook),它允许您在Vista中挂起这些事件,因为旧代码可能会因更改而导致崩溃。有一种解决方法可以重新启用此功能,但它不再有效。
我做了一些研究,看起来捕获ShellExecute调用的唯一方法是将调用重新路由到shell32.dll。目前,我正在考虑将自己的DLL注入到资源管理器进程中,然后将ShellExecute的IAT条目复制到我的DLL中的某些地址分配,最后修改ShellExecute的IAT条目以指向我的函数,该函数将通知打开文件并跳转到原始ShellExecute函数的程序,该函数的地址是我们之前存储的。
我最关心的是防病毒。他们会关心我注入探险家吗?他们会关心我正在修改IAT吗?
另一个问题是这是否安全;是否有可能(或者更可能)探险家的安全权限不允许通过CreateRemoteThread注入?如果是这样,有没有更好的方法来进行这种注射?
一般来说,有更好的方法吗?
编辑:对于将来遇到此问题的任何人,explorer.exe没有shell32.dll的IAT;它有一个标题,但thunk充满了垃圾值,所以没有办法(据我所知)检索任何导入函数的条目。
看起来代码隧道是解决这个问题的唯一方法。
答案 0 :(得分:3)
大多数优秀的防病毒启发式应该在导入表修补时将其视为特洛伊木马的红旗。
madcodehook的在线文档包含一些关于各种代码注入技术的扩展文章,它们的优点/缺点,并且API提供了一些指定“安全”挂钩的选项: http://www.madshi.net/madCodeHookDescription.htm
答案 1 :(得分:3)
Detours图书馆:
http://research.microsoft.com/en-us/projects/detours/
来自Microsoft Research允许任意挂钩功能。你可以试一试。
答案 2 :(得分:3)
有关API挂钩的更多资源:
轻松勾拳:http://www.codeplex.com/easyhook
Deviare: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。
答案 3 :(得分:-2)
Windows Vista和Windows 7中的Windows资源管理器甚至不会调用ShellExecuteA或ShellExecuteW。
没点麻烦。哈哈: - )
AND,如果我可以添加,我已经通过使用32位和64位内联挂钩挂钩两个函数进行了测试。
对不起。哈哈: - )