我试图使用CreateRemoteThread将我的代码注入到另一个进程,但是如果我的代码在进程加载DLL的过程中被注入,线程就会被冻结,直到DLL被加载(根据MSDN可以)。我试图通过注入代码、等待结果和检查EAX来检测进程是否加载,但速度非常慢。
所以,我正在寻找方法来检查进程是否仍然在加载DLL,或者它已经加载了所有DLL,我可以调用CreateRemoteThread来等待我的代码立即执行。
发布于 2013-08-09 19:59:45
由于您已经有了目标进程的HANDLE,所以在调用CreateRemoteThread()之前尝试使用WaitForInputIdle()。
发布于 2013-08-09 08:18:09
使用调试API,将目标进程作为调试器运行,并让注入进程成为“调试器”,然后您将被告知所有的DLL加载/卸载事件,以及进程加载并准备运行时(您到达了“加载器断点”)。对于x64来说,它变得更加复杂,如果您试图注入托管代码,则会变得更加复杂,但是它运行得很好。
我有几个工具使用这个方法(这里和这里),没有可用的源代码,对不起。
如果您要做的是挂起各种API,那么常规的方法就是始终挂起LoadLibrary(),以便您可以挂起进程运行时加载的任何新DLL。但是,我仍然认为使用调试api控制目标进程是有用的,因为它使您能够尽快(在加载器断点,在继续处理之前)挂钩变得更容易。
https://stackoverflow.com/questions/18141262
复制相似问题