如何获取线程创建者的 PID(不是所有者,不是主机)

逆向工程 登录 线 多进程
2021-06-12 13:40:14

THREADENTRY32结构包含一个名为 的成员th32OwnerProcessID,其描述为:

创建线程的进程的标识符。

我不确定我是否了解该CreateRemoteThread功能的工作原理。但是,我希望进程 A通过CreateRemoteThread进程 B的地址空间中创建的线程将具有th32OwnerProcessID等于进程 A的 ID (如果我们采用th32OwnerProcessID上面引用的描述)。我有点惊讶地看到它实际上等于进程 B的 ID

有人可以解释为什么会这样吗?以及如何获取线程的实际创建者的 ID,即我的示例中的进程 A

1个回答

那真的应该说“承载线程的进程的标识符”,因为它就是这样。Toolhelp API 创建的快照是系统范围的,因此为了了解线程所在的位置,您需要其进程 ID。如果它说进程A,如果进程A在进程B中创建了一个远程线程然后退出,那将毫无意义。在这种情况下,在创建时属于进程 A 的 PID 可能最终被创建的下一个进程重用,并且显然与线程完全无关。

换一种方式考虑:创建远程线程只是向远程进程发出创建线程的请求,因此远程进程是创建线程的人。没有谁提出请求的概念。