首先随便找一部剧
例如:https://www.mgtv.com/b/345877/11739597.html?no_wakeup=1
使用浏览器的开发者工具进行抓包
找到真实的播放源
然后搜索m3u8找到请求接口
这个链接我们直接访问时400错误,后面请求接口中的type参数改成pad即可解决
继续搜索,搜atcl
将 stream_domain 和 url 构成了获取真实播放源的接口
经过简化后留下
需要找出参数 tk2, pm2,其他的参数固定
正好发现这个接口返回的数据中有pm2参数
简化后
现在只需要找到tk2参数就行了
ctrl + f 搜索 tk2
tk2 = btoa("did=" + s + "|pno=" + e + "|ver=0.3.0301|clit=" + l)
.replace(/\+/g, "_").replace(/\//g, "~")
.replace(/=/g, "-").split("").reverse().join("")
s = "b3fa1a11-def2-46c1-bf08-6d937a284338"
固定值
e = 1030
l = ~~(+new Date / 1e3)
; // 这里 ~~
是类型转换,强行转换成 整数型
+
转成数值型
~~
转成整数类型
可参考 JavaScript字符串转数字:https://www.html.cn/web/javascript/13155.html
然后将拼接的字符进行base64编码
最后通过正则将指定字符进行替换,然后将字符串进行翻转
这样就找到tk2参数。
请求播放源的时候,带上VIP的Cookie即可 解析VIP视频。
参数did的算法: https://honey.mgtv.com/honey-2.0/plugin/stk.js?202003050022:formatted
208行
改装后的js代码
for (var c = "function" == typeof Buffer ? Buffer : Array, d = [], u = {}, t = 0; t < 256; t++)
d[t] = (t + 256).toString(16).substr(1),
u[d[t]] = t;
function h(e, t) {
var n = t || 0
, o = d;
return o[e[n++]] + o[e[n++]] + o[e[n++]] + o[e[n++]] + "-" + o[e[n++]] + o[e[n++]] + "-" + o[e[n++]] + o[e[n++]] + "-" + o[e[n++]] + o[e[n++]] + "-" + o[e[n++]] + o[e[n++]] + o[e[n++]] + o[e[n++]] + o[e[n++]] + o[e[n++]]
}
function getRandom16() {
let p = new Uint8Array(16);
for(let i = 0; i < 16; i++) {
p[i] = Math.ceil(Math.random() * (255 + 1))
}
return p;
}
var o = getRandom16()
var s = getRandom16()
, f = [1 | o[0], o[1], o[2], o[3], o[4], o[5]]
, p = 16383 & (o[6] << 8 | o[7])
, w = 0
, v = 0;
function g(e, t, n) {
var o = t && n || 0;
"string" == typeof e && (t = "binary" === e ? new c(16) : null,
e = null);
var i = getRandom16();
if (i[6] = 15 & i[6] | 64,
i[8] = 63 & i[8] | 128,
t)
for (var r = 0; r < 16; r++)
t[o + r] = i[r];
return t || h(i)
}
let getDid = function () {
return g(undefined, undefined, undefined)
}
let did = getDid()
console.log(did)
示例页面:https://lacknb.cn/vip-analysis
前端播放器示例代码:https://github.com/MrNiebit/vip-analysis