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