阅读:2018回复:3
cyliu 版主,请进.....
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; } } } |
|
沙发#
发布于:2010-03-17 01:06
版主,帮忙看看这个!...............
|
|
板凳#
发布于:2010-03-17 11:41
1 抓包工具获取的包是包的拷贝
2 所有接收函数都要做解密处理 3 你的上面PtReceive代码处理远远不足 4 如果没有上面3个问题,则检查解密是否成功? 5 如果解密成功,dump出所有的数据,然后和对端加密前数据比较 |
|
|
地板#
发布于:2010-03-17 12:36
先谢谢老大:
我在怀疑在下面的函数中: 将解密后的数据NdisAllocateBuffer 然后 NdisChainBufferAtFront(MyPacket,MyBuffer); 在接收数据中这么处理是否正确? |
|