将线程标识为“远程线程”

我正在研究一个分析另一个过程的过程。
它检查CPU,内存使用情况,线程创build和死亡等。不幸的是,我的电脑上安装了防病毒软件,在我的检查过程中创build了一个远程线程。 这个远程线程不是这个过程的一部分,所以我想在检查过程时忽略这个线程的完整性。

有没有一种方法(在C ++中),它允许我们将线程标识为“远程线程”?

如果你愿意去内核模式PsSetCreateThreadNotifyRoutine可能是你感兴趣的。 根据不知情的情况,它是在“创建或终止线程”的过程中调用 。 我在其他地方也看到了这一点。

我到处去测试这个,它工作正常。 你应该注意到,你会看到一些误报,因为Windows(毫不奇怪)做了一些注入本身。 <EDIT> 这实际上是因为在创建第一个线程时创建的进程将在父进程的上下文中完成 。 简单地消除第一个线程创建,这是一个很好的指示。 </ EDIT>

主要的缺点(除了写一个驱动程序),你需要看到创建发生,所以你的过程需要首先启动。

或者,如前所述,启发式涉及堆栈跟踪,加载的模块和所有好东西发挥作用。

在内部,用CreateThread创建的线程和用CreateRemoteThread创建的线程没有区别。 (实际上, CreateThread基本上调用CreateRemoteThread ,并将GetCurrentProcess()作为目标进程传递GetCurrentProcess() 。如果要区分线程,则必须使用启发式。