我正在尝试使用 CreateRemoteThread 将我的代码注入另一个进程,但如果我的代码在进程加载 DLL 时被注入,线程会冻结,直到加载 DLL(根据 MSDN 可以)。我试图通过注入代码并等待结果然后检查EAX来检测是否加载了进程,但是速度很慢。
所以,我正在寻找方法来检查进程是否仍在加载 DLL,或者它是否已加载所有 DLL,我可以调用 CreateRemoteThread 来等待我的代码立即执行。
我正在尝试使用 CreateRemoteThread 将我的代码注入另一个进程,但如果我的代码在进程加载 DLL 时被注入,线程会冻结,直到加载 DLL(根据 MSDN 可以)。我试图通过注入代码并等待结果然后检查EAX来检测是否加载了进程,但是速度很慢。
所以,我正在寻找方法来检查进程是否仍在加载 DLL,或者它是否已加载所有 DLL,我可以调用 CreateRemoteThread 来等待我的代码立即执行。
使用Debug API,将目标进程作为被调试者运行,并让注入进程成为“调试器”,然后您将获悉所有 DLL 加载/卸载事件以及该进程何时加载并准备好运行(您点击“加载程序断点”)。如果您尝试注入托管代码,x64 会变得更加复杂,但它工作得很好。
我有几个使用这种方法的工具(这里和这里)没有可用的源代码,抱歉。
如果您要做的是挂钩各种 API,那么执行此操作的规范方法是始终挂钩LoadLibrary()
,以便您可以挂钩在进程运行时加载的任何新 DLL。但是,我仍然发现使用调试 api 控制目标进程很有用,因为它可以更容易地尽快挂钩(在加载程序断点处,在您恢复进程之前)。
由于您已经有一个HANDLE
目标进程,请WaitForInputIdle()
在调用之前尝试使用CreateRemoteThread()
.