1

我正在尝试对第三方TCP客户端/服务器Windows XP,SP 3应用程序进行反向工程,但我没有可用的源代码。我的主要攻击行为是使用WireShark捕获TCP流量。将端口映射到瞬态Windows TCP连接的PID

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

WireShark显示我发出的GUI命令对应的消息被发送两次。这两条消息具有不同的源端口,但它们具有相同的目标端口(如前所述,为1234)。

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

回答

0

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

1

我能想到的两件事情:

  1. 尝试Sysinternals的套装软件程序。它给出了系统中所有进程打开的所有tcp连接的详细列表。如果一个进程创建连接,你将能够在tcpview中看到它们的闪存(连接和断开连接都会被刷新),并且你将知道哪些进程开始寻找。

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

从这里开始...如果您再次卡住,请发布后续行动。