标题: Windows网络数据流跟踪技巧(1)
http://scz.617.cn/windows/200503241827.txt
这个系列相当琐碎,想到哪里写到哪里,说不定这是第一篇也是最后一篇。同时,这 也不是正式文档,可能仅仅是某次调试过程中临时记录的内容。
这次说说跟踪445/TCP口上的数据流。445/TCP口上的很多数据流由内核态的驱动直接 处理,并不交给用户态程序,此时想通过拦截传统套接字函数跟踪数据流是没有意义 的。
假设在SoftICE中跟踪,为了使stack命令的输出更有可读性,一般加载如下符号表:
ntoskrnl.nms tcpip.nms netbios.nms netbt.nms rdbss.nms mrxsmb.nms srv.nms
下例表示目标IP为192.168.7.151、源IP为192.168.7.166时命中:
:bpx tcpip!TCPRcv if (esp+8)==9707A8C0&&(esp+c)==A607A8C0
最有意义的事实在于tcpip!TCPRcv()是Windows系统真正开始处理TCP报文的地方,因 此在tcpip!TCPRcv()入口处修改了IP数据区,将影响所有上层处理。比如mrxsmb.sys 将从tcpip.sys获得数据,如果先行在TCPRcv()处修改了SMB报文,对于mrxsmb.sys来 说,它看到的就是修改后的SMB报文。
可能你有点奇怪,为什么我没有直接根据端口进行过滤。在我的测试环境中,根据端 口进行过滤时容易死机,所以没举相应例子,但你不妨一试。