zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2165回复:16

请问ndis hook中如何实现自己构造包给上层

楼主#
更多 发布于:2004-04-15 12:39
用ndis hook(注册假协议的方式)如何在ProtocolReceive中自己构造一个包提交给上层?我是用gjpland大侠的框架
死了都要爱......
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-15 22:09
还没听明白你的意思。。  你是不处理包就向上传,还是修改包才向上传 ;)
YM KILL YOU
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-16 08:42
还没听明白你的意思。。  你是不处理包就向上传,还是修改包才向上传 ;)

我是想自己构造一个包(可以理解为修改)再向上传,另外我还想在ProtocolReceive中用ndissend对外发出一个我构造的包,不知道能不能实现?怎么实现?
死了都要爱......
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-18 17:58
可以实现。。
YM KILL YOU
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-18 18:18
[quote]还没听明白你的意思。。  你是不处理包就向上传,还是修改包才向上传 ;)

我是想自己构造一个包(可以理解为修改)再向上传,另外我还想在ProtocolReceive中用ndissend对外发出一个我构造的包,不知道能不能实现?怎么实现? [/quote]

啊哦,你的答复好简单哦,怎么做啊,偶都蓝了n多回屏了
死了都要爱......
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-18 18:34
你调用NdisSend发包。。 ;)
YM KILL YOU
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-18 19:40
你调用NdisSend发包。。 ;)


偶这几天碰到的问题太多,ProtocolReceive中用NdisMIndicateReceivePacket提交包总是蓝屏(是不是gjp的框架里不能用NdisMIndicateReceivePacket提交上层),计算tcp的校验和也不对(计算ip的没问题,可是计算tcp的就是不对),真实郁闷死了..... :( :mad:
死了都要爱......
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-18 21:20
是你代码有问题吧。贴出来看看。你老这么点点说。谁能明白呀
YM KILL YOU
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-18 21:56
是你代码有问题吧。贴出来看看。你老这么点点说。谁能明白呀


INT HookProtocolReceivePacket(
    IN  HOOK_CONTEXT_STRUCT    *pOurContext,  
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet
)
{
NTSTATUS status = NDIS_STATUS_SUCCESS;
PADAPT pAdapt =(PADAPT)ProtocolBindingContext;
PNDIS_PACKET MyPacket;
if(!pAdapt->MiniportHandle)
{
DbgPrint(\"pAdapt->MiniportHandle Faild! \\n\");
}

if( pOurContext )
{
CheckSendHandle(pOurContext);

NdisDprAllocatePacket(&status, &MyPacket, m_ourPacketPoolHandle);
if(status == NDIS_STATUS_SUCCESS)
{
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;

//
// Get the original packet(it could be the same packet as one received or a different one
// based on # of layered MPs) and set it on the indicated packet so the OOB stuff is visible
// correctly at the top.
//
NDIS_SET_ORIGINAL_PACKET(MyPacket, NDIS_GET_ORIGINAL_PACKET(Packet));
NDIS_SET_PACKET_HEADER_SIZE(MyPacket, NDIS_GET_PACKET_HEADER_SIZE(Packet));

//
// Set Packet Flags
//
NdisGetPacketFlags(MyPacket) = NdisGetPacketFlags(Packet);

//
// Make sure the status is set to NDIS_STATUS_RESOURCES.
//
NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);

NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); //执行到这里蓝屏

//ASSERT(NDIS_GET_PACKET_STATUS(MyPacket) == NDIS_STATUS_RESOURCES);
NdisDprFreePacket(MyPacket);
//return status;
}

if( HookFilterPacket(pOurContext,Packet,FALSE) )
{
status = ((RECEIVE_PACKET_HANDLER)pOurContext->m_pOriginalProc)(
ProtocolBindingContext,
Packet);

}
else
status = NDIS_STATUS_NOT_ACCEPTED;

}
return status;
}

btw,计算tcp校验和已经搞定了...
死了都要爱......
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-18 22:02
你检察MiniportHandle。%90是他错误。
YM KILL YOU
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-18 22:35
你检察MiniportHandle。%90是他错误。


能不能具体一点呢,我也怀疑过MiniportHandle的问题,可是又觉得不是,ProtocolBindingContext肯定没问题的啊,怎么才能判断MiniportHandle有没有问题呢?
死了都要爱......
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-19 12:50
直接就把PASSTHRU的代码搬过来了!
PADAPT pAdapt =(PADAPT)ProtocolBindingContext;
IMD才能这样用,HOOK不行。
在PASSTHRU中ProtocolBindingContext是你初始化过的东西,HOOK中你没有机会初始化。也就是说pAdapt->MiniportHandle是空或别的地址。
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-19 13:20
PASSTHRU 在初始化时候把句丙保存到pAdapt->MiniportHandle
所以用ProtocolBindingContext可以得到这个句丙。

HOOK  没有把句丙放到pAdapt->MiniportHandle
你使用pAdapt->MiniportHandle会产生叶故障。
因此pAdapt->MiniportHandle 应该等于NULL 或无效地址!

你在HOOK中定义个全局变量 获得MiniportHandle句丙 保存这个句丙到全局变量中就可以用了 ;)
YM KILL YOU
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-19 13:21
你这家伙抄东西也太厉害了吧。什么都抄。都没经过大脑 ;)
YM KILL YOU
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-19 14:00
说话别那么难听
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-04-19 14:31
多谢两位啦,偶检讨hoho,放分 :P
死了都要爱......
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-19 21:30
哎,偶发觉偶还是得不到MiniportHandle,怎么办啊,我看到在HOOK_CONTEXT_STRUCT里有个m_pBindAdaptHandle,请问我下面这样做对不对
PNDIS_OPEN_BLOCK pNdisOpenBlock;
pNdisOpenBlock = (PNDIS_OPEN_BLOCK)pOurContext->m_pBindAdaptHandle;
MiniportHandle是不是就是((PADAPT)pNdisOpenBlock->ProtocolBindingContext)->MiniportHandle?
死了都要爱......
游客

返回顶部