«

»

7月 31

B站API更新,Biligrab只能使用falloff模式

本版本过旧,我不再提供支持!请看最新的发布版本!

(早猜出来了,看最新code。。。)

 

猜不出sign是怎么做的。

http://interface.bilibili.com/playurl?cid=1338722&player=1&ts=1406832881&sign=7037e644d3b4159c80372af8bd6fff72

求大家一起动手。

22 comments

Skip to comment form

  1. StarBrilliant

    难道sign不是这么做的么?
    http://docs.bilibili.cn/wiki/%E5%88%86%E7%B1%BB:API

    1. Beining

      当时我是看了几十遍,就是看不懂。。。最后找了个Python代码跑了几遍解决了。

  2. xiao

    这个地址 参数不带appkey sign不知道怎么生成的 随便填个appkey 倒是sign 都不用了

    1. Beining

      这个太老了,请看最新版。

      1. xiao

        新的我看了下也是带appkey的 只是好奇这不带key的sign是怎么生成的而已。。

        1. Beining

          看代码 把所有东西都放一起 然后md5就是。

          1. xiao

            我在你代码里面只看到带appkey的 sign_this = calc_sign(‘appkey={APPKEY}&cid={cid}

            就像你那例子 参数里面不带appkey
            http://interface.bilibili.com/playurl?cid=1338722&player=1&ts=1406832881&sign=7037e644d3b4159c80372af8bd6fff72

            不带appkey的情况下
            md5(cid=1338722&player=1&ts=1406832881)
            可得不到 7037e644d3b4159c80372af8bd6fff72

            当然带key 连sign都不用验证就能直接访问 但不是想要这种方法 是想知道上面那种不带key的算法
            http://interface.bilibili.com/playurl?cid=1338722&appkey=85eb6835b0a1034e

          2. xiao

            奇怪了 难道发长点的内容会被吞么

            1. Beining

              带链接的默认吞。但是我可以看见并手动批准。
              垃圾评论太猖狂。

  3. xiao

    我在你代码里面只看到带appkey的 sign_this = calc_sign(‘appkey={APPKEY}&cid={cid}

    就像你那例子 参数里面不带appkey
    http://interface.bilibili.com/playurl?cid=1338722&player=1&ts=1406832881&sign=7037e644d3b4159c80372af8bd6fff72

    不带appkey的情况下
    md5(cid=1338722&player=1&ts=1406832881)
    可得不到 7037e644d3b4159c80372af8bd6fff72

    当然带key 连sign都不用验证就能直接访问 但不是想要这种结果 是要上面那种不带key的算法
    http://interface.bilibili.com/playurl?cid=1338722&appkey=85eb6835b0a1034e

    1. Beining

      重复一次:这个版本已经很老了,我不再提供支持。
      如果有问题,请参照最新版本。
      他的计算应该加上了所有参数。

  4. hihi427

    你把b站播放器 的play.swf 反编译一下 里边getsign的function 看看应该就能明白怎么算的了吧
    这里大概贴一点 不完整的
    package com.bilibili.interfaces {
    public function getSign(_arg1:string):string{ var _local4:int; var _local2 = null; var _local26:int; var _local25:int; var _local19:int; var _local15:int; var _local14:int; var _local7:int; var _local22:int; var _local16:int; var _local13:int; var _local27:int; var _local11:int; var _local23:int; var _local12:int; var _local18:int; var _local17:int; var _local20:int; var _local3:int = ESP; _local4 = _local3; _local3 = (_local3 – 160); _local11 = 16; _local27 = (_local4 – 153); ESP = (_local3 & -16); _local26 = CModule.mallocString(_arg1); _local25 = _arg1.length; var _local24:int = (L__2E_str3 – _local11); _local24 = op_li8((_local24 + 16)) /*Alchemy*/ ; _local3 = (_local3 – 16); op_si32(_local24, (_local3 + 4)); //Alchemy op_si32(_local27, _local3); //Alchemy ESP = _local3; F_sprintf(); _local3 = (_local3 + 16); _local11 = (_local11 + -1); _local27 = (_local27 + 2); //unresolved if _local11 = 0; _local27 = _local11; if (_local25 != 0){ _local11 = 0; _local27 = 0; if (_local25 = 1){ _local22 = _local20; _local18 = _local16; _local19 = _local17; _local24 = (_local26 + _local18); _local17 = op_li8(_local24) /*Alchemy*/ ; if (_local17 != 38){ if (_local17 != 61){ _local16 = (_local18 + 1); _local17 = _local19; _local20 = _local22; //unresolved jump }; _local12 = (_local26 + _local19); _local24 = (_local11 + (_local7 << 4)); op_si32(_local12, _local24); //Alchemy _local13 = (_local18 – _local19); op_si32(_local13, (_local24 + 4)); //Alchemy _local16 = (_local18 + 1); _local20 = 1; _local17 = _local16; //unresolved if _local18 = L__2E_str1; _local19 = op_li8(_local12) /*Alchemy*/ ; _local24 = op_li8(_local18) /*Alchemy*/ ; _local17 = _local16; _local20 = _local22; //unresolved if _local20 = 1; _local17 = _local16; //unresolved if _local12 = (_local12 + 1); _local18 = (_local18 + 1); _local13 = (_local13 + -1); _local20 = 1; _local17 = _local16; //unresolved if //unresolved jump }; _local24 = (_local11 + (_local7 << 4)); op_si32((_local26 + _local19), (_local24 + 8)); //Alchemy _local21 = (_local18 – _local19); op_si32(_local21, (_local24 + 12)); //Alchemy _local16 = (_local18 + 1); _local7 = (_local7 + 1); _local17 = _local16; _local20 = _local22; //unresolved if _local22 = _local7; if (_local17 != _local25){ _local21 = (_local11 + (_local7 <= 19){ _local23 = (_local23 / 10); //unresolved if }; _local23 = (0 – _local7); }; op_si8(_local25, _ts_2E_2596); //Alchemy _local25 = (_buf_2E_2569 + _local23); _local23 = (_ts_2E_2596 + 1); _local24 = op_li8(_local25) /*Alchemy*/ ; op_si8(_local24, _local23); //Alchemy _local25 = (_local25 + 1); _local23 = (_local23 + 1); //unresolved if _local23 = (_local11 + (_local22 << 4)); op_si32(L__2E_str1, _local23); //Alchemy op_si32(2, (_local23 + 4)); //Alchemy op_si32(_ts_2E_2596, (_local23 + 8)); //Alchemy _local22 = (_ts_2E_2596 & -4); _local21 = op_li32(_local22) /*Alchemy*/ ; var _temp1 = (_local21 + -16843009); _local21 = (_local21 & -2139062144); _local21 = (_local21 ^ -2139062144); _local25 = (_local22 + 4); _local7 = 0; if ((_local21 & _temp1) != 0){ while ((_local17 = (_ts_2E_2596 + _local7)) < (_local25 = (_local22 + 4))) { _local24 = op_li8(_local17) /*Alchemy*/ ; //unresolved if _local7 = (_local7 + 1); }; }; _local7 = op_li32(_local25) /*Alchemy*/ ; _local24 = (_local7 + -16843009); _local21 = (_local7 & -2139062144); _local21 = (_local21 ^ -2139062144); _local24 = (_local21 & _local24); if (_local24 != 0){ _local24 = (_local7 & 0xFF); if (_local24 == 0){ _local7 = (_local25 – _ts_2E_2596); //unresolved jump }; _local24 = op_li8((_local25 + 1)) /*Alchemy*/ ; if (_local24 == 0){ _local7 = (_local25 + (1 – _ts_2E_2596)); //unresolved jump }; _local24 = op_li8((_local25 + 2)) /*Alchemy*/ ; if (_local24 == 0){ _local7 = (_local25 + (2 – _ts_2E_2596)); //unresolved jump }; _local24 = op_li8((_local25 + 3)) /*Alchemy*/ ; if (_local24 == 0){ _local7 = (_local25 + (3 – _ts_2E_2596)); //unresolved jump }; }; _local25 = (_local25 + 4); //unresolved jump op_si32(_local7, (_local23 + 12)); //Alchemy _local23 = 1; if (_local27 == 1){ _local27 = 38; _local25 = 0; //unresolved jump }; }; _local7 = 1; //unresolved jump _local20 = (_local11 + (_local12 << 2)); _local14 = op_li32(_local20) /*Alchemy*/ ; _local24 = (_local14 + _local25); _local19 = op_sxi8(op_li8(_local24) /*Alchemy*/ ) /*Alchemy*/ ; _local16 = (_local11 + (_local12 << 2)); _local23 = op_li32((_local16 – 16)) /*Alchemy*/ ; _local24 = (_local23 + _local25); _local15 = op_sxi8(op_li8(_local24) /*Alchemy*/ ) /*Alchemy*/ ; if (_local15 <= _local19){ var _temp2 = (_local19 & 0xFF); _local24 = (_local15 & 0xFF); //unresolved if _local25 = (_local25 + 1); if (_local25 < _local18){ //unresolved if _local13 = (_local11 + (_local12 << 2)); _local18 = op_li32((_local13 + 4)) /*Alchemy*/ ; //unresolved if //unresolved jump }; }; _local24 = (_local12 << 2); var _local10:int = (_local11 + _local24); _local24 = op_li32((_local10 + 12)) /*Alchemy*/ ; _local21 = (_local12 << 2); var _local8:int = (_local11 + _local21); _local21 = op_li32((_local8 + 8)) /*Alchemy*/ ; op_si32(_local23, _local20); //Alchemy op_si32(_local22, (_local13 + 4)); //Alchemy var _local6 = (_local12 << 2); _local6 = (_local11 + _local6); var _local5 = op_li32((_local6 – 8)) /*Alchemy*/ ; op_si32(_local5, (_local8 + 8)); //Alchemy _local8 = (_local12 << 2); _local8 = (_local11 + _local8); _local5 = op_li32((_local8 – 4)) /*Alchemy*/ ; op_si32(_local5, (_local10 + 12)); //Alchemy op_si32(_local14, (_local16 – 16)); //Alchemy _local10 = (_local12 << 2); _local10 = (_local11 + _local10); op_si32(_local18, (_local10 – 12)); //Alchemy op_si32(_local21, (_local6 – 8)); //Alchemy op_si32(_local24, (_local8 – 4)); //Alchemy _local17 = (_local17 + 1); if (_local27 != _local17){ _local24 = (_local17 << 4); _local24 = (_local11 + _local24); _local22 = op_li32((_local24 – 12)) /*Alchemy*/ ; _local12 = (_local17 << 2); _local25 = 0; //unresolved jump }; _local7 = (_local7 + 1); if (_local27 != _local7){ _local17 = 1; //unresolved jump }; _local23 = _local27; //unresolved if _local3 = (_local3 – 16); op_si32(38, _local3); //Alchemy ESP = _local3; F_malloc(); _local3 = (_local3 + 16); _local27 = eax; _local25 = _local27; //unresolved jump _local24 = (_local25 << 4); _local24 = (_local11 + _local24); _local21 = op_li32((_local24 + 4)) /*Alchemy*/ ; _local21 = (_local27 + _local21); _local24 = op_li32((_local24 + 12)) /*Alchemy*/ ; _local24 = (_local21 + _local24); _local27 = (_local24 + 2); _local25 = (_local25 + 1); //unresolved if _local3 = (_local3 – 16); op_si32(_local27, _local3); //Alchemy ESP = _local3; F_malloc(); _local7 = 0; _local3 = (_local3 + 16); _local27 = eax; _local25 = _local27; _local24 = (_local7 << 4); _local24 = (_local11 + _local24); _local21 = op_li32(_local24) /*Alchemy*/ ; _local10 = op_li32((_local24 + 4)) /*Alchemy*/ ; _local3 = (_local3 – 16); op_si32(_local10, (_local3 + 8)); //Alchemy op_si32(_local21, (_local3 + 4)); //Alchemy op_si32(_local25, _local3); //Alchemy ESP = _local3; Fmemcpy(); _local3 = (_local3 + 16); _local21 = op_li32((_local24 + 4)) /*Alchemy*/ ; _local10 = (_local25 + _local21); op_si8(61, _local10); //Alchemy _local6 = op_li32((_local24 + 8)) /*Alchemy*/ ; _local10 = op_li32((_local24 + 12)) /*Al

    1. Beining

      1. 我去反编译了,差点看吐了。这混淆简直丧心病狂。
      2. 我后来猜出来了。。。。。。。。

      1. hacs

        能求个具体算法不?

        1. Beining

          sign_this = calc_sign('appkey={APPKEY}&cid={cid}{SECRETKEY}'.format(APPKEY = APPKEY, cid = cid, SECRETKEY = SECRETKEY))
          #----------------------------------------------------------------------
          def calc_sign(string):
          """str/any->str
          return MD5."""
          return str(hashlib.md5(str(string).encode('utf-8')).hexdigest())

          我用FFDec.

          1. hacs

            非常感谢!

          2. DickyT

            这个好像也是带appkey的sign模式而已?

            1. Beining

              这个版本太旧了,我不再提供支持了。
              里面的函数很多都重写了。
              请看最新版,thx。

    2. hacs

      请问用什么工具反汇编的? 我用的工具 找不到getSign函数的具体实现 package com.bilibili.interfaces 下面也没有 只找到在其他地方调用的

  5. hihi427

    找版权 视频源 http://pr.lolly.cc/(P720 or P1080)?cid=XXX 不知道试过没 挺方便的
    b站pr插件的服务器
    例如http://pr.lolly.cc/P720?cid=2691116

    1. Beining

      1. 不是永远好用。
      2. 不能解析一般东西。
      3. 偶尔失去响应。

      总之加上,最新版丢进去。

    2. Beining

      丢进去了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">