我正在研究一个分析另一个过程的过程。
它检查 CPU、内存使用、线程创建和死亡等。不幸的是,我的计算机上安装了一个防病毒软件,它在我检查的进程中创建了一个远程线程。这个远程线程并不是进程的一部分,所以我想在检查进程时完全忽略这个线程。
有没有办法(在 C++ 中)允许我们将线程识别为“远程线程”?
我正在研究一个分析另一个过程的过程。
它检查 CPU、内存使用、线程创建和死亡等。不幸的是,我的计算机上安装了一个防病毒软件,它在我检查的进程中创建了一个远程线程。这个远程线程并不是进程的一部分,所以我想在检查进程时完全忽略这个线程。
有没有办法(在 C++ 中)允许我们将线程识别为“远程线程”?
如果你愿意去内核模式,你可能会对PsSetCreateThreadNotifyRoutine感兴趣。根据Uninformed的说法,它是在“正在创建或终止线程”的进程的上下文中调用的。我在其他地方也看到过这个建议。
我开始测试这个,它工作正常。您应该注意,您会看到一些误报,因为 Windows(不出所料)自己会进行一些注入。<EDIT>这实际上是因为在创建第一个线程时创建进程时,它将在父进程的上下文中完成。简单地消除第一个线程创建,这给出了一个很好的指示。</编辑>
主要缺点(除了必须编写驱动程序)是您需要看到创建发生,因此您的过程需要首先启动。
或者,如前所述,涉及堆栈跟踪、加载的模块和所有好东西的启发式方法开始发挥作用。
CreateThread
在内部,使用创建的线程和使用创建的线程之间没有区别CreateRemoteThread
。(实际上,CreateThread
基本上作为目标进程调用CreateRemoteThread
和传递GetCurrentProcess()
。)如果要区分线程,则必须使用启发式方法。