阅读:2967回复:17
NDIS中间层驱动加解密问题,急!
我自己在passthru上修改的驱动程序。实现的加解密函数PacketEncry(PNDIS_Packet Packet),解密函数PacketDecry(PNDIS_Packet Packet)
加解密函数的步骤: 1 将琏式数据存入到连续的缓存空间; 2 将连续的缓存空间的数据进行加解密; 3 将加解密后的连续数据重新拷回原来的链式空间(因为采用流加密算法,所以加解密前后数据长度没变),然后将连续的缓存空间释放。 加密函数在MpSend和MpSendPacket()函数中调用NdisSend之前对将要发送的数据包进行处理。 解密函数在PtReceive()和PtReiceivePacket()函数中对接受到的数据包进行处理。 可是结果是如果对以太网帧数据段加解密,就是抛开14个字节的以太网帧头,对后面的数据段加解密能正常通信,但是如果只对Ip数据段加解密,就是抛开IP头后对后面的数据加解密,能ping通,飞鸽传书能传输字符(UDP),但是传送文件不能传送,TCP连接无法建立。 加解密没问题,简单的加1减1也不行。 |
|
沙发#
发布于:2011-03-30 09:14
请教各位大牛,问题困扰我好长时间了,哪位大牛知道的指点指点小弟。
用抓包工具能抓到对方机器发过来的数据,和发送前加密的数据完全一致,但是本机好像没有响应。是不是接收流程不对啊?数据难道没有给到上层协议?但是为什么对以太网的数据段加密又可以呢?完全按照这个流程,不做加解密对方又可以建立TCP连接,真的很奇怪。 而且我的驱动在协议层之下就解密了,所以TCP的校验和我没有进行重新计算,而且也不应该重新计算啊,对于上层来说加解密是完全透明的啊。 紧急求助!知道的大牛一定帮帮我! |
|
板凳#
发布于:2011-03-30 09:32
mark:
我有2个问题: 1 通过内容可以看到是以太网帧数据段加解密是对局域网的两台机器测试的,IP段加密的测试环境也是局域网的两台机器?? 2 以上2个加密方式的加密方法是一样吗?使用的什么加密算法? 3 确定没有改变过长度? |
|
|
地板#
发布于:2011-03-30 09:51
Ip段加解密也是在局域网测试的,环境是一样的。
加密算法采用的是A5 长度肯定是没有变的,因为我简单的将需要加密的数据包加1,然后在接收端减1,也无法通信。 |
|
地下室#
发布于:2011-03-30 10:00
还有,我是在2000下DDk的passthru修改的,加密只在MpSend和MpSendPacket里进行了修改,就是在NdisSend(&Status, pAdapt->BindingHandle, MyPacket)之前调用了加密函数EncryPacket(MyPacket),这样MyPacket的内容就是加密后的内容了。
而在接收方也只是在PtReceive和PtReceivePacket中收到数据包后调用了解密函数Decrypt(),其他地方没有做任何的改动。不知道流程有没有什么问题。 |
|
5楼#
发布于:2011-03-30 12:02
PtReceive和PtReceivePacket中调用了Decrypt()后是怎样处理的? 直接替换原来的数据包还是重新组装的数据包?(发布一点代码出来) 既然你以太网加密成功并且和解密前一样。应该没有问题。抓包软件也抓到了说明给了上层。 上次遇见类似情况是因为我的mac地址没有修改的原因。对了,那天群里有人也遇见了这个问题。
|
|
|
6楼#
发布于:2011-03-30 13:46
QQ 群: 74755180
|
|
|
7楼#
发布于:2011-03-30 14:01
我的加密函数是开辟新的连续的缓存空间,将链式数据copy到连续的缓存中,然后进行加密操作,加密操作完成后将加密后的连续数据直接一个字节一个字节的替换原来的链式缓冲区,然后释放分配的连续缓冲区。
解密函数也是一样的,先开辟连续的缓存空间,将收到的链式数据缓冲区的数据copy到连续的缓冲区,解密操作后一个字节一个字节的替换原来的包描述符指向的链式缓冲区,最后释放开辟的连续缓冲区。 所以操作完成后加解密后的数据实际上还是在原来的包描述符所指向的空间。 而且使用抓包工具进行抓包,发现发送端的TCP第一次握手的请求包是发过来了,但是本机没有响应,可是收到的内容和发送的完全一致,难道上层认为收到的数据包非法给丢掉了? 能ping通,用飞鸽发送文字是可以完全正确收到的,因为走的是UDP的协议。 我的代码导出来不太方便,我晚上看能不能想办法导出来,各位大哥先根据我的描述帮我分析分析,呵呵。 |
|
8楼#
发布于:2011-03-30 20:49
才开始研究,不醒豁。帮顶。。。。
|
|
9楼#
发布于:2011-04-10 18:24
我也正要做一个类似功能的东西,帮你顶了哈,刚开始学,好困难
|
|
10楼#
发布于:2011-04-12 23:33
楼主能给个源代码看看不? 1249711256@qq.com
|
|
11楼#
发布于:2011-04-13 21:21
不知LZ的问题解决了没有,能否共享下
|
|
12楼#
发布于:2011-04-15 12:17
既然能PING通说明,收包逻辑没有问题。有问题就出在TCP协议上面了。我猜是校验和相关。
|
|
|
13楼#
发布于:2011-04-16 09:26
一直没解决啊,怎么也解决不了。
我也怀疑过校验和的问题,可是如果是校验和的问题也有点说不通啊 1 我的过滤驱动在协议层之下,在协议层计算校验和之前我的数据已经解密还原了啊,协议层应该感觉不到我的加解密过程的啊。而且我抓到的数据包确实是解密后的,所以显示校验和是正确的。 2 我要是将校验和重新计算的话那解密后校验和会不会不对啊? 不过我自己也觉得问题很可能在这,但不知道怎么解决,呵呵 |
|
14楼#
发布于:2011-06-02 13:27
请问5楼的,以太网头又没有做加解密,为什么要修改mac地址?
|
|
15楼#
发布于:2011-06-02 13:45
回 14楼(jiangfeng88) 的帖子
我那个mac地址是一个类似的项目。所以不符合这个加解密,没有说明白-抱歉。 |
|
|
16楼#
发布于:2011-06-02 14:23
tcp checksum offload
|
|
17楼#
发布于:2011-06-02 21:28
回 16楼(neak47) 的帖子
他是简单的加1减1也不行啊 |
|
|