AI 文章摘要
长话短说,大致讲步骤,进入网站,随便点击一部影视剧,打开开发者工具,由于视频是ts格式传输不是一整个,所以得从ts下手,突然发现当切换影视剧清晰度的时候,发送了一个请求,然后往下找找到了它的m3u8格式的ts地址,也即是说,这些视频是切片播放的,一段一段传输播放的,由此知道,这个就是应该请求的接口url,先在这个xhr打上一个断点

下面查看它的携带参数,发现是非常多

参数太多,就要做减法,因为不是每个参数都是加密的,经过测试,加密参数也就是authKey和vf这两个,其他的参数都是可见的且有些是固定的,下面进入authKey生成的代码部分,发现由v(v(S) + s + "" + h)这么个东西生成,随便测试一下,就知道了这个v(S)是固定值,s是时间戳tm,h是视频的身份证tvid


如果想深究,进入v函数,发现S就是空的,然后出来就是那个v(S),同时这个值不变,如果再想深究代码的意思,这就是个MD5码,这也是为什么输入值一定,输出值一定,这不多说


然后第二次进入v函数得到authkey,仔细看传入的参数值,不就是把v(S)、tm和tvid连接成一个字符串,然后得到那个authkey,这下知道了authkey如何得到,还差vf



来到vf的生成位置,可知道vf等于i,i是由v(rr.dash(r))得到的,同时也经过一个v函数MD5加密,还经过了一个rr.dash函数,进入rr.dash函数,发现这个是一个用于字符串变换的函数


再查看传入的参数,不就是把那一串再传入最后得到一个i,再把i给到vf加在url的末尾作为携带的加密参数





到这就全部理清楚了,逻辑就是,除了vf和authkey,其他参数都不是加密的参数,首先,把v(S)、tm与tvid连成一个字符串经过MD5码加密得到authkey,其中v(S)值固定,其次,把除了vf的其他所有参数作为一个r经过v(rr.dash(r))功能函数得到rf,最后就得到应该携带的正确的参数加上url就请求到了
上代码演示一下

源代码里面也写了不同bid值代表的清晰度,bid就是那个携带的参数,像600就是1080p,但是web端测试下来疑似最高600

fm = {
100: {
nbid: 100,
value: “极速”,
qipu: “jisu”,
obid: 96
},
300: {
nbid: 300,
value: “高清”,
qipu: “600”,
obid: 2
},
400: {
nbid: 400,
value: “超清”,
qipu: “1000”,
obid: 3
},
500: {
nbid: 500,
value: “720P”,
qipu: “720P”,
obid: 4
},
600: {
nbid: 600,
value: “1080P”,
qipu: “1080P”,
obid: 5
},
601: {
nbid: 601,
value: “爱奇艺HDR”,
qipu: “HDR”,
obid: 51
},
610: {
nbid: 610,
value: “1080P50”,
qipu: “1080P50”,
obid: 27
},
700: {
nbid: 700,
value: “2K”,
qipu: “2K”,
obid: 6
},
800: {
nbid: 800,
value: “4K”,
qipu: “4K”,
obid: 10
},
1020: {
nbid: 1020,
value: “8K”,
qipu: “8K”,
obid: 41
},
96: {
nbid: 100,
value: “极速”,
qipu: “jisu”,
obid: 96
},
2: {
nbid: 300,
value: “高清”,
qipu: “600”,
obid: 2
},
3: {
nbid: 400,
value: “超清”,
qipu: “1000”,
obid: 3
},
4: {
nbid: 500,
value: “720P”,
qipu: “720P”,
obid: 4
},
5: {
nbid: 600,
value: “1080P”,
qipu: “1080P”,
obid: 5
},
51: {
nbid: 601,
value: “爱奇艺HDR”,
qipu: “HDR”,
obid: 51
},
27: {
nbid: 610,
value: “1080P50”,
qipu: “1080P50”,
obid: 27
},
6: {
nbid: 700,
value: “2K”,
qipu: “2K”,
obid: 6
},
10: {
nbid: 800,
value: “4K”,
qipu: “4K”,
obid: 10
},
41: {
nbid: 1020,
value: “8K”,
qipu: “8K”,
obid: 41
}
}