防止 DLL 文件通过 MS Detours 加载到我的进程中

2024-05-24

我想阻止特定的第三方 DLL 文件在运行时加载到我的应用程序进程中。我最初的尝试是使用 MS Detours 产品。

我有一个32位的MFC http://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library在 Windows 10 64 位上运行的应用程序。我使用免费的 MS Detours 3.0 版本进行了测试作为可行性检查。

在我的 MFC 应用程序类构造函数中,我调用 Detours 来拦截“加载库”API(LoadLibraryW、LoadLibraryExW、LoadLibraryA 和 LoadLibraryExA)。这让我可以拦截库加载,目前我只需注销正在加载的库的名称,然后调用原始 API,以便它继续加载库。最终的计划是查找特定的第三方 DLL 文件名,在这种情况下仅返回失败,从而阻止 DLL 文件加载。

这种作品。当我运行测试应用程序时,关闭它,然后检查日志,我看到一堆从拦截函数记录的库加载消息。

但是,我的代码从未看到我正在寻找的特定第三方 DLL 文件。发生的情况是,当我到达应用程序类构造函数时,第三方 DLL 文件已经加载。所以我来晚了!

我怎样才能获得一些代码来提前执行,并希望在注入第三方库之前安装迂回的东西?


听起来像:

  • 您的应用程序直接静态链接到目标 DLL

  • 应用程序的依赖 DLL 之一静态链接到目标 DLL,或者在加载自身时加载它。

  • 目标 DLL 列在AppInit_DLLs注册表键。

  • 另一个进程已将 DLL 作为全局挂钩加载SetWindowsHookEx(),使用钩子类型将 DLL 注入到所有正在运行的进程中。

如果目标 DLL 在应用程序代码开始运行之前加载,则您无法拦截目标 DLL。静态链接的 DLL 在 EXE 代码开始运行之前由操作系统加载。因此,只有动态加载的 DLL 才能通过 detour 拦截,并且只有在安装了 detour 之后才加载。

您需要找到目标 DLL 实际从何处加载。

如果您的 EXE 直接静态链接到它,则动态加载它,或者通过显式加载LoadLibrary()在您的代码中,或通过链接器的延迟加载功能(如果有),它使用LoadLibrary()内部。

如果另一个 DLL 正在加载它,则动态加载该 DLL,而不是静态链接到它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 DLL 文件通过 MS Detours 加载到我的进程中 的相关文章

随机推荐