修改Windows SMB相關服務的默認端口 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【clearvueentertainment.com - 電腦資料】

    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上該鍵值的部分可選參數(shù)。


    NetBT服務對應的在Windows NT 4.0上對應的端口是:


    NameservicePort 137/UDP

    DatagramPort 138/UDP

    SessionPort 139/TCP



    從Windows 2000開始,微軟引入了SMB Direct Over TCP的445端口。上述的137、138、139 端口雖然被保留,并可正常工作,但是默認情況下,系統(tǒng)總是會使用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


    然后重新啟動系統(tǒng)。


    順便提一下,如果要關閉139端口,可以參考微軟的KB 299977:


    1、 單擊開始,指向設置,然后單擊網絡和撥號連接。

    2、 單擊您希望靜態(tài)配置的本地連接,單擊文件菜單中的屬性。

    3、 單擊 Internet 協(xié)議 (TCP/IP),單擊屬性,單擊高級,然后單擊 WINS 選項卡。

    4、 單擊禁用 TCP/IP 上的 NetBIOS。

    5、 單擊確定,單擊確定,再次單擊確定。


    修改會立即生效,不必重新啟動系統(tǒng)。


    這個445 端口可不可以改成別的值呢?分析netbt.sys可知,服務初始化的時候,函數(shù)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 所獲取的信息,似乎還沒有現(xiàn)成的文檔描述,

電腦資料

修改Windows SMB相關服務的默認端口》(http://clearvueentertainment.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 ;如果鍵不存在則轉向去設置默認值

    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
最新文章