是否允许在暂停的进程上调用 CreateRemoteThread()?
Posted
技术标签:
【中文标题】是否允许在暂停的进程上调用 CreateRemoteThread()?【英文标题】:Is it allowed to call CreateRemoteThread() on a suspended process? 【发布时间】:2018-11-28 10:44:49 【问题描述】:如果我使用(未记录的)NtSuspendProcess
函数(从ntdll.dll
导出)挂起一个进程,然后调用CreateRemoteThread
在该进程中创建一个线程,则该线程开始运行而没有任何问题。
我想知道CreateRemoteThread
是否允许这样使用?
【问题讨论】:
既然你已经在使用(无证)NtSuspendProcess
,为什么还要关心是否允许这样使用CreateRemoteThread
?
好吧,它为什么不开始运行。您在远程进程中创建一个线程,并要求它开始运行。它开始运行,你想知道为什么?您希望会发生什么?
NtSuspendProcess
枚举并挂起目标进程中所有未退出的线程。没有什么能阻止新的创建线程运行。所以CreateRemoteThread
创建的新线程开始在用户模式下执行。但是..您将所有现有线程挂起在任意位置。可能一些挂起的线程持有进程全局临界区。当新线程尝试进入此部分时 - 他挂在这里。这可以和装载机锁。或者说进程堆暴击秒,如果你在分配或释放内存时挂起线程)。所以 nw 线程运行正常或挂起 - 运行
@VTT & David:问题太多,信息太少。
@RbMm:是的,好点。直到我查看NtSuspendProcess
all it does 是它枚举进程线程并将它们从锁中挂起时,我才意识到这一点。换句话说,不存在“暂停进程”之类的东西。它只是可以暂停的线程。尽管如此,如果它碰巧调用 idk LoadLibrary 而对同一 API 的另一个调用在另一个线程中被挂起,我仍然看到你关于该远程线程中潜在死锁的观点。虽然,我看不出这与调用记录在案的 SuspendThread 有何不同。
【参考方案1】:
是的,这是可能的,我已经做到了。除非在CreateRemoteThread();
上设置了CREATE_SUSPENDED
标志,否则新线程将立即开始执行。
是的,它应该如何工作,回答你的问题。
【讨论】:
以上是关于是否允许在暂停的进程上调用 CreateRemoteThread()?的主要内容,如果未能解决你的问题,请参考以下文章