抱歉,这不是一个非常好的问题. 我有一个程序,需要在从资源管理器打开文件时发出警报(即调用ShellExecute(A / W)). 不幸的是,Microsoft删除了COM接口(IShellExecuteHook),允许您在Vista中挂起这些事
我有一个程序,需要在从资源管理器打开文件时发出警报(即调用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充满了垃圾值,所以没有办法(据我所知)检索任何导入函数的条目.
看起来代码隧道是解决这个问题的唯一方法.
madcodehook的在线文档有一些关于各种代码注入技术的扩展文章,它们的优点/缺点,并且API提供了一些指定“安全”挂钩的选项:
http://www.madshi.net/madCodeHookDescription.htm