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。

從這裏開始...如果您再次卡住,請發佈後續行動。