c++ - “安全”DLL 注入(inject)

标签 c++ c winapi hook shell32

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

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

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

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

我最担心的是防病毒软件。他们会关心我正在注入(inject)资源管理器吗?他们会关心我修改 IAT 吗?

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

通常有更好的方法来做到这一点吗?

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

最佳答案

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

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

关于c++ - “安全”DLL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764980/

相关文章:

c++ - 有没有一种方法可以在不显式添加的情况下将对 C++ 类成员的引用添加到 vector 中?

c - 我在修改当前代码以设置此 C 代码的不确定数量的学生时遇到了很多麻烦

c++ - OpenCV 的 SiftDescriptorExtractor 如何转换描述符值?

c++ - 使用特征类时出错。 : "expected constructor destructor or type conversion before ' &' token"

c - 如何在此程序中合并输入数组

python - 两种算法的效率比较 : Find the number of negative integers in a row-wise/column-wise sorted matrix

Delphi XE2 EnumWindows 无法正常工作

windows - EXE文件中的IMAGE_FILE_NET_RUN_FROM_SWAP如何影响运行库

c++ - Visual C++ 静态文本 "&"符号

c++ - C++代码中的 undefined reference 错误