Windows NT系列的NetBT(NetBios Over Tcpip)服務,是用來處理SMB(Server Message Block)相關的服務/客戶操作的,
修改Windows SMB相關服務的默認端口
。NetBT服務對應的驅動程序文件是netbt.sys,對應的注冊表項是:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT。
微軟的KB 120642和KB 314053分別描述了Windows NT、Windows 2000、Windows XP上該鍵值的部分可選參數。
NetBT服務對應的在Windows NT 4.0上對應的端口是:
NameservicePort 137/UDP
DatagramPort 138/UDP
SessionPort 139/TCP
從Windows 2000開始,微軟引入了SMB Direct Over TCP的445端口。上述的137、138、139 端口雖然被保留,并可正常工作,但是默認情況下,系統總是會使用445端口進行SMB會話,僅在445端口工作失敗的情形下,才會使用139端口作為SessionPort。
445端口默認情況下是始終開放的。如果要關閉該端口,可以參考微軟KB 301673中的方法,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters中增加一個值:
Value Name: SmbDeviceEnabled
Type: REG_DWORD
Value Data: 0
然后重新啟動系統。
順便提一下,如果要關閉139端口,可以參考微軟的KB 299977:
1、 單擊開始,指向設置,然后單擊網絡和撥號連接。
2、 單擊您希望靜態配置的本地連接,單擊文件菜單中的屬性。
3、 單擊 Internet 協議 (TCP/IP),單擊屬性,單擊高級,然后單擊 WINS 選項卡。
4、 單擊禁用 TCP/IP 上的 NetBIOS。
5、 單擊確定,單擊確定,再次單擊確定。
修改會立即生效,不必重新啟動系統。
這個445 端口可不可以改成別的值呢?分析netbt.sys可知,服務初始化的時候,函數NbtReadRegistry分別調用ReadParameters和ReadSmbDeviceInfo從注冊表中獲取
NetBT服務的配置信息:
; ------------------------------------------------------------------------
push [ebp+Handle]
push offset _NbtConfig
call _ReadParameters@8 ; ReadParameters(x,x)
push [ebp+KeyHandle]
call _ReadSmbDeviceInfo@4 ; ReadSmbDeviceInfo(x)
; ------------------------------------------------------------------------
ReadParameters讀取的注冊表值就在上面提到的三篇KB中基本都有相關說明,但是ReadSmbDeviceInfo 所獲取的信息,似乎還沒有現成的文檔描述,
電腦資料
《修改Windows SMB相關服務的默認端口》(http://salifelink.com)。下面是逆向工程出來的5.0.2195.6783版本netbt.sys的ReadSmbDeviceInfo函數:; ------------------------------------------------------------------------
; __stdcall ReadSmbDeviceInfo(KeyHandle)
KeyHandle = dword ptr 8
push ebp
mov ebp, esp
lea eax, [ebp+KeyHandle]
push esi
push eax ; KeyHandle
push offset aParametersSmb ; "Parameters\Smb"
push [ebp+KeyHandle] ; int
call _NbtOpenRegistry@12 ; NbtOpenRegistry(x,x,x)
mov esi, eax
test esi, esi
jl short SetDefaultPort ;如果鍵不存在則轉向去設置默認值
push 1
push 1BDh ; 默認值445
push offset aSessionport ; "SessionPort"
push [ebp+KeyHandle]
call _NbtReadSingleParameter@16 ; NbtReadSingleParameter(x,x,x,x)
push 1
push 1BDh ; 默認值445
push offset aDatagramport ; "DatagramPort"
mov word_2BA88, ax