迅雷下载原理及其协议分析

加密解密 admin 4228℃ 0评论

迅雷是一个多协议的的P2SP下载管理器,除了支持基本的HTTP、FTP下载,还支持同一个资源的多种P2P协议下载,例如BT和电驴协议。当然,最大的特点是,还是资源服务器S,这个S上保存了很多网络资源的分布下载点,因此,在客户端网络带宽的允许下,下载某个比较热点的资源时,会达到网络资源利用最大化。

在P2P出来之前,通常使用的是HTTP和FTP下载,那时决定网络下载速度有两个因素,一是客户端的带宽,二是要被下载某一资源所在服务器的带宽(感觉像废话,呵呵)。客户端的带宽软件没有办法解决,因为这个是由它本身资源的不足决定的,服务器的带宽对于用户来说,也没有办法控制。但是,同一个资源,可能会存在于不同的服务器上,所以,在客户端从其中一个服务器下载资源时,如果此时客户端还有剩余的带宽,那么它可以从其他的资源服务器并行下载同一个资源的不同部分,例如一个文件10M,如果从一个资源服务器下载可能需要3分钟,但是,当客户端知道另外有四个资源服务器都存在该资源时,那么它可以同时从另外四个服务器上下载该资源的其他部分,当所有部分下载完毕,下载程序将各自下载的部分合并成一个文件,那么总的下载时间可能只需要原有时间的1/5,从而达到客户端网络带宽利用最大化。

至于如何将资源分不同的部分进行下载,在这里不做过多的讨论,不同的协议,有不同的处理方式,都已实现或有标准,按照标准实现即可。

上面讨论提到了多资源服务器下载,但是客户端怎么知道其他还有哪一些资源服务器存在要下载的资源呢?必须有个地方,存在对资源的索引,当要下载某资源时,就在资源服务器上索引,然后将含有该资源的服务器列表传输至客户端,然后客户端才对资源分不同的部分进行下载。

在迅雷实现的协议中,当下载某个HTTP资源时,通过WIRESHARK抓包发现,它会往资源服务器发送一个POST请求,如下图:

迅雷资源请求

从上图可以看出,使用的是标准的HTTP协议,但是内容已经加密,撇开HTTP POST的HEADER不看,前面4个字节一般都是固定的,后面的四个字节好像是随机,接下来的四个字节(红色矩形框)是POST内容的长度(不包括前面的12个字节)。

从上面的分析,基本就可以对迅雷进行识别了,但是我们更感兴趣的是它到底发了些什么给服务器(由于加密了,不知道发些啥),因此对迅雷程序做了简单的逆向,下图是发送内容的解密截图:

迅雷资源请求解密

转载请注明:协议分析与网络安全 » 迅雷下载原理及其协议分析

喜欢 (2)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(6)个小伙伴在吐槽
  1. 这是如何逆向解密的啊?
    jiemi2012-08-28 15:03 回复
    • 使用windbg或者OD加载迅雷程序,然后下断点调试分析它的封包过程和加/解密算法,然后写出解密程序。 当然,在这之前,可以使用IDAPRO对要调试的程序进行静态分析,有了基本的了解之后再动态调试。
      admin2012-09-03 16:58 回复
  2. 迅雷加密我早解开过。 透一点: 前三个字节是加密类型。 第四个字节&3 +9 是密钥位置 呵呵
    alanx2012-11-01 12:46 回复
  3. 迅雷是如何逆向下断点的?请指教一二,我使用od跟一跟就跑丢了。也没发现send rev之类的socket函数。不知道是如何下断点的啊? 我对迅雷也有些理解:伪ie,tcp下载,udp下载三大方式。最常用的是udp也是最好控制,tcp可以使用dfi限流。 经常逛你的博客,收获也不少。
    jiemi2013-01-23 16:53 回复
  4. 使用OD载入thunder.exe,一直按F9,最后会出现 “Microsoft Visual C++ runtime library runtime Error!”的错误。 之后就无法调试迅雷了。 请问这是为什么?
    jiemi2013-01-24 13:56 回复
    • 我没有使用OD,使用的是windbg加载MINI迅雷,没有你说的这个情况。可能是迅雷程序做了一些反调试策略,你可以先运行迅雷,然后附加进程的方式进行调试看看。
      admin2013-01-24 21:53 回复