Windows网络数据流跟踪技巧
2006-04-10 19:54
232 查看
这个系列相当琐碎,想到哪里写到哪里,说不定这是第一篇也是最后一篇。同时,这
也不是正式文档,可能仅仅是某次调试过程中临时记录的内容。
这次说说跟踪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报文。
可能你有点奇怪,为什么我没有直接根据端口进行过滤。在我的测试环境中,根据端
口进行过滤时容易死机,所以没举相应例子,但你不妨一试。
这次说说跟踪IP报文处理流程。假设在SoftICE中跟踪,为了使stack命令的输出更有
可读性,一般加载如下符号表:
ntoskrnl.nms
tcpip.nms
下例表示源IP为192.168.7.250、目标IP为192.168.7.151时命中:
:bpx tcpip!IPRcvPacket if *(*(esp+8)+c)==FA07A8C0&&*(*(esp+8)+10)==9707A8C0
最有意义的事实在于tcpip!IPRcvPacket()是Windows系统真正开始处理IP报文的地方,
因此在tcpip!IPRcvPacket()入口处修改了IP报文,将影响所有上层处理。
这次说说跟踪ICMP报文处理流程。假设在SoftICE中跟踪,为了使stack命令的输出更
有可读性,一般加载如下符号表:
ntoskrnl.nms
tcpip.nms
下例表示源IP为192.168.7.250、目标IP为192.168.7.151时命中:
:bpx tcpip!ICMPRcv if *(esp+8)==9707A8C0&&*(esp+c)==FA07A8C0
最有意义的事实在于tcpip!ICMPRcv()是Windows系统真正开始处理ICMP报文的地方,
因此在tcpip!ICMPRcv()入口处修改了ICMP报文,将影响所有上层处理
也不是正式文档,可能仅仅是某次调试过程中临时记录的内容。
这次说说跟踪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报文。
可能你有点奇怪,为什么我没有直接根据端口进行过滤。在我的测试环境中,根据端
口进行过滤时容易死机,所以没举相应例子,但你不妨一试。
这次说说跟踪IP报文处理流程。假设在SoftICE中跟踪,为了使stack命令的输出更有
可读性,一般加载如下符号表:
ntoskrnl.nms
tcpip.nms
下例表示源IP为192.168.7.250、目标IP为192.168.7.151时命中:
:bpx tcpip!IPRcvPacket if *(*(esp+8)+c)==FA07A8C0&&*(*(esp+8)+10)==9707A8C0
最有意义的事实在于tcpip!IPRcvPacket()是Windows系统真正开始处理IP报文的地方,
因此在tcpip!IPRcvPacket()入口处修改了IP报文,将影响所有上层处理。
这次说说跟踪ICMP报文处理流程。假设在SoftICE中跟踪,为了使stack命令的输出更
有可读性,一般加载如下符号表:
ntoskrnl.nms
tcpip.nms
下例表示源IP为192.168.7.250、目标IP为192.168.7.151时命中:
:bpx tcpip!ICMPRcv if *(esp+8)==9707A8C0&&*(esp+c)==FA07A8C0
最有意义的事实在于tcpip!ICMPRcv()是Windows系统真正开始处理ICMP报文的地方,
因此在tcpip!ICMPRcv()入口处修改了ICMP报文,将影响所有上层处理
相关文章推荐
- Windows网络数据流跟踪技巧
- Windows系统用Wireshark抓包软件截获iPhone网络数据通讯
- caffe用自己的数据集训练深度网络模型——windows平台适用
- Windows下网络数据报的监听和拦截技术
- 提高IOCP 效率的一些方法,技巧 (来自WINDOWS 网络编程第二版)
- eclipse调试技巧之使用各种视图跟踪数据变化
- iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签
- 深度网络训练小数据集技巧
- Windows常用网络命令技巧汇总
- Windows操作系统常用网络命令使用技巧详解
- 第二人生的源码分析(三十)UDP接收数据和Windows网络关闭
- 提高IOCP 效率的一些方法,技巧 (来自WINDOWS 网络编程第二版)
- [转]Mac技巧——让Mac轻松访问Windows网络共享
- Windows网络编程技巧
- Windows下网络数据报的监听和拦截技术
- Windows常用网络命令详解-Ping命令的使用技巧
- Windows常用网络命令(五)Tracert、Route 与 NBTStat的使用技巧
- 第二人生的源码分析(三十)UDP接收数据和Windows网络关闭
- Windows常用网络命令技巧汇总
- Windows下网络数据报的监听和拦截技术