本版本过旧,我不再提供支持!请看最新的发布版本!
(早猜出来了,看最新code。。。)
猜不出sign是怎么做的。
http://interface.bilibili.com/playurl?cid=1338722&player=1&ts=1406832881&sign=7037e644d3b4159c80372af8bd6fff72
求大家一起动手。
wp-search-with-algolia
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vhosts/cnbeining.com/html/wp-includes/functions.php on line 6121(早猜出来了,看最新code。。。)
猜不出sign是怎么做的。
http://interface.bilibili.com/playurl?cid=1338722&player=1&ts=1406832881&sign=7037e644d3b4159c80372af8bd6fff72
求大家一起动手。
难道sign不是这么做的么?
http://docs.bilibili.cn/wiki/%E5%88%86%E7%B1%BB:API
当时我是看了几十遍,就是看不懂。。。最后找了个Python代码跑了几遍解决了。
这个地址 参数不带appkey sign不知道怎么生成的 随便填个appkey 倒是sign 都不用了
这个太老了,请看最新版。
新的我看了下也是带appkey的 只是好奇这不带key的sign是怎么生成的而已。。
看代码 把所有东西都放一起 然后md5就是。
我在你代码里面只看到带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
奇怪了 难道发长点的内容会被吞么
带链接的默认吞。但是我可以看见并手动批准。
垃圾评论太猖狂。
我在你代码里面只看到带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
重复一次:这个版本已经很老了,我不再提供支持。
如果有问题,请参照最新版本。
他的计算应该加上了所有参数。
你把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. 我去反编译了,差点看吐了。这混淆简直丧心病狂。
2. 我后来猜出来了。。。。。。。。
能求个具体算法不?
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.
非常感谢!
这个好像也是带appkey的sign模式而已?
这个版本太旧了,我不再提供支持了。
里面的函数很多都重写了。
请看最新版,thx。
请问用什么工具反汇编的? 我用的工具 找不到getSign函数的具体实现 package com.bilibili.interfaces 下面也没有 只找到在其他地方调用的
找版权 视频源 http://pr.lolly.cc/(P720 or P1080)?cid=XXX 不知道试过没 挺方便的
b站pr插件的服务器
例如http://pr.lolly.cc/P720?cid=2691116
1. 不是永远好用。
2. 不能解析一般东西。
3. 偶尔失去响应。
总之加上,最新版丢进去。
丢进去了。