swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:3118回复:24

哪位用“注册假协议”的方法做过FW,或VPN,帮忙看看,谢了!

楼主#
更多 发布于:2002-06-17 16:59
我在发送数据包的时候出了问题,我只是在我的发送函数里,
申请了一个packet,一个buffer,和一块memory,把原来数据包的数据copy到新的packet里来,然后把新的packet发送出去,可是,问题出在发送出去之后如果释放我申请的packet,本来也得到sendcompletehandler了,可是它却不能被激活(有的机器可以,但有的不行,不知道为什么?)
我用的结构是ndis_protocol_block 和 ndis_open_block,系统是win 2000 pro
我把open_block里的sendcompletehandler和protocolhandle->char...s.sendcompletehandle都做了处理,可是我的网卡依然不调用sendcomplete,不知道为什么?

还有,哪位知道如何处理多网卡?谢谢!

最新喜欢:

chilichili
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-20 16:12
sorry,写问题的时候我没登录,后来才发现的,呵呵
不过没关系,再开一个给你分,不过我的分可不太多,嘻嘻!
马上就开了!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-20 16:07
高,真高!
可惜我不太懂汇编,所以,呵呵,
怎么把它变成二进制的代码? :)

直接把你的这段代码写上不行吗?


faint....
回答到这里,我才刚刚发现你的提问分是0,
没诚意,自己搞个masm然后编译一下看看就知道了。:)
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-20 15:56
高,真高!
可惜我不太懂汇编,所以,呵呵,
怎么把它变成二进制的代码? :)

直接把你的这段代码写上不行吗?
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-20 15:49
我的想法是这样的,当有多个网卡的时候,就会有多个open_block,每个open_block里都有receive and send句柄,如有两个网卡,open_block1和open_block2,我先把它们里面的receive保存在old_receive1和old_receive2句柄中,我把两个open_block里的receive函数用一个函数myreceive来替换,这样如果机器上有多块网卡,就都会到myreceive里来,但是问题却是如果来一个数据包,myreceive被激活,我怎么判断这个数据包是从哪个open_block里来的,也就是说我怎么知道我应该调用old_receive1还是old_receive2来处理这个数据包。

因为send里有macbindinghandle,可以做一下判断,但是receive里好象只有protocolbindingcontext,这个参数能判断吗?谢谢!

第一个问题,问的奇怪了。你现在的程序是怎么调用OLD_RECEIVE的?
真的要解决这个问题使用一点小技术就可以了啊。
比如
 pContext = NdisAllocateMemory(...)
 memcpy(pContext,{pop eax,push pContext,push eax,jmp hookprotocolreceive});
{pop eax,push pContext,push eax,jmp hookproc}你把这里的汇编翻译成二进制的代码填入pContext的头部
注意这里的jmp hookprotocolreceive是要根据当前地址来计算偏移量的。要有点汇编的基础。
然后pContext的后部保存你的NDIS_OPEN_BLOCK和old_protocolreceive.
最后你再把pContext 放到NDIS_OPEN_BLOCK里的protocolreceive里.

hookprotocolreceive 原型现在就变成
hookprocotoclreceive(PVOID pContext,原来的参数表.....);

第二个问题我不太清楚没试过。
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-20 15:29
我的想法是这样的,当有多个网卡的时候,就会有多个open_block,每个open_block里都有receive and send句柄,如有两个网卡,open_block1和open_block2,我先把它们里面的receive保存在old_receive1和old_receive2句柄中,我把两个open_block里的receive函数用一个函数myreceive来替换,这样如果机器上有多块网卡,就都会到myreceive里来,但是问题却是如果来一个数据包,myreceive被激活,我怎么判断这个数据包是从哪个open_block里来的,也就是说我怎么知道我应该调用old_receive1还是old_receive2来处理这个数据包。

因为send里有macbindinghandle,可以做一下判断,但是receive里好象只有protocolbindingcontext,这个参数能判断吗?谢谢!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-20 15:08
能否说的详细些,有点不太懂???
保存的open_block是hook前的还是hook后的,它调用receive或send的时候怎样区分,context的内容应该是什么样的?谢谢了! :)

当驱动程序ndis hooking初始化的时候,
遍历ndis_protocol_block和ndis_open_block结构并替换结构里
ProtocolReceive ProcotolSend函数的时候。你这个时候在替换每一个函数时,你都要做一个上下文关联(context)来保存ndis_open_block结构.以便要知道当NDIS调用protocolreceive时是调用那个ndis_open_block里的(即哪个BINDING miniport发出的)protocolreceive.

还有你的protocolreceive里有没有使用NdisTransferData函数。
如果有NdisBindingHandle就是我所说的ndis_open_block你可以通过这个来判断/
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-20 13:34
能否说的详细些,有点不太懂???
保存的open_block是hook前的还是hook后的,它调用receive或send的时候怎样区分,context的内容应该是什么样的?谢谢了! :)
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-20 11:56
gjp,发送的时候我已经可以用MacBindingHandle区分网卡了,可是在接收的时候还是不行,接收的时候只有ProtocolBindingContext,用这个可以区分网卡吗?怎么区分?3x!



哇,你好厉害,能从MacBindingHandle来区分网卡啊,佩服。
其实不用那么复杂啊,我的实现方法是。

在勾挂ProcotolReceive和ProtocolSend时,其实就是勾挂NDIS_OPEN_BLOCK结构里的ProtocolReceive和protocolSend.
这个时候你可以做一个上下文关联(Context)将这个NDIS_OPEN_BLOCK
保存在CONTEXT时,当NDIS CALL Receive 或SEND时你可以根据这个Context知道是由那个NDIS_OPEN_BLOCK调用的。然后就可以知道由那块BINDING的网卡了.
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-20 10:02
gjp,发送的时候我已经可以用MacBindingHandle区分网卡了,可是在接收的时候还是不行,接收的时候只有ProtocolBindingContext,用这个可以区分网卡吗?怎么区分?3x!
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-06-19 22:47
可是IMD的安装问题不太好处理,且IMD不好处理象PPPoE这样的设备,所以想用其他的技术!
VPN用ndis hook不能做吗?
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-06-19 21:23
做VPN建议还是使用IMD。
我思故我在,脑袋不会坏.
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-06-19 10:42
急呀,你也在做吗?

我没有在做;只是对hook比较感兴趣。。
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-06-19 10:41
急呀,你也在做吗?
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-06-19 10:40
还有很多技术难点,不能实现,特别是在接收发送数据包时的内存释放问题,一直未能解决,不过要是做FW应该没问题,做VPN就不行了!

各位帮忙,谢了 :)

呵呵,慢慢来。
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-06-19 10:36
还有很多技术难点,不能实现,特别是在接收发送数据包时的内存释放问题,一直未能解决,不过要是做FW应该没问题,做VPN就不行了!

各位帮忙,谢了 :)
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-06-19 10:25
swift的hook做成功了么?
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-06-19 09:33
是哪个结构里面的成员啊?
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-06-19 08:52
里面有个PostNt31...receive的,你替换了吗?试试看!
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-06-18 23:22
我能够得到发送的数据包,但是得不到接受的数据包啊!
我已经把ndis_open_block里面的发送和接受函数入口值都替掉了!还有把ndis_protocol_block里面的接受函数入口值也替掉了,可是就是不能得到接受的数据包,不知道为什么呢?还有什么地方的接受数据包入口函数值我没有替掉的啊?
上一页
游客

返回顶部