NDIS 6 Filter

来源:互联网 发布:尽人事知天命下一句 编辑:程序博客网 时间:2024/06/10 08:31

1. 网络数据包的表示

    (1)一个网络缓冲区,由结构 NET_BUFFER 表示,它描述了单独的网络数据包。

    (2)一个网络缓冲区列表,由结构 NET_BUFFER_LIST 表示,它描述了一组具有相同 OOB 数据的网络包。

    (3)一个 MDL 描述了单独虚拟连续的数据缓冲区,MDL 描述的这个缓冲区可以有多个物理上不连续的碎片组成。每一个物理页面被 MDL 内的 PFN 数组描述,并且作为一个部分保存于 MDL 内。


             



2. NBL 回填空间

    (1)由一个 NB 描述的数据缓冲区可以被分割成 未使用数据空间 和 已使用数据空间。未使用数据空间(就是为我们熟知的回填空间),是位于已使用数据空间开始处的前方。由于 NB 被一层层的往前发送,由网络栈中一个驱动传递向另外一个驱动,这种分割状态可以被改变。

    (2)NB 结构中的域 DataOffset / CurrentMdl / CurrentMdlOffset 决定了分割的位置。DataOffset 描述了已用数据空间距离缓冲区开始的便宜,它是一个字节数。

    (3)CurrentMDL 便利地提供了能从 NB 中获得正确数据的第一个 MDL 的地址。CurrentMdlOffset  是正确数据距离由 CurrentMDL 所描述的缓冲区开始的偏移。


            



3. 调试器扩展命令

    (1)!ndiskd.nbl

0: kd> !ndiskd.nbl 0x87a2fe70    NBL                87a2fe70            Next NBL           NULL    First NB           87a2ff10            Source             88cd41a0    Flags              00000100          ← NBL_ALLOCATED     → Walk the NBL chain     → Show out-of-band information     → Dump the full data payload

    (2)!ndiskd.nb

0: kd> !ndiskd.nb 87a2ff10                NB                 87a2ff10            Next NB            0    Length             0n76                Source Pool        87ef9a80    First MDL          87a2ff88            DataOffset         0n38    Current MDL        [First MDL]         Current MDL Offset 0n38

    (3)查看 MDL 描述的数据缓冲区

0: kd> db 87a2ffac L5087a2ffac  40 00 00 00 00 00 00 00-ff ff ff ff ff ff ff ff  @...............87a2ffbc  02 00 33 33 00 00 00 0c-00 0c 29 98 c0 71 86 dd  ..33......)..q..87a2ffcc  60 00 00 00 00 7f fc d7-33 ab d0 2e 00 0c 29 98  `.......3.....).87a2ffdc  c0 71 08 00 45 00 00 3e-05 ca 00 00 80 11 00 00  .q..E..>........87a2ffec  c0 a8 01 6a 7c cf a0 6a-d2 35 00 35 00 2a df 87  ...j|..j.5.5.*..


4. 发送与接收数据的拦截

    (1)发送数据包的拦截流程

            

    (2)接收数据包的拦截流程

            



参考文献点击打开链接



0 0