idioson
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1728回复:8

怎样hook结构ProtocolCharacteristics的ReceiveHandler成员(20)

楼主#
更多 发布于:2002-11-15 21:18
我是个新手,各位帮帮忙。

我的目的是想拦截ndis.sys的数据包,现在已经hook到了
NdisRegisterProtocol(
    OUT PNDIS_STATUS  Status,
    OUT PNDIS_HANDLE  NdisProtocolHandle,
    IN PNDIS_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics,
    IN UINT  CharacteristicsLength
)
函数,我想进一步hook结构ProtocolCharacteristics的ReceiveHandler成员来拦截接受包,但是当我
把我自己的接受包函数地址值赋值给ReceiveHandler时候,
ProtocolCharacteristics->ReceiveHandler =MY_NdisReceive;
运行就会出现蓝屏。我测试了下,给ProtocolCharacteristics结构里面任何成员赋值都会蓝屏,为什么呢?
哪位大虾帮我解决了这个问题,100分就是你的了
youzi
驱动牛犊
驱动牛犊
  • 注册日期2001-09-20
  • 最后登录2004-03-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-16 07:07
you must change the pointer before you call the NdisRegisterProtocol function(but save a copy of old pointer). or you can allocate a new ProtocolCharacteristics and pass the new ProtocolCharacteristics to NdisRegisterProtocol.

My firewall was done by this way. no problem.
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-16 09:27
你可以参考一下 PCAUSA 的 PIM 代码,本站可以下载,用的就是 Hook NDIS 的方法。
idioson
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-16 10:05
 REVEIVE_HANDLER         m_pNdisReceive =NULL;
//成功hook到NdisRegisterProtocol函数,代码如下,帮我看看原因
VOID NDIS_API
MY_NdisRegisterProtocol(
    OUT PNDIS_STATUS  Status,
    OUT PNDIS_HANDLE  NdisProtocolHandle,
    IN PNDIS_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics,
    IN UINT  CharacteristicsLength
)
{
DbgPrint(\"MY_NdisRegisterProtocol\\n\");
        
         m_pNdisReceive=ProtocolCharacteristics>ReceiveHandler;

    ProtocolCharacteristics->ReceiveHandler =MY_NdisReceive; //就是这句不能赋值,运行造成蓝屏,要了我的命
       //转发给系统函数
m_pNdisRegisterProtocol(
Status,
NdisProtocolHandle,
ProtocolCharacteristics,
CharacteristicsLength
);
}
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地下室#
发布于:2002-11-16 18:34
你要搞清楚,是这句话运行的时候蓝屏,还是在这个函数运行完了以后才才蓝屏的?
idioson
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-16 20:30
谢谢fracker的提示:
的确是在运行函数的时候出现蓝屏,

fracker,为什么会出现这样的情况呢,帮我解决解决
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
6楼#
发布于:2002-11-16 20:50
那你要在函数入口处设定一个断点,然后单步看一看,是哪步出错?
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
7楼#
发布于:2002-11-16 20:52
有可能是你的函数MY_NdisReceive声明跟ReceiveHandler 声明不一致,造成退出堆栈错误,也有可能是你的这个函数里面有错误。
idioson
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-17 09:39
看来我又有新问题了,谢谢fracker的指点



给分
游客

返回顶部