cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:3721回复:41

(急)采用ndis hook技术,Win2k和xp下结果不同,why?

楼主#
更多 发布于:2005-06-01 20:31
采用ndis hook技术(同费尔),Win2k能够通信,但是在xp下ping不通,为什么?
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-01 21:17
费尔采用的是ndis hook技术,注册一个假协议的那种?
建议用softice跟一下,看看哪出的问题。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2005-06-02 10:23
不是假协议方式。

我仅是加密了他的ip数据,在2000正常。但在winxp和2003下不正确。
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-06-02 10:38
你提的问题,太泛泛,别人无法做答,除非看过费尔防火墙代码的,我没有看过。我建议你用ice在收包,发包的入口,进行跟踪,可以比较2k正确的结果,再看xp有什么不一样的地方。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地下室#
发布于:2005-06-02 10:54
现在问题定位在xp(Win2003)下,不同网卡之间不能通信.是否校验位计算不在同一位置?

[编辑 -  6/2/05 by  cyliu]
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
5楼#
发布于:2005-06-02 15:09
链路层校验是如何计算的。谁有源代码?
走走看看开源好 Solaris vs Linux
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-02 17:05
链路层校验是如何计算的。谁有源代码?


IP层校验和?
EASY,GOOGLE一下就出来N多了。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
7楼#
发布于:2005-06-02 18:13
老大,我要的不是IP层,写的没有歧义吧?

在写一次:

链路层校验是如何计算的,有源代码?

其他问题:

1 今天我写了hook ndis驱动,功能是修改了IP数据报的有效载合数据.然后用SNIFFER查看,截获到数据居然是修改后的数据.他是采用何种技术做的呢?

我个人人为是SNIFFER声明了一个假协议,然后把SNIFFER的协议联到协议的队列上.愚见!

2 环境: 两台计算机安装winxp(or Win2003),每台计算机安装不同网卡.安装网络过滤驱动后,不能PING.过滤驱动仅是修改了IP有效载核数据.通过DGBVIEW和SNIFFER,发现数据处理没有问题,既加密后成功解密.但是为何不能PING通呢,而在WIN2K下可以通过.是否网卡驱动计算链路层的CHECKSUM位置不同造成的.一个是在过滤驱动以前计算,一个是在过滤驱动以后计算,造成数据不同而被丢弃呢?
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-06-02 21:31
老大,我要的不是IP层,写的没有歧义吧?

在写一次:

链路层校验是如何计算的,有源代码?

其他问题:

1 今天我写了hook ndis驱动,功能是修改了IP数据报的有效载合数据.然后用SNIFFER查看,截获到数据居然是修改后的数据.他是采用何种技术做的呢?

我个人人为是SNIFFER声明了一个假协议,然后把SNIFFER的协议联到协议的队列上.愚见!

2 环境: 两台计算机安装winxp(or Win2003),每台计算机安装不同网卡.安装网络过滤驱动后,不能PING.过滤驱动仅是修改了IP有效载核数据.通过DGBVIEW和SNIFFER,发现数据处理没有问题,既加密后成功解密.但是为何不能PING通呢,而在WIN2K下可以通过.是否网卡驱动计算链路层的CHECKSUM位置不同造成的.一个是在过滤驱动以前计算,一个是在过滤驱动以后计算,造成数据不同而被丢弃呢?

链路层校验和一般是网卡硬件自动生成的,采用可能是crc32吧?软件不用关心
1。sniffer就是windows下标准的协议驱动,与tcp/ip是并联的关系,os会把网卡驱动收到的数据包,发送到每一个绑定到该网卡上的
协议驱动,当然收到就是你修改后的数据。不是你理解的假协议
2。肯定与链路层的校验和没有关系。你加密的仅仅是ip载荷?不包括ip头?从道理上讲,2k上可以,xp不应该有问题。对比看看2k,与xp的数据完全相同吗?如果实在看不出什么不同,可以加载tcpip.dbg,用ice跟进去,看看ip协议栈的代码是如何检查抛弃这个数据包的,因为可以看到局部函数,变量的名字,如果你熟悉汇编的话,这个工作并没有想象的复杂
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
9楼#
发布于:2005-06-03 10:11
2。肯定与链路层的校验和没有关系。你加密的仅仅是ip载荷?不包括ip头?从道理上讲,2k上可以,xp不应该有问题。对比看看2k,与xp的数据完全相同吗?如果实在看不出什么不同,可以加载tcpip.dbg,用ice跟进去,看看ip协议栈的代码是如何检查抛弃这个数据包的,因为可以看到局部函数,变量的名字,如果你熟悉汇编的话,这个工作并没有想象的复杂

是仅仅是ip载荷,数据完全相同.使用同一网卡可以ping,但网卡不同就ping不通了.
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
10楼#
发布于:2005-06-03 13:44
跟踪了一次,在那个异常网卡中,没有使用过滤驱动程序的发送函数。不知道他是如何发送数据的?
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2005-06-03 14:47
跟踪了一次,在那个异常网卡中,没有使用过滤驱动程序的发送函数。不知道他是如何发送数据的?

所有的发送的函数,都hook了吗?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
12楼#
发布于:2005-06-03 17:45
所有的发送的函数,都hook了.但是就是没有调用SEND,仅是RECV.

问题是在该win2k下没有任何问题.在其他网卡无论是win2k,winxp还是win2003都正常.唯有该网卡特殊.

该网卡是华硕主板 集成网卡.

如果说驱动有问题,为什么WIN2K下正常呢?怪怪!

zhaock,这问题到第能出在哪里呢?
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2005-06-03 19:08
所有的发送的函数,都hook了.但是就是没有调用SEND,仅是RECV.

问题是在该win2k下没有任何问题.在其他网卡无论是win2k,winxp还是win2003都正常.唯有该网卡特殊.

该网卡是华硕主板 集成网卡.

如果说驱动有问题,为什么WIN2K下正常呢?怪怪!

zhaock,这问题到第能出在哪里呢?
 

确实比较奇怪。
你再把问题详细描述一遍,A ping B,流程IpA->加密->A网卡 ->网络->B网卡->解密->IpB,再反着回答IpA,到底是哪个包出的问题?明确了吗?和正常的进行比较。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
14楼#
发布于:2005-06-06 14:25
怪事.
不知道tcp的checksum何时计算的?

过程这样:

发送:
发送数据经过hook的函数,hook函数修改了tcp的checksum数值(如1 -> 2).然后发送。

接收:
接收数据经过hook的函数,hook函数该回checksum数值(2 -> 1),然后上传数据.

在接收端sniffer报告说checksum数值应该为2,而不是1,理论因该是1啊?为何是这样呢?
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
15楼#
发布于:2005-06-06 15:11
以上仅是在netbios over tcpip情况下发生,也就是在对445,139等端口发生该情况。只要改动了tcp协议头,就会丢弃数据包。为什么呢?也许在xp情况下,在ndis内部对netbios数据进行了特殊处理,但不应该啊?

前提条件是华硕内置网卡和其他机器的内置网卡之间在winxp(win2003)操作系统下。在2la

[编辑 -  6/6/05 by  cyliu]
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2005-06-07 14:41
以上仅是在netbios over tcpip情况下发生,也就是在对445,139等端口发生该情况。只要改动了tcp协议头,就会丢弃数据包。为什么呢?也许在xp情况下,在ndis内部对netbios数据进行了特殊处理,但不应该啊?

前提条件是华硕内置网卡和其他机器的内置网卡之间在winxp(win2003)操作系统下。在2la

[编辑 -  6/6/05 by  cyliu]

你开始不是说ping吗,怎么又和tcp扯上关系了.你是在ip层加密吗?
需要修改tcp的checksum吗?建议把问题再好好缕一缕,
我看你的描述越看越不明白,呵呵
tanm2000
驱动牛犊
驱动牛犊
  • 注册日期2005-05-12
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-06-07 15:05
如果你修改的是ICMP包,那么就不应该影响到IP校验和
如果修改了TCP UDP包的内容,那TCP UDP的校验和要重新计算。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
18楼#
发布于:2005-06-07 16:48
问题描述:
A 和 B 两台计算机,他们都安装了Win2K,WinXp,Win2003操作系统.A计算机有Realtek RTL8139 Family PCI Fast Ethernet NIC集成网卡.B计算机有两块网卡,一是D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)网卡(非集成);另一是Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller 华硕主板集成网卡.

A 和 B 两台计算机都安装我写的网络过滤驱动.

测试结果:

Win2K <=> Win2K,Win2K <=> WinXP ,Win2K <=> Win2003,WinXp<=> WinXp,WinXp <=> Win2003,Win2003 <=> Win2003,B计算机使用D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)网卡.A与B网络通信没有任何问题.

但是B采用Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller 华硕主板集成网卡,就不能通信(Win2K <=> Win2K 没有测):ping 可以通过,UDP数据也可以通过.仅是对TCP数据无法通过了.

如果B采用ASUSTeK/Broadcom 440x 10/100 Integrated Controller华硕主板集成网卡,Win2K <=>Win2K可以通信。但是其他情况就不能通信,问题出在他发送的数据更本没有经过我的hook发送函数。

这是为什么呢? 发现一个特征是发生问题的都是Controller型网卡,和他有关系吗?但Win2K就可以通过呢?

还有如何通过Frame的类型域知道数据为802.3格式,是SNMP数据呢?(如同判断是ip数据还是arp数据一样)

Frame的CheckSum的计算是在调用网络过滤模块前付值还是在调用后付值?

接受数据时,流程是否应该:
网卡驱动 -> 网络过滤 -> tcpip.sys


引用:
--------------------------------------------------------------------------------
如果你修改的是ICMP包,那么就不应该影响到IP校验和
如果修改了TCP UDP包的内容,那TCP UDP的校验和要重新计算。

--------------------------------------------------------------------------------
1 如果修改了TCP UDP包的内容,那TCP UDP的校验和要重新计算?
  我认为不用计算tcp/udp的校验和.因为发送时修改了tcp内容,接收时又改回了内容.不知道我理解是否正确?

谢谢高手们的指点!
走走看看开源好 Solaris vs Linux
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2005-06-07 17:56
>>问题出在他发送的数据更本没有经过我的hook发送函数。
SendHandler,SendPacketsHandler你都钩挂了吗?

上一页
游客

返回顶部