1

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

当我在客户端发出某个 GUI 命令时,客户端会创建与服务器的 TCP 连接,发送一些数据,然后断开连接。服务器端口为 1234,客户端端口由操作系统分配,因此有所不同。

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

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

4

2 回答 2

1

I can think of two things:

  1. Try sysinternals' tcpview program. It gives a detailed listing of all tcp connections opened by all the processes in the system. If a process creates connections, you will be able to see them flash (both connect and disconnect are flashed) in tcpview and you will know which processes to start looking into.

  2. Try running the binary under a debugger. Windbg supports multi-process debugging (so does visual studio I think). You may have only export symbols to work with but that should still work for calls made to system dlls. Try breaking on any suspected windows APIs you know will be called by the process to create the connections. MSDN should have the relevant dlls for most system APIs documented.

Start here... post a follow-up if you get stuck again.

于 2011-07-26T03:24:28.727 回答
0

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

于 2011-07-26T16:30:41.397 回答