AI 文章摘要

本文介绍了从网站抓取视频流的关键步骤:通过开发者工具分析请求,发现视频以ts切片格式传输,并定位到包含ts地址的m3u8请求。重点分析了请求中加密参数authKey和vf的生成逻辑:authKey通过固定值、时间戳和视频ID的MD5组合生成,vf则通过字符串变换函数处理后经MD5加密得到。其他参数大多固定或可见。文章最后列出了不同视频清晰度对应的bid参数值。
摘要更新时间:2026-06-21 16:30

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

逆向爱奇艺

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

逆向爱奇艺

参数太多,就要做减法,因为不是每个参数都是加密的,经过测试,加密参数也就是authKeyvf这两个,其他的参数都是可见的且有些是固定的,下面进入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的末尾作为携带的加密参数

逆向爱奇艺
逆向爱奇艺
逆向爱奇艺
逆向爱奇艺
逆向爱奇艺

到这就全部理清楚了,逻辑就是,除了vfauthkey,其他参数都不是加密的参数,首先,把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
}
}