在流程执行之前注入DLL

时间:2015-01-16 10:21:28

标签: c++ directx hook dll-injection

我正在尝试使用dll注入拦截来自我的应用程序的Direct3DCreate8调用,以获取Direct3d设备的句柄并在其投影的屏幕上绘制叠加层。在应用程序执行之后立即调用此API,如果我理解正确的话,将 dll注入到运行进程技术中无用,因为我之后的API调用已经发生了注入dll。 这个假设是否正确?如果是,那么如何在流程执行期间注入dll以捕获所需的API调用?

编辑:我知道系统范围的api挂钩,但很高兴听到本地的#i;解决这个问题。

编辑2:忘记提及,替换应用程序文件夹中的.dll是没用的,因为应用程序会查找.dll(在我的情况下为d3d8.dll)在System32 / SysWOW64目录中。

1 个答案:

答案 0 :(得分:3)

对于派对来说有点迟,我想为你提供一个使用Microsoft Detours的解决方案(在x86平台上免费用于非商业用途,否则会花费巨额资金)。他们有{{1}}功能可能适合您的需要。

引用Detours文档:

  

创建进程处于挂起状态,并将CREATE_SUSPENDED标志设置为CreateProcess。然后,Detours在新进程中修改应用程序二进制文件的图像,以包含指定的DLL作为其第一个导入。然后恢复该过程中的执行。执行恢复时,Windows进程加载器将首先加载目标DLL,然后在调用应用程序入口点之前加载应用程序导入表中的任何其他DLL。