ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:2018回复:3

cyliu 版主,请进.....

楼主#
更多 发布于:2010-03-13 00:56
AB两台机器,A发送数据已经成功,现在需要在B机器底层进行解密,程序是在passthru框架下,在PtReceive中需要对接收到的数据包进行解密:
代码如下:
 问题1:我用iris进行抓包分析,发现iris抓到的数据并不是解密后的数据,而是未解密的数据,这是为什么?
 问题2:如果需要进行这种解密的话,需要怎么处理好?是在ptreceive中处理么?如果是的话,正确的处理方法是?
                                                                      
                           已经郁闷很长时间了,在此先谢谢版主了!

NDIS_STATUS
PtReceive( IN  NDIS_HANDLE         ProtocolBindingContext,
    IN  NDIS_HANDLE         MacReceiveContext,
    IN  PVOID               HeaderBuffer,         //包头地址
    IN  UINT                HeaderBufferSize,     //包头长度
    IN  PVOID               LookAheadBuffer,      //前视缓冲区指针
    IN  UINT                LookAheadBufferSize,  //前视缓冲区长度 可能小于数据缓冲区的长度
    IN  UINT                PacketSize            //数据包大小
    )
{
    if (!pAdapt->MiniportHandle)
    {
        Status = NDIS_STATUS_FAILURE;
    }
    else do
    {
        Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
        if (Packet != NULL)
        {
            NdisDprAllocatePacket(&Status, &MyPacket,pAdapt->RecvPacketPoolHandle);  
            if (Status == NDIS_STATUS_SUCCESS)
            {                
                int  pMark =0;
                DeSecityPacket(pAdapt,Packet,MyPacket,&pMark);
                 //DeSecityPacket为数据解密函数:大致流程如下
                 //将解密后的数据NdisAllocateBuffer 然后     NdisChainBufferAtFront(MyPacket,MyBuffer);

                if (pMark ==1) //解密成功
                {
                    PrintContent(Packet,"打印解密数据");
                }
                if(pMark ==0) //解密失败
                {
                    MyPacket->Private.Head = Packet->Private.Head;
                    MyPacket->Private.Tail = Packet->Private.Tail;
                }
                NDIS_SET_ORIGINAL_PACKET(MyPacket, NDIS_GET_ORIGINAL_PACKET(Packet));
                NDIS_SET_PACKET_HEADER_SIZE(MyPacket, HeaderBufferSize);
                NdisGetPacketFlags(MyPacket) = NdisGetPacketFlags(Packet);
                NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);
                NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);
                NdisDprFreePacket(MyPacket);
                break;
            }
        }
         }
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-03-17 01:06
版主,帮忙看看这个!...............
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2010-03-17 11:41
1 抓包工具获取的包是包的拷贝

2 所有接收函数都要做解密处理

3 你的上面PtReceive代码处理远远不足

4 如果没有上面3个问题,则检查解密是否成功?

5 如果解密成功,dump出所有的数据,然后和对端加密前数据比较
走走看看开源好 Solaris vs Linux
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-03-17 12:36
先谢谢老大:

我在怀疑在下面的函数中:

将解密后的数据NdisAllocateBuffer 然后     NdisChainBufferAtFront(MyPacket,MyBuffer);

在接收数据中这么处理是否正确?
游客

返回顶部