您当前位于: 首页 » 网络通信协议 » 360软件管家通信协议分析

360软件管家通信协议分析07/05/2010

曾经说过360利用云计算打压竞争对手的事情,今日一改往事之郁闷,我专门来篇文章夸奖下360安全卫士。咳咳!今天不完全是写360安全卫士的,我喜欢其中的一个叫做软件管家的功能,坦白说,我有点喜欢新软件,喜欢没事升级升级,尤其是chrome,一有新版本出来,我立马升级,好不含糊!国内这种软件管家很多的,不过我个人觉得360软件管家速度比较快。这点上,360的软件管家立功了,因为公司强制每台机器必须安装360,所以在公司,软件升级这很轻松,可是家里电脑我不想安装这玩意儿,于是我想,我只要弄到我想要升级的软件URL不就可以下载了么?基于这么一点朴素的想法,我就打算分析下360软件管家是通信协议是啥?

随便弄一个抓包工具,比如Wireshark,一看,原来是HTTP协议,这样的话实际上可以用我以前介绍的神器-Fiddler来分析更简单。经过一段时间的抓包,有了一点比较笨的思路:先通过关键字定位到想要的软件,然后获得该软件的ID,再查询一次,得到下载地址。比较有用的数据是这样子的:

GET http://soft.360.cn/baoku/index.php?c=Search&a=getSoftList&cver=v1&kw=91&appver=2.6.1.1004&uid=1&pid=h_home&m=da13c0cdf6109a3c58e0e378826fd01c HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; .NET4.0C; .NET4.0E)
Host: soft.360.cn
Connection: Keep-Alive
Pragma: no-cache
Cookie: B=ID=497891276160941:V=2:S=41529b7136

看请求部分,GET的几个传值kw是搜索关键字,就是在360软件管家界面搜索框中输入的东西,appver很明显就是软件管家的版本号,不用理会,m是一个固定串不知道是否和机器相关,目前这部分都没有做校检,保持不变即可,另外服务端也没有检测Cookie,所以上面的请求Cookie也可以不用修改,只要修改kw后面的内容即可.
返回的格式是这样的:

<?xml version="1.0" encoding="gbk" ?> 
<ret>
<retinfo/>
<softs title="">
<soft>
<id>103326</id>
<os>Win7/Vista/Win2003/WinXP/Win2000/WinNT/WinME/Win9x</os>
<ver>1.12.1.109625</ver>
<surl>
http://soft.360.cn/static/baoku/info_5_0/softinfo_103326.html
</surl><logo>
http://img.360.cn/images/2008/360baoku/logo2/91Divine2.png
</logo>
<size>51818131</size>
<free>2</free>
<brief>一款由网龙公司自主研发的免费算命软件。知命而...</brief>
<ptime>2010-07-01</ptime>
<bname>91算命</bname>
<vname>91算命 1.12.1</vname>
<plugin>2</plugin>
</soft>
</softs>
</ret>

就是个标准的XML了,如果软件的版本比你安装的新,就可以考虑下载了哈!ID已经包含在上面的XML里面了,下面再进行一个请求,获得指定软件ID的下载地址,RAW数据是这样子的:

GET http://q.soft.360.cn/get_download_url.php?type=download_url&soft_ids=10149&appver=2.6.1.1004&uid=1&pid=h_home&m=da13c0cdf6109a3c58e0e378826fd01c HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; .NET4.0C; .NET4.0E)
Host: q.soft.360.cn
Connection: Keep-Alive
Pragma: no-cache
Cookie: B=ID=497891276160941:V=2:S=41529b7136

这就不解释了哈,从服务端返回的数据是这样子的:

<?xml version="1.0" encoding="gbk" ?> 
- <ret>
  <retinfo code="0" msg="" total="1" success="" empty="" /> 
- <softs>
- <soft>
  <pnum>5</pnum> 
  <id>10149</id> 
  <os>Win7/Vista/Win2003/WinXP/Win2000/WinNT/WinME/Win9x</os> 
  <ver>2.8.2.126</ver> 
  <size>38735006</size> 
  <vname>91手机助手 for iPhone 2.8.2.126</vname> 
- <durls>
- <![CDATA[ pdown://p2=301DBDF56E9D9DE308244E5967248D82C7FAE017|p3=20|p4=4800|p5=6|h1=10149_109492|h3=120|h7=5|b5=360软件管理|b6=91手机助手 for iPhone 2.8.2.126|b7=1|http://softdl1.360.cn/91assistant/91assistant_iphone_2.8.2.126.exe;http://softdl4.360.cn/91assistant/91assistant_iphone_2.8.2.126.exe
  ]]> 
  </durls>
- <dname>
- <![CDATA[ 91手机助手 for iPhone_2.8.2.126.exe
  ]]> 
  </dname>
  </soft>
  </softs>
  </ret>

呃。。。。上下数据不配套哈!!不过没有关系,这并不影响讲解,看到上面xml的durls了么?那就是华丽的下载地址哈,这里我们也明白了为什么360软件管家下载的比别人快了吧?它有自己的N台加速服务器,而官方的原始下载链接通常被放在最后面,显然优先级是最低的。至于前面pdown://p2这样子的地址猜测是P2P下载用的,可以不用理会。
到这里就完全OK了,你可以用任何语言来写一个客户端,这样可以不用安装庞大的360安全卫士了!最后,我想说下:本文纯属闲的蛋疼、消遣作乐、学习研究之目的而撰,并没有任何商业企图或者阴谋攻击之成分。

| 13条评论 标签:  

13条评论
  1. blue5tar说道:

    分析的很好!
    请问,360是怎么检查是否有新版本的呢,是如何进行版本检测的呢?

    • gently说道:

      这个肯定是比较来的了,先扫描一遍本机安装的软件,存档,然后每次开启时和云端比较,没有啥研究价值吧?这个

  2. wxfwg说道:

    受益菲浅呀

  3. tstc说道:

    不差这五毛钱吧?何必呢

  4. woxinwuhen说道:

    能不能发你写的软件给我啊!我跟你一样也很喜欢360的软件管家 其他就不喜欢了

  5. Aric说道:

    学习了
    谢谢

  6. sb说道:

    楼主你不是蛋疼,是蛋疼到一定程度了

    • gently说道:

      这位兄弟,我直接称呼你昵称似乎不大合适,不过我要表达的是:感谢你今天还来评论我2010年的日志,并且说了这么诚恳的话

  7. honey说道:

    前辈你好,我客户需要chrome浏览器,但是由于天朝的网络原因,下载总是不给力,但是通过360下载就比较快,蛋疼的是客户一般都是通过浏览器下载,但是资源如果下载下来放在我们自己服务器上面的话,估计照样不给力。有什么办法直接获取360服务器下载的最新稳定版本载资源,请指教,感激不尽!

  8. xinwendashibaike说道:

    原来360以前是怎么实现的

发表评论