1. 程式人生 > >利用 TDI HOOK 實現任意埠複用

利用 TDI HOOK 實現任意埠複用

所謂tdi hook,我這裡利用的是hook tcpip dispatch table的方法,實際上覆用的原理很簡單,關鍵是hook掉tdi_event_connect,之後從*AcceptIrp中取出conn obj,將其傳遞到自己定義的tdisend中就可以了
這裡唯一蹩腳的地方是在處理TDI EVENT的時候,當程序啟動後,它首先系統註冊這些event handler,在有相應的網路事件發生的時候才進行呼叫,這點利用TDI MON可以看出來。因此,要在驅動啟動的時候要分配一個資訊結構(struct conn_ot)的HASH表,表裡記錄的資訊可以在IRP_MJ_CLEANUP的時候進行釋放。
這裡我只對網路中最後一個連線做了複用,如果想複用全部的連線,需要修改一下ot_add_fileobj(),並且在連線斷開的時候,處理IRP_MJ_CLEANUP就可以了。

測試方法:
首先在遠端的機器上安裝tdihook.sys,之後執行DMCanon.exe 2(這個數字隨意指定)。執行一個網路服務,我一般用nc和apache。在本地機器執行nc連線,以ok作為magic word傳送,可以得到Complete!

程式碼大部分取自tdi_fw。
感謝sinister大哥的指教。