Open clarck opened 12 years ago
这个很久没用过了。刚才简单试了下,一时看不出来是怎么算的。可能要稍后找时间再细看了。
key的计算变复杂了很多..用st时间减去60秒再做了内部的一些自己写的算法.破解了pptv的播放器swf.大概看了下.. 哪天我给你贴代码...flash的代码..我不太看得懂... 看你忙不过来啊...呵呵..加油啊
config.dMillis = Date.parse(xmldown.servertime) - 60 * 1000 - Date.parse(new Date().toUTCString()); _loc_1 = Utils.constructKey((config.dMillis + Date.parse(new Date().toUTCString())) / 1000); public static const SERVER_KEY:String = "qqqqqww";
public static function getkey(param1:String) : uint { var _loc_5:String = null; var _loc_6:uint = 0; var _loc_7:uint = 0; var _loc_2:* = param1.split(""); var _loc_3:uint = 0; var _loc_4:Number = 0; while (_loc_4 < _loc_2.length) {
_loc_5 = _loc_2[_loc_4];
_loc_6 = _loc_5.charCodeAt(0);
_loc_7 = _loc_6 << _loc_4 % 4 * 8;
_loc_3 = _loc_3 ^ _loc_7;
_loc_4 = _loc_4 + 1;
}
return _loc_3;
}// end function
static function encrypt(param1:String, param2:String) : String
{
var _loc_5:uint = 0;
var _loc_6:uint = 0;
var _loc_7:uint = 0;
var _loc_13:uint = 0;
var _loc_14:uint = 0;
var _loc_15:uint = 0;
var _loc_16:uint = 0;
var _loc_17:uint = 0;
var _loc_18:uint = 0;
var _loc_19:uint = 0;
var _loc_20:uint = 0;
var _loc_21:uint = 0;
var _loc_22:uint = 0;
var _loc_23:uint = 0;
var _loc_24:int = 0;
var _loc_25:uint = 0;
var _loc_26:uint = 0;
var _loc_27:uint = 0;
var _loc_28:uint = 0;
var _loc_29:uint = 0;
var _loc_30:uint = 0;
var _loc_31:uint = 0;
var _loc_32:uint = 0;
var _loc_33:uint = 0;
var _loc_34:uint = 0;
var _loc_35:uint = 0;
var _loc_36:uint = 0;
var _loc_37:uint = 0;
var _loc_38:uint = 0;
var _loc_39:uint = 0;
var _loc_40:uint = 0;
var _loc_41:uint = 0;
var _loc_3:int = 16;
var _loc_4:* = getkey(param2);
var _loc_8:* = param1.split("");
var _loc_9:* = param2.split("");
var _loc_10:* = _loc_4;
_loc_5 = _loc_4 << 8 | _loc_10 >>> 24;
_loc_6 = _loc_10 << 16 | _loc_10 >>> 16;
_loc_7 = _loc_10 << 24 | _loc_10 >>> 8;
var _loc_11:String = "";
var _loc_12:uint = 0;
while (_loc_12 + _loc_3 <= _loc_8.length)
{
_loc_13 = _loc_8[_loc_12].charCodeAt(0) << 0;
_loc_14 = _loc_8[(_loc_12 + 1)].charCodeAt(0) << 8;
_loc_15 = _loc_8[_loc_12 + 2].charCodeAt(0) << 16;
_loc_16 = _loc_8[_loc_12 + 3].charCodeAt(0) << 24;
_loc_17 = _loc_8[_loc_12 + 4].charCodeAt(0) << 0;
_loc_18 = _loc_8[_loc_12 + 5].charCodeAt(0) << 8;
_loc_19 = _loc_8[_loc_12 + 6].charCodeAt(0) << 16;
_loc_20 = _loc_8[_loc_12 + 7].charCodeAt(0) << 24;
_loc_21 = 0 | _loc_13 | _loc_14 | _loc_15 | _loc_16;
_loc_22 = 0 | _loc_17 | _loc_18 | _loc_19 | _loc_20;
_loc_23 = 0;
_loc_24 = 0;
while (_loc_24 < 32)
{
_loc_23 = _loc_23 + DELTA;
_loc_33 = (_loc_22 << 4) + _loc_4;
_loc_34 = _loc_22 + _loc_23;
_loc_35 = (_loc_22 >>> 5) + _loc_5;
_loc_36 = _loc_33 ^ _loc_34 ^ _loc_35;
_loc_21 = _loc_21 + _loc_36;
_loc_37 = (_loc_21 << 4) + _loc_6;
_loc_38 = _loc_21 + _loc_23;
_loc_39 = _loc_21 >>> 5;
_loc_40 = _loc_39 + _loc_7;
_loc_41 = _loc_37 ^ _loc_38 ^ _loc_40;
_loc_22 = _loc_22 + _loc_41;
_loc_24++;
}
_loc_25 = _loc_21 >>> 0 & 255;
_loc_26 = _loc_21 >>> 8 & 255;
_loc_27 = _loc_21 >>> 16 & 255;
_loc_28 = _loc_21 >>> 24 & 255;
_loc_29 = _loc_22 >>> 0 & 255;
_loc_30 = _loc_22 >>> 8 & 255;
_loc_31 = _loc_22 >>> 16 & 255;
_loc_32 = _loc_22 >>> 24 & 255;
_loc_11 = _loc_11 + getCharFromAscii(_loc_21 >>> 0 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_21 >>> 8 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_21 >>> 16 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_21 >>> 24 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_22 >>> 0 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_22 >>> 8 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_22 >>> 16 & 255);
_loc_11 = _loc_11 + getCharFromAscii(_loc_22 >>> 24 & 255);
_loc_12 = _loc_12 + _loc_3;
}
_loc_11 = _loc_11 + param1.substr(8, 8);
return _loc_11;
}// end function
public static function Str2Hex(param1:String) : String
{
var _loc_7:Number = NaN;
var _loc_8:Number = NaN;
var _loc_2:String = "0123456789abcdef";
var _loc_3:* = _loc_2.split("");
var _loc_4:* = param1.split("");
var _loc_5:* = new Array(2 * _loc_4.length + 1);
var _loc_6:* = _loc_4.length;
var _loc_9:int = 0;
while (_loc_9 < _loc_6)
{
if (_loc_9 < 8)
{
_loc_7 = _loc_4[_loc_9].charCodeAt(0) & 15;
_loc_8 = _loc_4[_loc_9].charCodeAt(0) >>> 4 & 15;
_loc_5[2 * _loc_9] = _loc_3[_loc_4[_loc_9].charCodeAt(0) & 15];
_loc_5[2 * _loc_9 + 1] = _loc_3[_loc_4[_loc_9].charCodeAt(0) >>> 4 & 15];
}
else
{
_loc_5[2 * _loc_9] = _loc_3[Math.floor(Math.random() * 15)];
_loc_5[2 * _loc_9 + 1] = _loc_3[Math.floor(Math.random() * 15)];
}
_loc_9++;
}
return _loc_5.join("");
}// end function
public static function time2String(param1:Number) : String
{
var _loc_8:Number = NaN;
var _loc_2:* = new Array(8);
var _loc_3:* = new ByteArray();
var _loc_4:String = "0123456789abcdef";
var _loc_5:* = "0123456789abcdef".split("");
var _loc_6:uint = 0;
while (_loc_6 < 8)
{
_loc_8 = param1 >>> 28 - _loc_6 % 8 * 4 & 15;
_loc_2[_loc_6] = _loc_5[_loc_8];
_loc_6 = _loc_6 + 1;
}
var _loc_7:* = _loc_2.join("");
return _loc_2.join("");
}// end function
public static function constructKey(param1:Number) : String
{
var _loc_2:* = time2String(param1);
var _loc_3:* = _loc_2.split("");
if (_loc_3.length < 16)
{
_loc_2 = add(_loc_2, 16 - _loc_3.length);
}
var _loc_4:String = "";
var _loc_5:* = Utils.SERVER_KEY;
if (Utils.SERVER_KEY.length < 16)
{
_loc_5 = add(_loc_5, 16 - _loc_5.length);
}
_loc_4 = Utils.encrypt(_loc_2, _loc_5);
_loc_4 = Utils.Str2Hex(_loc_4);
return _loc_4;
}// end function
public static function add(param1:String, param2:Number) : String
{
var _loc_3:Number = 0;
while (_loc_3 < param2)
{
param1 = param1 + getCharFromAscii(0);
_loc_3 = _loc_3 + 1;
}
return param1;
}// end function
同求,你目前的这个算法已经不能使用了。
iambus,按照你的python脚本去执行的,获取到的分段的MP4链接无效,后来我去抓包了一下,发现它获取key的算法貌似变了,获取到的最终的下载MP4地址失效了,求解释。 测试链接:http://v.pptv.com/show/KZvXVb0jk9E0sho.html