将端口映射到瞬态Windows TCP连接的PID

我正在尝试对第三方TCP客户端/服务器Windows XP,SP 3应用程序进行反向工程,但我没有可用的源代码。 我的主要攻击行为是使用WireShark来捕获TCPstream量。

当我在客户端发出某个GUI命令时,客户端创build一个到服务器的TCP连接,发送一些数据,然后断开连接。 服务器端口为1234,客户端端口由OS分配,因此各不相同。

WireShark显示我发出的GUI命令对应的消息被发送两次 。 这两个消息具有不同的源端口,但是它们具有相同的目标端口(前面提到过1234)。

客户端实际上由几个进程组成,我想确定哪些进程正在发送这些消息。 这些过程是长期的,所以他们的PID是稳定的和已知的。 但是,所涉及的TCP连接是短暂的,仅持续几毫秒左右。 尽pipe我已经在WireShark中捕获了客户端端口号,尽pipe我知道所有涉及的PID,但是连接是暂时的,这使得很难确定哪个PID打开端口。 (如果连接是长期的,我可以使用netstat将端口号映射到PID。)有没有人有任何build议,我可以如何确定哪些进程正在创build这些瞬态连接?

我可以想到两件事情:

  1. 尝试sysinternals的tcpview程序。 它给出了系统中所有进程打开的所有TCP连接的详细列表。 如果一个进程创建连接,你将能够在tcpview中看到它们的闪存(连接和断开连接),你将知道哪些进程开始寻找。

  2. 尝试在调试器下运行二进制文件。 Windbg支持多进程调试(我觉得Visual Studio也是如此)。 您可能只能导出符号,但对于系统dll的调用仍然可以使用。 尝试打破任何可疑的Windows API,您将知道这些API将被该进程调用以创建连接。 MSDN应该有大多数系统API记录相关的DLL。

从这里开始…如果你再次陷入困境,请发表一个跟进报告。

我最终创建了一个批处理文件,在紧密的循环中运行netstat并将其输出附加到文本文件中。 我在运行系统的时候运行了这个批处理文件,通过梳理所有的netstat转储文件,我找到了一个包含与端口相关的PID的转储文件。