4

我正在研究一个分析另一个过程的过程。
它检查 CPU、内存使用、线程创建和死亡等。不幸的是,我的计算机上安装了一个防病毒软件,它在我检查的进程中创建了一个远程线程。这个远程线程并不是进程的一部分,所以我想在检查进程时完全忽略这个线程。

有没有办法(在 C++ 中)允许我们将线程识别为“远程线程”?

4

2 回答 2

8

如果你愿意去内核模式,你可能会对PsSetCreateThreadNotifyRoutine感兴趣。根据Uninformed的说法,它是在“正在创建或终止线程”的进程的上下文中调用的。我在其他地方也看到过这个建议。

我开始测试这个,它工作正常。您应该注意,您会看到一些误报,因为 Windows(不出所料)自己会进行一些注入。<EDIT>这实际上是因为在创建第一个线程时创建进程时,它将在父进程的上下文中完成。简单地消除第一个线程创建,这给出了一个很好的指示。</编辑>

主要缺点(除了必须编写驱动程序)是您需要看到创建发生,因此您的过程需要首先启动。

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

于 2013-01-26T20:23:32.917 回答
8

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

于 2013-01-26T20:18:02.950 回答