修改Windows SMB相关服务的默认端口 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.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上该键值的部分可选参数。


    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相关服务的默认端口》(https://www.unjs.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
最新文章