乐视视频真实地址解析
来源:互联网 发布:房子平面设计软件 编辑:程序博客网 时间:2024/06/05 12:01
乐视视频真实地址解析
本文主要为了跳过广告,直接拿到真实视频地址
声明:不得将本文用于非法用途
乐视视频[http://www.le.com/ptv/vplay/29770479.html]
其中vid是29770479
我们要将它转换成M站的url[http://m.le.com/vplay_29770479.html]
为什么?因为好破解。
把m站的url通过浏览器访问,并抓包,得到这个重要的接口
[http://player-pc.le.com/mms/out/video/playJson.json?platid=3&splatid=301&tss=no&id=29770479&detect=0&dvtype=1000&accessyx=1&domain=m.le.com&tkey=-1050776182&devid=0F47D3C0F41ADFF5BB490C0876D7F69A9FE9EDD7&source=1001&lang=cn®ion=cn&isHttps=0&callback=vjs_149622460663864]
当然你访问我这个链接肯定是没有结果的,因为有时间戳限制。
我们看下这个接口的组成部分,id就是视频的vid,其他参数可以固定,重要的是tkey,
这个参数是通过算法算出来的,具体的算法在这个js中http://jstatic.letvcdn.com/sdk/player.js
代码截图
下面我们来具体了解这个算法的过程。
可以看到tkey:i,然后i = n.getMmsKey(e);
其中e是时间戳,格式是这样的1496225866.311
下面是getMmsKey精简过的代码,可以看出getMmsKey用到rotateRight以及S2v,
有兴趣及耐心的可以把算法翻译成想要的语言,更好的办法是通过V8引擎,用自己用的语言
如python,c++,go等直接执行js脚本。作者用的是python,所以选择pyv8,具体方法见博文
http://blog.csdn.net/qiaodoutec/article/details/72821250
function getMmsKey(e) { var _1 = "d", _2 = "rotateRight", _3 = "O"; var t = 185025305 r = 8 n = e n = rotateRight(n, r); var o = S2v[_3](n, t); return o } function rotateRight(e, t) { var _1 = "g", _2 = "o"; for (var r, n = 0; S2v[_1](t, n); n++) r = S2v[_2](1, e), e >>= 1, r <<= 31, e += r; return e } var S2v = { D: function(Y, r) { return Y | r }, d: function(Y, r) { return Y % r }, O: function(Y, r) { return Y ^ r }, k: function(Y, r) { return Y < r }, J: function(Y, r) { return Y >> r }, R: function(Y, r) { return Y === r }, g: function(Y, r) { return Y > r }, o: function(Y, r) { return Y & r }, l: function(Y, r) { return Y !== r }, L: function(Y, r) { return Y != r }, a: function(Y, r) { return Y - r }, u: function(Y, r) { return Y == r }, e: function(Y, r) { return Y << r } };
好这样我们就计算出tkey了,然后再拼成刚才的api,它的返回结果如图
我们要将domain和具体的清晰度的url拼接
http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzI5LzYwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTAzODM3Mjg0LWF2Yy00MTY2MjAtYWFjLTQ4MDAwLTg5OTYwLTUzNjQzMDctNGFjMTU3MWEzZTg3YjAxODI4NDMyZDAzMDdiOTg5NWUtMTQ5NjE4ODg5NTYyMy5tcDQ=?b=476&mmsid=65147212&tm=1496223574&key=2c699fc99fb56511359de715f212731b&platid=3&splatid=304&playid=0&tss=no&vtype=13&cvid=736248594819&payff=0&pip=3e33dfad4b00c2c7f7ca5ea55cc012f9
你以为这样就能拿到播放地址了吗太年轻了,他会给你返回一段广告。还要再url后面加上以下参数&p2=04&p1=0&uuid=&vid=29770479&format=1&hwtype=un&termid=2&expect=3&jsonp=&ostype=android
其中vid是视频的vid,这样最终我们拿到了视频的cdn地址,返回json串如下图
这个location才是视频的真实地址。
好了乐视视频真实地址获取完毕。
—————更新————
有人问原网页内容是什么,现贴出来
var x2O = (function() { var j3 = (0x33, 86.8E2) < 0x19 ? 47 : 56.5E1 < 19 ? (0x5b, 0x56) : (0x17, 0x2a) < (0x61, 50.3E0) ? (81, 0x1e04890bccee) : (81, 0x1d) , k2 = (function(a4, D4) { var b2 = "" , A5 = 93.57E+0 > (0x45, 51.23E3) ? (79.096E1, 67.729E+0) : 42.9E3 <= (35.8E2, 76.) ? (22.7E1, 40.4E+2) : (0x1, 0x18) <= (72.1E2, 84.64E3) ? false : (15, 0x4f); if (a4.length > (67.95E2, 99) < (22., 21.) ? (68, 44.433E2) : (0x9, 0x3a) <= (71.11E+0, 26.) ? 0x53 : (0x47, 21.) <= 91. ? (35, 0xc) : (0xd, 69.68E1)) for (var I2 = (36.86E+1, 62.) > (19.5E2, 52.5E2) ? (43, 31.) : 0x27 < 29.82E0 ? (0x5d, 47.672E0) : 0x50 < 86.3E3 ? (88.91E3, 0xd) : (0x29, 88.33E3) > (56., 0x51) ? (57.5E+1, 12.88E+3) : 32E2 > (29.6E1, 0x29) ? (41.428E+3, 0x26) : 0x53 <= 0x1d ? (29, 19.) : 72.23E1 >= 0x37 ? (0x10, 0x1b) : (42., 90.); I2 > 1; ) b2 += (A5 = A5 ? (0x5b, 64.) >= (80., 11.415E1) ? 7.747E2 : (0x32, 85) >= (52.641E1, 11.033E2) ? (78.07E+2, 0x31) : 40. <= (0x19, 0x15) ? 95. : (86.196E2, 80.43E0) >= (74.45E0, 23) ? (73.8E0, false) : (0x44, 0xc) >= (60.39E2, 0x11) ? 0x3 : (0x4, 69.99E2) <= (43., 45.2E1) ? (70.396E0, 0x3c) : (0x7, 20) > (18.577E1, 0x4e) ? (58, 56E1) : (0x7, 3) >= 66.3E+0 ? (36.1E0, 57.19E3) : (0x10, 0x1a) : (0x4f, 9E+2) <= (87., 0x5d) ? (8, 0x3f) : 0x22 >= (0x47, 10.29E1) ? (0x9, 0x4b) : 6.243E1 > 0x53 ? (94, 0x4d) : (0x4b, 97.9E2) < 0x6 ? (48.8E1, 51.61E3) : (27., 42.529E+1) < 0x4e ? (0x58, 60.189E+2) : true) ? a4.charAt(I2) : "@%)eitg)(tDwn".charAt(I2--); return D4 === null ? eval(b2) : D4 ^ a4 })("_9(mTe.)ea e(", (72.2E2, 32.26E2) >= 21.9E0 ? null : (42.8E3, 75) < 0x1c ? 62 : (0x4f, 0x4) < 67. ? (55.056E0, 13.14E2) : (85E2, 10.5E2) < (73.81E3, 40.269E0) ? (89.274E+2, 36.3E0) : (0x51, 0x22) < (0x18, 5.28E0) ? (0x2b, 0x25) : 0x58); return { h8: function(p5) { var T5, t7 = (0x15, 31.364E3) <= 33 ? (94, 97) : (98.8E2, 0x1f) < 0x4e ? (19, 0x0) : (0x14, 0x9) <= 64.3E2 ? 65.4E2 : (0x31, 0x49) >= (0x39, 88) ? 28.443E2 : 94. < 29 ? (0x34, 0x52) : (46E2, 0x1a), n6 = j3 > k2, T9; for (; t7 < p5.length; ) { T9 = (parseInt(p5.charAt(t7), 17.7E2 < 24. ? (0x62, 0x6) : (93.31E3, 54.4E2) >= (40.51E0, 0x3d) ? (81, 0x10) : (0x38, 73.41E+0) >= (27.91E1, 81.) ? (81, 76E2) : 0x48 <= (0x3b, 88) ? (76, 90) : (0x31, 0x1d) > (92.77E+3, 75.) ? 78. : (83.41E1, 0x2c) >= 61.7E2 ? 94 : (21.112E2, 0x5) < (0x25, 72.9E3) ? 0x17 : (27.23E1, 68.948E1))).toString((89, 0x62) < (0x27, 0x45) ? (26.214E1, 23.5E3) : (2.26E1, 64) >= 70.9E1 ? (76.189E1, 0x43) : (0x25, 96) < (37.321E1, 1.2E1) ? (0x1d, 0x33) : (0x3f, 0x7) > (0x13, 0x3) ? 0x2 : (0x13, 92E3) >= (0x4f, 48.) ? 82. : (48.435E+2, 0x3f) <= (79.049E1, 91.) ? (81.6E3, 0x4e) : 0x4c >= 46.853E+3 ? 44.24E3 : 75); T5 = t7++ == (0x28, 80.254E1) <= (61., 0x12) ? (18., 36.29E3) : (31.88E1, 0x2a) > (60., 0x5f) ? 0x1d : (18.871E3, 38.3E+2) > 0x59 ? (0x5f, 0x0) : 48.7E+2 < (64.43E1, 98) ? 70.1E2 : 0x46 > 86.5E0 ? (0x4a, 79) : (0x55, 82.3E1) >= (66., 0x34) ? (39.9E1, 0x3b) : 42.12E3 < (0x14, 56.) ? 43 : 36. ? T9.charAt(T9.length - (78.1E2, 0x5d) >= (77., 36.099E+3) ? (59.01E2, 76.54E1) : 4.55E1 < (81, 10.14E1) ? 0x1 : (0x4f, 0x42) > (0x47, 39.) ? (27., 0x40) : (0x13, 95.) >= 0x1 ? (0x4e, 0x24) : (12.188E2, 0x1d)) : T5 ^ T9.charAt(T9.length - (0x26, 86.28E+1) < (88.93E1, 21.9E0) ? (76.421E1, 73) : (80., 0x29) <= 0x2c ? (70.35E2, 0x1) : (0x18, 0x1) > (48.97E3, 61.39E2) ? 85.07E1 : 0x23) } return T5 ? !n6 : n6 } }})();var _1 = "feda8dd6e0127da88f3487a646fe8a6b" , _2 = "jjuy9567dfj6bkksomnnghwokjlu0o" , _3 = "tYt2bxik";var x2q = { D: function(Y, r) { return Y | r }, d: function(Y, r) { return Y % r }, O: function(Y, r) { return Y ^ r }, k: function(Y, r) { return Y < r }, J: function(Y, r) { return Y >> r }, R: function(Y, r) { return Y === r }, g: function(Y, r) { return Y > r }, o: function(Y, r) { return Y & r }, l: function(Y, r) { return Y !== r }, L: function(Y, r) { return Y != r }, a: function(Y, r) { return Y - r }, u: function(Y, r) { return Y == r }, e: function(Y, r) { return Y << r }};var Key = { liveKey: _1, APIKey: _2, secret_key: _3, getAPIKey: function(e) { var _1 = "AES" , _2 = "decrypt" , _3 = "APIKey" , _4 = x2O.h8("01") ? "toString" : "AES" , _5 = "enc" , _6 = "Utf8" , _7 = "error"; try { return Encode[_1][_2](e, this[_3])[_4](Encode[_5][_6]) } catch (t) { return _7 } }, getCl: function(e) { var _1 = "MD5" , _2 = x2O.h8("303w") ? "showmethemoney" : "join" , _3 = x2O.h8("9127") ? "error" : "liveKey"; try { return Encode[_1](e + _2) } catch (t) { return _3 } }, getMmsKey: function(e) { var _1 = x2O.h8("49") ? "d" : "MD5" , _2 = "rotateRight" , _3 = "O"; var t = 47.3E2 <= (67.01E3, 78.4E1) ? ("d", 37.2E2) : 4.1E2 <= (0x2b, 95) ? 0x63 : (13.956E2, 42.453E2) <= 0x2 ? (93.79E2, "error") : (0x28, 97.) < ("error", 8.) ? (",", "g") : (96.31E3, 92.926E0) >= (0x35, 0x5d) ? 0x62 : 10. >= (64.5E1, 55.) ? 79.671E1 : 62.2E2 <= 0x2a ? (20.908E1, 93.) : (0x1b, 2.49E1) < 0x5e ? (52, 0xb074319) : (11, 75.1E1) < (60., 55.42E1) ? (0x11, 50.66E1) : (85.224E+2, 0x5d) , r = x2q[_1](t, 17) , n = e; n = this[_2](n, r); var o = x2q[_3](n, t); return o }, rotateRight: function(e, t) { var _1 = x2O.h8("91") ? "g" : "tYt2bxik" , _2 = "o"; for (var r, n = 0; x2q[_1](t, n); n++) r = x2q[_2](1, e), e >>= 1, r <<= 31, e += r; return e }, getLiveTkey: function(e, t) { var _1 = "MD5" , _2 = "liveKey" , _3 = "join" , _4 = "," , _5 = "toString"; return Encode[_1]([e, t, this[_2]][_3](_4))[_5]() }, getPingBackKey: function(e, t, r, n) { var _1 = x2O.h8("mo48") ? "MD5" : "rotateRight" , _2 = x2O.h8("8889") ? "secret_key" : "MD5" , _3 = "toString"; return Encode[_1](e + t + r + n + this[_2])[_3]() }};
如果本文帮助了你,请随意打赏,我们会继续努力的
- 乐视视频真实地址解析
- 乐视视频真实地址解析
- 土豆视频真实地址解析
- 腾讯视频真实地址解析
- 土豆视频真实地址解析
- 腾讯视频真实地址解析
- 视频真实地址解析分析
- 视频真实地址解析工具
- 解析网络视频真实地址
- 腾讯视频真实地址解析
- 视频网站真实地址解析
- 凤凰视频真实视频地址解析
- 优酷视频真实地址解析
- 酷6视频真实地址解析
- 优酷视频真实地址解析
- 优酷视频真实地址解析
- 优酷视频真实地址解析
- 优酷视频真实地址解析
- MEMM,HMM,CRF三者之间的关系
- firewalld的用法
- WEB 开发错误收集(三) org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:
- 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS
- AppBarLayout 介绍和简单使用
- 乐视视频真实地址解析
- iostat命令输出中的dm-x设备是多路径聚合之后的哪个设备?
- 链接
- dos压缩解压命令
- KVC 与 KVO 理解
- 同步代码块的使用
- jpype python 调用java
- 信息驱动机制介绍
- Spring 4.2整合Redis3.2.8