我想知道如何在尽可能低的级别在进程中创建线程的所有可能方式。
有很多 WinAPI-s 来创建线程,但据我所知,它们都以NtCreateThread或NtCreateThreadEx. 例如,如果我在这两个上放置了一个断点并且我认为它们没有被删除并且目标没有使用直接系统调用,我可以假设我可以安全地捕获从该进程创建新线程的每一次尝试吗?我知道,调试器具有中断新线程的功能,但这次我想抓住创建之前的那一刻。
我也知道可以从外部调用任何形式的 CreateRemoteThread,但是干净的操作系统有什么理由可以这样做吗?
因此,例如,如果我挂起一个进程的所有线程,是否有任何东西可以“合法地”在进程中启动一个线程,理论上可以发现我在搞乱进程?例如,如果某个东西会启动一个内部的 ntdll 函数,或者一个启动一个新线程的定时回调(我不知道这是否可能,只是头脑风暴) ——如果它被钩住了,恶意软件实际上可以将代码执行重定向到它自己的代码这可能会检测到东西。
我不关心任何软件,如防病毒软件或显然任何试图运行自己代码的外部恶意软件,我很好奇操作系统是否会在任何情况下或强制这样做?
我知道可能会发生各种情况,我的目标恶意软件可能会写入外部进程,这些进程可能能够恢复原始进程或在其中创建新线程,或者甚至更高级的事情,但我想逐渐检查可能性和还提高了我对 Nt 内部结构的了解 :)