首页
社区
课程
招聘
[原创]TCPIP协议栈损坏修复案例
发表于: 2017-9-19 19:21 7029

[原创]TCPIP协议栈损坏修复案例

2017-9-19 19:21
7029
注意:这文章是 2014-6-19 写的,留了很久现在自己也不做TO C的安全了,就把文章整理发出来,留在硬盘也是烂了而已

      这个问题花了我4天的时间去调试,很多用户反馈他们在用无线USB上网的时候用了一段时间之后,突然就不能上网了,确实的说是无线USB网卡不能正常工作了。在收到这个反馈之后,我搭建好重现问题的环境,之后试了下果然如用户描述的一样无线USB网卡不能正常工作了。        
      问题发生时,我发现无线网卡的状态很不正常,IP地址,网卡等相关信息完全没有,界面上显示一片空白,如下图
当时我也不知道怎么办,点击“修复”问题也没有得到解决。        
既然是网卡出现了问题,那么我们首先要确认的是网卡驱动是不是正常工作的。

kd> !ndiskd.miniport

    MiniDriver         Miniport            Name                                _

    86667cc8           848fd4a0            VMware Accelerated AMD PCNet Adapter - XXXX Driver

    86667cc8           847aaad0            WAN 微型端口 (IP) - XXXXDriver

    86667cc8           84899130            Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - XXXXDriver

    865d5358          866c3560            Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter

    862a9678           86497850            Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口

    863ae6b0           865d3130            直接并行

    862a9678           86290728            WAN 微型端口 (IP) - 数据包计划程序微型端口

    862a9678           8649da10            VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

    863b5ad8           862a9130            WAN 微型端口 (PPTP)

    86615ca0           863b5130            WAN 微型端口 (PPPOE)

    863d37b0           863b4b08            WAN 微型端口 (IP)

    86553180           86491838            WAN 微型端口 (L2TP)

    86554010           86491130            VMware Accelerated AMD PCNet Adapter

kd> !ndiskd.miniport866c3560

MINIPORT

    Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter

    Ndis Handle        866c3560

    Ndis API Version   v5.1

    Adapter Context    85e86000

    Miniport Driver    865d5358 - RTWlanU_XP.sys  v0.1

    Ndis Verifier      [No flags set]

    Media Type         802.3

    Physical Medium    WirelessLan

    Device Path        \??\USB#Vid_0bda&Pid_8178#00e04c000001#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{A264B0CF-D6BA-4191-B65F-1A44C7DAA4EE}

    Device Object      866c3460

    MAC Address        00-87-41-56-02-9d

STATE

   Device PnP         Started

    Datapath           Normal

    Media              Connected

    Power              D0

    References         2

    User Handles       0

    Total Resets       0

    Pending OID        None

    Flags              2c453800

        ↑ NOT_BUS_MASTER, IGNORE_PACKET_QUEUE, IGNORE_REQUEST_QUEUE,

        IGNORE_TOKEN_RING_ERRORS, NDIS_5, DESERIALIZED, RESOURCES_AVAILABLE,

        SUPPORTS_MEDIA_SENSE, DOES_NOT_DO_LOOPBACK, MEDIA_CONNECTED

    PnPFlags           40410021 [Unrecognized flags 40000000]

        ↑ PM_SUPPORTED, DEVICE_POWER_ENABLED, RECEIVED_START, NDIS_WDM_DRIVER

BINDINGS

    Open List          Open                Protocol           Context          _

    XXXX                  848ec3e8            8672b1a8           84939008

MORE INFORMATION

     → Driver handlers

     → Power management

     → Wake-on-LAN (WoL)                    → Packet filter

我们从上面可以看到我们的无线网卡是正常工作的。并没有什么问题,看下其他的miniport driver是否有问题

kd> !ndiskd.miniport 86497850

MINIPORT

    Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口

    Ndis Handle        86497850

    Ndis API Version   v5.0

    Adapter Context    8664cad0

    Miniport Driver    862a9678 - psched.sys  v2.1

    Ndis Verifier      [No flags set]

    Media Type         802.3

    Physical Medium    WirelessLan

    Device Path        \??\ROOT#MS_PSCHEDMP#0002#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{97B71194-D32A-4581-BA67-20F7257FE848}

    Device Object      86497750

    MAC Address        00-87-41-56-02-9d

STATE

    Device PnP         Started

    Datapath           Normal

    Media              Connected

    Power              D0

    References         3

    User Handles       0

    Total Resets       0

    Pending OID        None

    Flags              2445b800

        ↑ NOT_BUS_MASTER, IGNORE_PACKET_QUEUE, IGNORE_REQUEST_QUEUE,

        IGNORE_TOKEN_RING_ERRORS, INTERMEDIATE_DRIVER, NDIS_5, DESERIALIZED,

        RESOURCES_AVAILABLE, SUPPORTS_MEDIA_SENSE, DOES_LOOPBACK,

        MEDIA_CONNECTED

    PnPFlags           08019021

        ↑ PM_SUPPORTED, DEVICE_POWER_ENABLED, HIDDEN, NO_HALT_ON_SUSPEND,

        RECEIVED_START, FILTER_IM

BINDINGS

    Open List          Open                Protocol           Context          _

    NDISUIO            849158f0            8663e128           866d67d8

    AEGISP             848ea150            8669d428           84964cb0

MORE INFORMATION

     → Driver handlers

     → Power management

     → Wake-on-LAN (WoL)                    → Packet filter

      同样这个也没有什么大问题。既然都是正常的,那么我们可以排除网卡驱动的问题,因为这个在后来,我发现用其他的无线网卡驱动上也会存在这样的现象,那么我们可以确认这并不是个例现象了。        

      既然上面我们无法确认是什么导致的,也没有好的思路去调试。我们可以换一个思路去想,在WINDOWS的网络层中,有一个TCP/IP协议,这个协议是数据收发的必经之地。那我们可以在这个必经之地下个断点,然后分别比较正常情况下和不正常情况下这个地方有什么变化。下面是我在非正常情况下查看的所有网络协议驱动相关的内容。  

kd> !ndiskd.protocol

8672b1a8 - XXXXXX

  8654d728 - VMware Accelerated AMD PCNet Adapter

  86314ae0 - WAN 微型端口 (IP)

  848ec3e8 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter

8669d428 - AEGISP

  863a7350 - VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

  848ea150 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口

86679008 - PACKETDRIVER

8663e128 - NDISUIO

  8656b0e0 - VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

  849158f0 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口

86443440 - TCPIP_WANARP

  864f15a0 - WAN 微型端口 (IP) - 数据包计划程序微型端口

861da560 - TCPIP

  867330e0 - VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

86726670 - NDPROXY

  8671a520 - 直接并行

  866f4290 - 直接并行

  86300918 - WAN 微型端口 (L2TP)

  8654b428 - WAN 微型端口 (L2TP)

8669e538 - PSCHED

  86639618 - VMware Accelerated AMD PCNet Adapter - XXXXXXXX

  848caa18 - WAN 微型端口 (IP) - XXXXX

  84944220 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - XXXXXXXX

86615bb8 - RASPPPOE

863d3898 - NDISWAN

  866e11a8 - 直接并行

  8643eea0 - WAN 微型端口 (PPTP)

  866d3678 - WAN 微型端口 (PPPOE)

  866f5840 - WAN 微型端口 (L2TP)

kd> !ndiskd.protocol 861da560

PROTOCOL

    TCPIP

    Ndis Handle        861da560

    Ndis API Version   v4.0

    Reference Count    2

    Flags              [No flags set]

BINDINGS

    Open               Miniport            Miniport Name                       _

   867330e0           8649da10            VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

HANDLERS

    Protocol Handler                       Function pointer   Symbol (if available)

    BindAdapterHandler                     eed26579  bp       tcpip!IPBindAdapter

    UnbindAdapterHandler                   eed3d938  bp       tcpip!ARPUnbindAdapter

    PnPEventHandler                        eed23719  bp       tcpip!ARPPnPEvent

    UnloadHandler                          0

    OpenAdapterCompleteHandler             eed3d3ce  bp       tcpip!ARPOAComplete

    CloseAdapterCompleteHandler            eed3d3ed  bp       tcpip!ARPCAComplete

    SendCompleteHandler                    eed127f0  bp       tcpip!ARPSendComplete

    TransferDataCompleteHandler            eed3d40c  bp       tcpip!ARPTDComplete

   ReceiveHandler                         eed146b5  bp       tcpip!ARPRcv

    ReceivePacketHandler                   eed0f800  bp       tcpip!ARPRcvPacket

    ReceiveCompleteHandler                 eed0f7f3  bp       tcpip!ARPRcvComplete

    StatusHandler                          eed28a83  bp       tcpip!ARPStatus

    StatusCompleteHandler                  eed2897b  bp       tcpip!LoopClose

    RequestCompleteHandler                 eed18b80  bp       tcpip!ARPRequestComplete

    ResetCompleteHandler                   eed3d42e  bp       tcpip!ARPResetComplete

我们在ReceiveHandler和ReceivePacketHandler这两个函数下断,然后随便打开百度。发现并没有断下来,其实没断下来是正常的,因为从上面的协议驱动绑定的情况上来看,TCPIP只绑在了本地的网卡上(也就是VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口),我们的无线网卡驱动并没有绑上去。 正因为我们的无线网卡驱动没有被TCPIP协议驱动绑上,导致无线网卡无法上网。至于它无法获取到IP和网关这些信息,是因为当无线网卡连接到一个热点上的时候,它获取的IP地址以及网关之类的信息是通过GetAdaptersInfo去获取的,而这个函数的实现,部份是通过读取注册表上对应网卡的设置的值来设置的,刚好我们的注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces上的值是不正常的,因此我们就看到
这里的信息是空白,同时因为这个键值涉及到和TCPIP相关的东西。所以我们有理由相信这里的值和TCPIP协议驱动有关系。        
下面是在正常情况下看到的机器上所有的协议驱动的内容:

kd> !ndiskd.protocol

8672b1a8 - XXXXX

  86610988 - VMware Accelerated AMD PCNet Adapter

  86314ae0 - WAN 微型端口 (IP)

  84942ec0 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter

8669d428 - AEGISP

  862f1ec0 - VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

  864a4618 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口

86679008 - PACKETDRIVER

8663e128 - NDISUIO

  84949268 - VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

  864496f8 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口

86443440 - TCPIP_WANARP

  866292c0 - WAN 微型端口 (IP) - 数据包计划程序微型端口

861da560 - TCPIP

  848e9b58 - VMware Accelerated AMD PCNet Adapter - 数据包计划程序微型端口

 8495faf0 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - 数据包计划程序微型端口  --->good

86726670 - NDPROXY

  8671a520 - 直接并行

  866f4290 - 直接并行

  86300918 - WAN 微型端口 (L2TP)

  8654b428 - WAN 微型端口 (L2TP)

8669e538 - PSCHED

  848c5300 - VMware Accelerated AMD PCNet Adapter - XXXXX

  8654a2c0 - Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter - XXXXX

  8668fca8 - WAN 微型端口 (IP) - XXXXX

86615bb8 - RASPPPOE

863d3898 - NDISWAN

  866e11a8 - 直接并行

  8643eea0 - WAN 微型端口 (PPTP)

  866d3678 - WAN 微型端口 (PPPOE)

  866f5840 - WAN 微型端口 (L2TP)

你发现了什么没有?对了就是在正常情况下TCP/IP的协议驱动是绑在无线网卡驱动上的。这点我们可以对TCPIP协议驱动的收包函数下断,我们就会发现,当你打开百度的时候,WINDBG就会断下来,说明它正常工作了。   
既然我们已经确定了问题是出现在TCPIP协议驱动上,那我们就可以手动去重置当前机器的TCP/IP协议栈,使其正常工作。    
解决流程如下:    
1.打开CMD    
2.输入    “netsh int ip reset c:\ipresetlog.txt“    后再输入    ”netsh winsock reset”    
3.重启你的电脑    
重启之后你再用无线网卡连接热点的时候,你会发现它能正常获取到IP和网关之类的信息。至此,该问题完美解决。    
PS:文中讲的是我整理之后的比较清晰的过程,实际调试解决的过程中,还是试了无数种方法。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1432
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
啥也不说了,感谢楼主分享哇!
2017-9-20 13:54
0
雪    币: 3700
活跃值: (3817)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
感谢分享!
2018-4-9 10:24
0
雪    币: 877
活跃值: (241)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
很棒棒啊
2019-8-27 14:33
0
雪    币: 55
活跃值: (934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
直接用工具修复,不用这么麻烦。。
2019-8-27 14:42
0
游客
登录 | 注册 方可回帖
返回
//