2015年2月28日星期六

115非VIP礼包码转存内幕(一)(二)

Hello~大家好,这里是萌萌的TSIR,时隔多月之后又来给大家出教程了,首先感谢前段时间投我技术达人票的童鞋,其实更多知道我的也是福利吧的老人 吧,很多新加入的童鞋对我并不是很了解,也是我平时不爱露面的缘故,所以没有投我,情(ni)理(wan)之(dan)中(le)。最近听说115网盘礼 包分享和获取都需要VIP,不知道是不是圈钱走人,感觉很不爽,但是也不能怪他什么,本来天朝的收费就不好做,何况你还做过免费。希望理解,115也不好 做的。            115自从礼包接受开始需要VIP了后,几年前的下载手段就开始活跃了起来,没错就是大家一直津津乐道的标准码(这个词汇只是个称呼,大家随意),类似 的格式就是如下这样。


  1. B84016CA07429304DED25AABF4F820A22CC7C7CC#4498956#迷你简娃娃篆.ttf
复制代码
      这个码和种子一样,有了它再通过网上早已经泛滥的转存工具或者网页,登陆后就能转存到自己的115盘上。
       标准码的生成
       这个码到底怎么生成的呢?只要你去百度,谷歌,只会发现大量的工具,似乎没人告诉你这个码怎么由来的,或者是怎么拼出来的,那么我们来研究一下。

       首先构成形式如下:
  1. 哈希值(SHA1)#文件字节大小#文件名
复制代码
      前面一段长长的字符串到第一个#是哈希值(说实话很长一段时间我都把它说成嘻哈值来讲,囧),哈希值是什么具体的大家可以百度,我这里只是简单的说下, 类似每个人都有一个身份证,哈希值也是用来区别数据的不同。对于网盘来说就是区别不同文件,类似较大厂商提供的秒传功能,就是对哈希值进行比较,相同就不 用再次上传,直接把你文件链接指向已上传好的文件,给你造成秒传的错觉。SHA1是哈希算法,这里不多做解释了。
       文件字节大小,这个呢?就是我们说的文件大小了,后面的文件名完全是打酱油的存在,前面的哈希值和文件大小完全已经可以确定文件,所以目测后缀不变,名字什么的完全没有影响。
       了解了标准码的构造,我们如何生成它呢?我们当然可以去115服务器,查看文件哈希值,但是考虑这个可行性后还是放弃了。其实在几年前的115是提供哈希 值查看功能的,用于比对文件的完整性,后来不知道因为什么就取消了。但是功能还在,只是不显示在大众面前罢了。
       下面我用到了抓取网络数据交互的工具  Fiddler,其实谷歌自带的F12功能也行,只是习惯了。
       我们随意的打开115网盘上面的文件夹,可以看到地址栏显示类似如下
      
      抛开请求的js,css样式,图片等其他的请求,我们发现还有一个请求       (由于我们打开的不同文件的cid不同,所以直接打开上面的文件看不到我如下的结果的,必须替换成你地址栏的cid才能得到数据)
         上面的数据返回了一个json数据如下
  1. {"data":[{"fid":"639976661156","uid":22110348,"aid":1,"cid":"440964055369423227","n":"\u8ff7\u4f60\u7b80\u5a03\u5a03\u7bc6.ttf","s":4498956,"sta":1,"pt":"0","pc":"dfqxya8iaxxl8","p":0,"m":0,"t":"2015-01-30 11:18","d":1,"c":0,"sh":0,"e":"","ico":"ttf","sha":"B84016CA07429304DED25AABF4F820A22CC7C7CC","de":"","q":0,"hdf":0,"et":0,"epos":""}],"count":1,"data_source":"MYSQL","page_size":32,"aid":"1","cid":"440964055369423227","is_asc":0,"star":0,"is_share":0,"type":0,"is_q":0,"r_all":0,"stdir":0,"cur":0,"code":"","scid":"","snap":"","natsort":1,"order":"user_ptime","uid":"22110348","offset":0,"limit":32,"path":[{"name":"\u6587\u4ef6","aid":1,"cid":0,"pid":0},{"cid":"440964055369423227","name":"x","aid":"1","pid":"0","p_cid":"145683"}],"state":true,"error":"","errNo":0,"t":0.014142990112305}
复制代码
         什么鬼...为了方便我们进行unicode解码如下
  1. {"data": [{"fid":"639976661156","uid":22110348,"aid":1,"cid":"440964055369423227","n":" 迷你简娃娃 篆.ttf","s":4498956,"sta":1,"pt":"0","pc":"dfqxya8iaxxl8","p":0,"m":0,"t":"2015-01-30 11:18","d":1,"c":0,"sh":0,"e":"","ico":"ttf","sha":"B84016CA07429304DED25AABF4F820A22CC7C7CC","de":"","q":0,"hdf":0,"et":0,"epos":""}],"count":1,"data_source":"MYSQL","page_size":32,"aid":"1","cid":"440964055369423227","is_asc":0,"star":0,"is_share":0,"type":0,"is_q":0,"r_all":0,"stdir":0,"cur":0,"code":"","scid":"","snap":"","natsort":1,"order":"user_ptime","uid":"22110348","offset":0,"limit":32,"path": [{"name":"文件","aid":1,"cid":0,"pid":0}, {"cid":"440964055369423227","name":"x","aid":"1","pid":"0","p_cid":"145683"}],"state":true,"error":"","errNo":0,"t":0.014142990112305}
复制代码
      好像也没好多少,但是,似乎看见关键的东西"迷你简娃娃篆.ttf",在这个网页文件夹中,存在的就是这个字体文件,那上面的json数据返回的大致内容就应该是文件的相关信息了,注意看返回中有一个
  1. "sha":"B84016CA07429304DED25AABF4F820A22CC7C7CC"
复制代码
        这就是我们所说的哈希值,原来在这里,继续寻找有一个

  1. "s":4498956,"
复制代码

       文件大小也有了,名字上面的直接照抄就好或者你改成福利吧专属字体.ttf,除了版权问题,问题不大,应用到上面的拼凑技巧,你也应该能拼凑出如下的标准码了      
  1. B84016CA07429304DED25AABF4F820A22CC7C7CC#4498956#迷你简娃娃篆.ttf
复制代码
      这么高大上的“种子码”就被手工构造出来了(当然文件夹中不止一个文件的话,都会显示出来,每个都有自己的sha 和s 只是注意数据分段),拿去和好友分享吧,当然你还需要一个转存软件,论坛已经有人分享了,我就不多说了。
       简便的获取方式
       这里考虑到有的童鞋们可能不会抓取交互数据,那么我们就可以这样获取数据,替换关键的cid部分来获取数据,我们需要构造如下的地址
      当然可能不需要这么多的参数,具体需要哪些参数你可以自行删减测试,这里我就不做测试了,红色字体就是我们要替换的|CID部分,这块在哪找呢,我们随意的打开一个115网盘文件夹会发现类似的地址
      
      cid=后面就是要取得的部分,我们把数字上面的CID替换成440964055369423227得到下面的地址      然后用浏览器打开就能获取到上文中提到的json数据了,然后我们找到要拼凑的数据按照
  1. 哈希值(SHA1)#文件字节大小#文件名
复制代码
      就完成了标准码的构造,在115非VIP礼包码转存内幕(二)中,我们将讲到如何转存,把礼物码转换成标准码的原理,我们不做软件,只做内容的科普。
       本文为TSIR原创,如果你觉得有所收获的话,希望点下赞,也是对我原创的支持,如果有不明白的地方也可以跟帖回复,我会及时的做出解答,有错误纰漏也请指出,我们下一个主题帖子见!

==========================================================
  Hello~大家好,这里是萌萌的TSIR,时隔几天之后又来给大家出教程的续集了,在上文(115非VIP礼包码转存内幕(一)) 我们提及到了标准码的提取,但是并没有涉及到标准码的转存及礼包码转标准码的过程,这次我就来详细的介绍下其中的原理,由于上文普遍反映看不懂,这里能理 解大家的心情,帖子呢只是知识的科普和内幕的解密,并不是要大家亲自操作哈,当然了,感兴趣的童鞋也是可以试着操作的。
      文章中会涉及到POST数据的发送,这个需要软件支持,我用到的是Fiddler4,感兴趣的童鞋可以去官网下载。好了前面就说到这,我们开始正文吧。
      礼包码转标准码的过程
就目前而言,没有发现类似的接口存在,也就是说只能采取折中的方法来获取标准码,首先VIP账号获取礼包码,然后VIP获取标准码,分享标准码,最后利用 标准码实现转存,这也是取巧的方式,但是就目前而言也是最合适的方法(115升级中,或许升级后的礼包码重新向普通用户开放接受也不一定)。我们更多的介 绍的是如何将标准码的转存。
      标准码的转存
首先标准码是一段能区别文件的字符串,类似如下:

  1. B84016CA07429304DED25AABF4F820A22CC7C7CC#4498956#迷你简娃娃篆.ttf
复制代码
     而标注码的转存,其实就是把标准码所记录的文件快捷方式送到你网盘上面一份,毕竟标准码都是在115服务器里面有存在的。
      这里不得不提到秒传功能,秒传就是在服务器端已经有人上传过一样的文件,那么在你上传同样的文件的时候就会直接秒传,如果我们利用标准码+秒传功能就能实现转存的效果。这也是标准码转存的核心。
      在我们得到一个标准码的时候,我们利用如下接口进行转存。

  1. POST http://uplb.115.com/2.0/upload.php?sig=检测合法的sig HTTP/1.1
  2. Referer: http://www.115.com/
  3. Content-Type: application/x-www-form-urlencoded; Charset=UTF-8
  4. User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 QIHU 360SE
  5. Cookie: 用户自己cookie
  6. Content-Length: 219(大小随数据的不同而不同)
  7. Accept: */*
  8. Host: uplb.115.com
  9. Connection: Keep-Alive

  10. api_version=2.0&fileid=标准码中的哈希值部分&filename=标准码中的文件名部分& amp;filesize=标准码中的文件大小部分&quickid=标准码中的哈希值部分&target=U_1_文件夹的CID& amp;user_id=用户ID&userid=用户ID

复制代码
      这是要发送的POST数据,其中变动的数值都用中文给出了注释,下面我就来对上面的数据进行逐一解释,如果还是觉得很难理解,我也只能帮你到这了。       首先我们看这句

  1. POST http://uplb.115.com/2.0/upload.php?sig=检测合法的sig HTTP/1.1
复制代码
      POST 说明发送数据的方式采用post 后面紧跟的是要接受数据的地址,最后是采用遵循 HTTP/1.1 协议。其中值得关注的是sig=后面的参数,这个是用来检测是否合法,也就是让你没法直接提交数据,必须整一个他认可的参数才行。理解为门的钥匙就行。      
  1. Referer: http://www.115.com/
  2. Content-Type: application/x-www-form-urlencoded; Charset=UTF-8
  3. User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 QIHU 360SE
  4. Cookie: 用户自己cookie
  5. Content-Length: 219(大小随数据的不同而不同)
  6. Accept: */*
  7. Host: uplb.115.com
  8. Connection: Keep-Alive
复制代码

      这些Referer是从哪里过来的,类似我们从百度(http://www.baidu.com/)首页点击百度新闻(http://news.baidu.com/)那么这个值就是http://www.baidu.com/Content-Type顾名思义就是数据的类型,而User-Agent参数则是告诉服务器你的系统所用浏览器是什么,这个可以根据不同的浏览器和系统做出不一样的响应。cookie是几乎每个网站都要或多或少用到的参数,和session搭配区别用户。Content-Length是说数据的长度大小,后面的参数什么允许文件、主机、保持连接就不一一赘述了。重点是我们看到的发送的数据部分,也就是下面的部分。

      
  1. api_version=2.0& fileid=标准码中的哈希值部分&filename=标准码中的文件名部分&filesize=标准码中的文件大小部分& quickid=标准码中的哈希值部分&target=U_1_文件夹的CID&user_id=用户ID&userid=用户 ID
复制代码
      发送的数据,终于能见到标准码的影子了,文件夹的cid在上文的又提到这里就不再说明,而用户的id,在我们登录115后,源码中搜索关键字userid便可以得到类似的数值
  1. userid=132456798
复制代码
      后面的数字就是我们的用户ID,例如我们用上面的标准码就可以构造出如下的数据内容
  1. api_version=2.0& fileid=B84016CA07429304DED25AABF4F820A22CC7C7CC&filename=迷你简娃娃篆.ttf& amp;filesize=4498956&quickid=B84016CA07429304DED25AABF4F820A22CC7C7CC&target=U_1_440964055369423227&user_id=132456798&userid=<span style="line-height: 1.5;">132456798</span>
复制代码
     然后我们用fiddler发送上面的数据就可以实现转存。BUT...      cookie从哪里弄啊?sig又是怎么算出来的?哪里有sig值啊?还有fiddler这个软件都没接触好吗?
      好吧,其实,cookie可以从登录115网站时候获取,sig是通过算法得出,页面中sig值不能被用于转存,因为sig是根据目录和文件的哈希值来 计算出来的。fiddler没接触的话,没办法了,这里只是科普贴,如果有时间的话我会出教程的关于如何使用fiddler。
      其实写这个一直很纠结,所以拖了很多天,感觉不是一句两句能解释清楚的东西,标准码的生成,也许点了几下就可以获得到,可是写出来就要很多文字去说明, 还是有很多童鞋看不明白,这次的转存也是一样,想到就是一个简单的发送数据,可是解释起来真的很麻烦,用软件就很容易操作,又是一个头两个大,所以就不要 求大家跟着试验了,而且这里我并没有对sig的算法进行说明,会出现sig不对的提示,为什么呢?因为发现并利用这个接口的第一个人并不是我,而是 popok,他对115网盘转存进行了系统的研究,并且出了大量相关的软件,无私的分享了出来,可以说只要是有关115标准码的软件都有过他的身影。我只 是对软件进行了行为分析和部分反编译,在尊重popok的前提下,也是对这个转存功能保护的前提下,想了很久还是不公布sig的算法,其实不是很难的,大 家可以自行尝试分析。只是做基本的科普,本来嘛,这个就是一个科普和解密的过程,了解其中的原理就好。
       本文内容为TSIR原创解密内幕,如果你觉得有所收获的话,希望点下赞,也是对我原创的支持,如果有不明白的地方也可以跟帖回复,我会及时的做出解答,有错误纰漏也请指出,呼呼~终于完结了!

没有评论:

发表评论