FunnyWeb

据说这里有很多神奇的东西...

爱奇艺完整视频真实地址获取

2017-03-19 02:13:133731 views

github上有许多解析爱奇艺视频地址的开源代码,但都是解析出分段视频地址,十分不科学。爱奇艺的移动端网页(http://m.iqiyi.com)(需要http请求中user-agent为手机才能登陆)的视频是完整的,搜了一下仿佛没有人做这个网页视频真实地址的解析。下面尝试解析。

chrome调试工具的基本用法就不多做介绍了,F12简单易操作,有问题自行百度。

首先为了防止缓存干扰,打开一个隐身模式窗口。

F12后点击toggle device,切换至手机模式,勾选Preserve log(防止页面切换时丢失数据包)

blob.png

观察捕捉到的数据包,最容易发现的是最终的视频文件

blob.png

右键复制link,新窗口打开,发现可以正常播放,良心商家并没有做限制。

然后从视频处向上找寻该地址的出处。

图片、CSS、动画等资源文件是没有任何用可以忽略的,静态的js脚本也不会包含视频网址。

下图这种带参数的请求比较可能是。

blob.png

打开所有此类请求,一一查看。

后来我突然发现是可以搜索的。。。

blob.png

打开搜索框,输入视频id的关键字,即可搜出目标地址,右键复制链接,新窗口打开,依然可以打开,而且其中包含真实视频地址。(经试验这个网址在一周之后依然可以使用,这实在难以置信)

因此,我们只需获取该网址中所有的参数即可。

http://cache.m.iqiyi.com/jp/tmts/636308400/bcb8304e4f0d075ab5ba595a8f2b63b2/?uid=&cupid=qc_100001_100186&platForm=h5&qyid=4a84d0d8adb2a5643281f5cc76730662&agenttype=13&type=mp4&nolimit=&k_ft1=8&rate=2&sgti=13_4a84d0d8adb2a5643281f5cc76730662_1490017274685&qdv=1&qdx=n&qdy=x&qds=0&__jsT=sgve&t=1490017274686&src=02020031010000000000&vf=3b235e27003a9a6f685acaafc92fdcd6&callback=tmtsCallback

任意再打开几个视频拿到这个网址,做对比,可以发现哪些是固定的。

可以得知,需要更改的是636308400、bcb8304e4f0d075ab5ba595a8f2b63b2、qyid、sgti、t、vf

下一步,进入了最难的步骤,寻找如何计算这些值。

当今几乎所有的网站都是通过js提交ajax动态请求获取信息修改网页,因此我们开始通过关键字寻找对应的js文件。

很容易可以推断,前两个是视频的标识,直接可以获取。(仔细寻找后发现在内部的命名中前者叫tvid后者叫vid)

搜索关键字qyid,找到一个xxxxxxxx!app_movie.js文件

仔细研读js代码...当然这些代码全都是混淆又压缩过的,可读性几乎让人崩溃。

百度js解密然后稍微格式化一下可以更科学一点。

一个挺好用的js解密格式化地址:http://tool.chinaz.com/js.aspx

在文件的第3行发现了这个

blob.png

在文件的第107行发现了这个

blob.png

还有一些其他的都证明了这个值疑似在cookie中。去request请求头的cookie中查看

blob.png

bingo~

下面搜索sgti,结果依然是在xxxxxxxx!app_movie.js文件中

第20行

blob.png

因此只需找到正确的k函数和参数即可,因为是混淆过的js,因此要注意js函数的范围。

格式化之后正确的函数是这个:

blob.png

目标格式一目了然。d.getAnonymousUid()仿佛是个未知量,但感觉似曾相识。搜索一下,发现它就是之前的qyid!

t即为时间戳,13位精确到毫秒。

最后是vf,搜索vf=

在ares-2-30-1-751b1fc82598fa3afba0.min.js中第29行找到(也许这个是个动态文件名)

blob.png

分析格式化后的函数:

blob.png

o=cmd5x(e)

因此搜索cmd5x函数,发现了以下两处

blob.png

blob.png

VMxxx是chrome运行js的虚拟机,因为原文件是用eval加密过的。

保存这个VM339为js文件,并格式化。

结果文件茫茫长,极度疑似是md5加密,经验证至少不是原生的md5,不过这不重要,需要的时候直接调用这个js即可加密。

然而获取vf调用这个函数的参数e未知。

尽管几乎读遍了整个函数,因涉及到的地方太多,纯js分析未果。

后面我想到了截取http包篡改js然后alert的方法,最终成功。

需要下载fiddler软件,安装。

下载地址https://pan.baidu.com/s/1bPgvca 

然后找到刚刚从js虚拟机里保存的文件,此文件中搜索cmd5x(x),定位到

blob.png

然后在U[75]之前加入alert(x);

即为:

blob.png

保存,记住路径。

打开Fiddler,设置autoresponder

前两个勾都要打上,然后点击add rule。

blob.png

即可在访问此地址时自动获取到的是本地的js文件。

然后去浏览器打开爱奇艺的视频播放页面(例如:http://m.iqiyi.com/v_19rrafi47w.html),就会出现弹窗

blob.png

参数的结构秒懂。

总结一下请求各参数的意义及获取方式:

http://cache.m.iqiyi.com

/jp/tmts/628022900/236c29f8af1889a3cf45cda0efe5a5f6/    tvid与vid,视频标识,电脑版网页查看源代码即可看到。

?uid=  用户id,一般不需登陆,取值空

&cupid=qc_100001_100186  广告id,取值qc_100001_100186

&platForm=h5  调用平台,取值h5

&qyid=57ada1a331a3fe4c41b0c42d7f5fa855  访问标识,取cookie中的["QC006"]值

&agenttype=13  用户系统标识,取值13

&type=mp4    视频标识,取值mp4

&nolimit=    作用未知,取值空

&k_ft1=8    作用未知,取值8

&rate=2    清晰度,1为标清360P,2为高清720P

&sgti=13_57ada1a331a3fe4c41b0c42d7f5fa855_1489561211612    特殊验证标识,设置为agenttype_qyid_t

&qdv=1    作用未知,取值1

&qdx=n    作用未知,取值n

&qdy=x    作用未知,取值x

&qds=0    作用未知,取值0

&__jsT=sgve    作用未知,取值sgve

&t=1489561318919    13位时间戳,取当前时间(仿佛不变也没毛病)

&src=02020031010000000000    这个在js里看到了两种不同的取值,没仔细研究(仿佛不变也没毛病)

&callback=tmtsCallback    回调函数,取值tmtsCallback

&vf=28e9b01527ef7e726e4594af52f2f879    校验值,将上面除了域名的所有字符串连在一起,调用cmd5x函数加密。

感谢Frohe Weihnachten的指导,已确认该加密为带salt的md5,其中salt为‘3sj8xof48xof4tk9f4tk9ypgk9ypg5ul’

此外

salt for iqiyi PC vf src 1702633101b340d8917a69cf8a4b8c7c is u6fnp3eok0dpftcq9qbr4n9svk8tqh7u 

salt for iqiyi PC ibt src 1702633101b340d8917a69cf8a4b8c7c is t6hrq6k0n6n6k6qdh6tje6wpb62v7654

虽然不知道这个用在哪里,求指点...

然后get请求这个地址,即可获取

blob.png

m3u对应的即为视频真实地址啦~


实例:

view-source:http://www.iqiyi.com/v_19rr9wczfo.html

找到 data-player-videoid="12e9e055c713deba092399c62d8cb2b2" data-player-tvid="599848200"

cookie中拿到新的qyid=4a84d0d8adb2a5643281f5cc76730662(讲道理可能这个也不用变)

时间戳都懒得变了,根本没影响

构建参数

/jp/tmts/599848200/12e9e055c713deba092399c62d8cb2b2/?uid=&cupid=qc_100001_100186&platForm=h5&qyid=4a84d0d8adb2a5643281f5cc76730662&agenttype=13&type=mp4&nolimit=&k_ft1=8&rate=2&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&qdv=1&qdx=n&qdy=x&qds=0&__jsT=sgve&t=1489561318919&src=02020031010000000000&callback=tmtsCallback

blob.png

(此处直接用了chrome控制台,实际中请用编程语言直接调用js即可)

2017.7.19补充

根据Frohe Weihnachten的指导,实际实现只需直接带salt的md5加密即可,也就是

vf = md5("/jp/tmts/599848200/12e9e055c713deba092399c62d8cb2b2/?uid=&cupid=qc_100001_100186&platForm=h5&qyid=4a84d0d8adb2a5643281f5cc76730662&agenttype=13&type=mp4&nolimit=&k_ft1=8&rate=2&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&qdv=1&qdx=n&qdy=x&qds=0&__jsT=sgve&t=1489561318919&src=02020031010000000000&callback=tmtsCallback"+"3sj8xof48xof4tk9f4tk9ypgk9ypg5ul")

然后构建出地址

http://cache.m.iqiyi.com/jp/tmts/599848200/12e9e055c713deba092399c62d8cb2b2/?uid=&cupid=qc_100001_100186&platForm=h5&qyid=4a84d0d8adb2a5643281f5cc76730662&agenttype=13&type=mp4&nolimit=&k_ft1=8&rate=2&sgti=13_12e9e055c713deba092399c62d8cb2b2_1489561211612&qdv=1&qdx=n&qdy=x&qds=0&__jsT=sgve&t=1489561318919&src=02020031010000000000&callback=tmtsCallback&vf=ae2bc046c94860ef3a55fd6d852d9ee2


打开,即可拿到视频真实地址:

http://111.206.23.143//videos//v0//20170109//b8//92//c31c1b0cf620cf193bd20352dda0b1fb.mp4?key=0c62a520cfd475ca3c3977f402cda0f62&dis_k=0d7a197b7ab04a20594b2b925840afe49&dis_t=1490025577&dis_dz=OTHER-BeiJing&dis_st=44&src=iqiyi.com&uuid=a997a7a-58cffc69-54&m=v&qd_vip=0&qd_k=ae2bc046c94860ef3a55fd6d852d9ee2&qd_src=02020031010000000000&dis_src=vrs&qd_uid=0&qd_tm=1490025577682&qd_ip=7c104de4