笔记本电脑电池保养软件-wlan密码是什么

爱奇艺播放器官方
2023年4月4日发(作者:rm转mp4格式转换器)

爱奇艺视频H5解析分析过程

说明

功能实现项⽬

⽂章说明

正⽂

⽂章所⽤⼯具

分析过程

准备⼯作

清除浏览器缓存、COOKIE

启⽤Fiddler的抓包功能

打开⼀个爱奇艺视频⽹页

等待视频加载开始

分析数据

1、筛选视频流数据项

2、构造视频项请求头

进⼊第⼀层构造

挂起第⼀层构造

进⼊第⼆层构造

结束第⼆层构造

继续第⼀层构造

结束第⼀层构造

结束分析

简短说明

参考和说明

说明

功能实现项⽬

⽂章说明

1.模拟爱奇艺视频基于H5播放⽅式的视频解析过程,并且有效的解析视频真实地址。

2.由于在写这⽂章时是基于爱奇艺普通⽤户所分析的,所以并不具备下载VIP视频的能⼒。

3.如果有兴趣的可以进⼊以上的Github项⽬地址进⾏提交改进。

正⽂

⽂章所⽤⼯具

⼯具名说明

Fiddler抓包⼯具

Chrome浏览器

PostmanHTTP请求调试

WebstormJS调试

Notepad++⽂本编辑器

UltraCompare⽂本⽐较器

分析过程

准备⼯作

清除浏览器缓存、COOKIE

启⽤Fiddler的抓包功能

打开⼀个爱奇艺视频⽹页

等待视频加载开始

1.等待视频开始缓存,为了保证已经加载视频,建议等待⼴告结束之后再进⾏分析数据。

2.使⽤fiddler的过滤器,将⽆⽤的抓包数据过滤掉。(*.CSS|*.*(图⽚类))

【图0.1】

分析数据

1、筛选视频流数据项

可以通过以下两点筛选出视频数据流项

表头说明

Body数据长度较长的项

Content-Typeapplication/octet-stream-⽂件流格式的⼀般类型

通过以上⽅法可以找到第121项(如下图)

【图1.1】

可以如下图右键保存响应数据来查看所对应项是否是所要的视频数据项

【图1.2】

事实得到了只是⼀个⼴告视频

既然这⼀项不是⽬标项,那么继续往下寻找。

可以得到下图的第382项。

【图1.3】

----------后⾯你会发现第337项是视频资源的⽂件头。

同样地保存视频⽂件,检查下是否是所需的视频⽂件。

结果是视频⽂件显⽰损坏⽆法播放。

这个时候注意你不应该就将此项排除掉,因为

任何未被证伪的论点都不应该被确定是错误的。

本着这个说法,所以我选择跳过这⼀项,⽽不是排除掉它。

接着往下⾛,发现并没有能够播放并且是所需的⽂件流数据。

所以我决定往回⾛,找会那⼀不能播放的⼀项进⾏更深⼀步的分析。

相信使⽤过视频解析⼯具的都知道很多视频⽹站都会将视频数据切⽚,那么有没有可能是由于切⽚的原因造成了视频不能被播放。

当你确信视频⽂件是被切⽚了的,你就可以忽略以下列表的解释

为了证明⽂件确实被切⽚了,那么可以通过以下⽅式来证明视频确实切⽚了。

这⼀次不再使⽤视频播放器来进⾏播放⽂件流,⽽是通过⼆进制查看器来查看数据。

通过查看第382项的响应数据发现,此⽂件流数据并没有⽂件头。[^1]

可以推测的是该⽂件头存在于某⼀项中。

找到这⼀项,然后使⽤⼆进制查看器查看其⽂件流数据的数据,查看其是否是视频⽂件的⽂件头。

既然如此那么,那么既然怀疑视频是被切⽚了的,那么就找同类URL。

点击打开Fiddler的第382项,观察其请求头(RequestHeaders)。

寻找⽐较独特的⼀字符串。并使⽤Fiddler的搜索⼯具进⾏搜索。[^2]

【图1.4】

GET/r//videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=153

domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_00000000&qd_p=7908d205&qd_src=00000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a3

HTTP/1.1

既然是独特的字符串,那么下⾯这⼀串就很有特点611f0244cfe1a64d165b2f630be2e9fc

进⾏搜索如下图操作

【图1.5】

搜索结果是图2.3,很多的同类项(⽂件流数据格式),然后你找最前的⼀项。会发现就我前⾯说的那样第337项。

之后你可以使⽤⼆进制查看器来查看这⼀项是否是⽂件头。

到⽬前为⽌我们已经找到了视频项了,这已经⾜够了吗?

当然不,我们要的不仅仅是这⼀视频⽂件,⽽是知道为什么浏览器能知道并且找到这视频⽂件流。既然如此如果我们要得到这视频⽂件流,我们必须先要知道这⼀串请求头。所以下⾯的⼯作就是要构造请求头了。

2、构造视频项请求头

以上筛选的视频项请求头如下

GET/r//videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=153

domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_00000000&qd_p=7908d205&qd_src=00000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a3

HTTP/1.1

那么先从最后⼀层路径开始构造

进⼊第⼀层构造

我们将以下构造称为构造①

611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&

domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_00000000&qd_p=7908d205&qd_src=00000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a3

既然是要构造他那么肯定是要知道这⼀串字符到底是哪⾥得到的,或者说是怎么得到的啦,当然我们不能直接去搜索这⼀整串字符,既然这样,不如先从特殊的字符串开始。

(其实这⼀部分上⾯已经做了,也就是搜索611f0244cfe1a64d165b2f630be2e9fc)

那么就找第⼀出现这个字符串的这⼀项,(注意前⾯说的第⼀项和这⾥的第⼀项不⼀样,前⾯的第⼀项是⽂件流形式的第⼀项)

结果如下图

结果如下图

【图2.1】

点开它,查看这⼀字符串出现在请求数据还是响应数据。

你可以通过以下⽅式查找

【图2.2】

【图2.3】

【图2.4】

既然发现了第⼀次出现的字符串在这个地⽅,那么你就必须要知道这个请求链接才能知道这⼀字符串,所以现在是进⾏了下⼀层的构造。

挂起第⼀层构造

所以我们先挂起构造①。

进⼊第⼆层构造

进⾏如下请求头构造②,

GET

/jp/dash?

tvid=1294428000&bid=300&vid=5e54f1fec36034f67521abf755dd3f93&src=00000000&vt=0&rs=1&uid=&ori=pcw&ps=0&tm=01&qd_v=1&k_uid=836c674bfa7e7387a323d314bfb4

HTTP/1.1

整理键和值如下表格

indexkeyvalue

1tvid1294428000

2bid300

3vid5e54f1fec36034f67521abf755dd3f93

4src00000000

5vt0

6rs1

7uid

8oripcw

9ps0

10tm01

11qd_v1

12k_uid836c674bfa7e7387a323d314bfb4a875

13pt0

14d0

15s

17lid

18cf

19ct

20authKey4c31a25989ea7e678b670125e6ee5acf

21k_tag1

22ost0

23ppt0

24dfp

25localezh_cn

26prio%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D

27pck

28k_err_retries0

29k_ft88

29bop%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D

30callbackQ838114a04d5d4d3adb265513f3244a36

31ut0

32vfa07fc56691bd8558b5e9f23e9119b36a

同样的也可以寻找⽐较“特殊”的字符串,这⼀次我们要先找authKey这⼀参数,因为通过英⽂auth-key可以⼤概明⽩这是⼀个加密密钥。

所以,可以搜索autuKey,为什么不是后⾯的值4c31a25989ea7e678b670125e6ee5acf呢?因为既然是密钥,有怎么会是明⽂呢?如果你还是不相信,可以尝试搜索⼀下。

【图2.5】

【图2.6】

第12项是⼀个JS脚本⽂件,所以推测autuKey的值是通过脚本⽣成的,所以我们需要找到⽣成这⼀密钥的原理。

(以下是这⼀项的JS代码,搜索autuKey如下位置)

【图2.7】

回头看⼀下上⾯的表格,然后对⽐⼀下这些参数是不是很眼熟呢?⼤部分的参数都已经给出来了。

⽽我们要找的4401⾏的authKey:n(n("")+I+A)

所以我们可以分析n(n("")+I+A)返回的值,就能知道authKey的值了。

可不可以直接去分析JS呢?答案是当然可以的,但是要知道这不仅仅是时间的问题,当你分析压缩了的函数变量名的时候,你就该头疼了。

所以我们使⽤⾕歌的调试⼯具去分析。

下图底部的{}可以对代码进⾏格式化,这样分析起来会轻松点。

【图2.8】

【图2.8】

搜索找到authKey,然后在此处下断点5420⾏,如下图。

(如果你能够顾及的话,你可以同时分析多个参数。然后你要刷新页⾯(可以直接按F5刷新),让他停在断点处。)

【图2.9】

刷新后停在e处,你也可以直接让指针触碰函数n,然后你就能看到

【图2.10】

点击上⾯的链接进去看这个函数

【图2.11】

看来这个n是调⽤了⼀串这些函数返回的结果。u(o(c(e),*g))继续往前⾯找函数c(),触碰停留或者单步执⾏,进去得到如下图

【图2.12】

看来函数c是到底了(也就是说没有再往下调⽤的⾃定义函数了)

然后是函数o,其实往前看就能找到函数o了。

【图2.13】

然后到函数u,在图2.12就能知道函数u

⽬前为⽌了解了authKey:n(n("")+I+A)中的函数n。

那么接下来就要知道变量I和A的值了

【图2.14】

看参数名字tm⼤概可以知道这是⼀个时间戳,⽽且停留在I也发现

【图2.15】

所以这确实是⼀个时间戳,当然也会返回去查看给I赋值的那⼀部分代码。

由tvid:A可以得A就是参数tvid的值。

我们先返回去fiddler看下这个tvid在前⾯的项中有没有提到过。(当然也可以分析⽣成A的那⼀部分代码,但是如果能够直接得到的就不要傻乎乎的去分析代码了)

通过请求头,也就是构造②中的tvid项的值去搜索。

【图2.16】

【图2.17】

【图2.18】

所以我们得到了tvid的值

同样的,我们要知道tvid的值就要知道其请求头,很⾼兴的发现这⼀个请求头就是我们的播放的爱奇艺视频的地址,所以这个tvid是⽩送的,既然如此接着往下构造其他参数。

【图2.19】

下⼀步应该分析k_uid=836c674bfa7e7387a323d314bfb4a875

既然这⾥的参数和我们的构造②需求很相像,那么在进⾏下⼀步之前不如先看⼀下还缺什么吧。

【图2.20】

通过对⽐发现,如上图的嘴边标注有蓝点的五个参数是缺少的。

上⾯哪⼀些已经列出来的参数,同理可以通过分析JS或者搜索得到,为了减少篇幅,所以不再分析,⽽把重点放在那五个没有在这上⾯的参数上。

第⼀个:k_ft1=549755813888

⾸先要搜索⼀下值有没有在fiddler之前项中出现过,结果是没有找到。

所以我们只能去搜索k_ft1,结果如下图

【图2.21】

【图2.22】

【图2.23】

看到这⾥e.k_ft1=1(),这⾥,getFT1是没有经过压缩的,所以你不⼀定遇到参数就马上⽤⾕歌浏览器的开发者⼯具取调试他,在这种情况下你可以在notepad++⾥⾯看⼀下,找⼀下这个函数。

【图2.24】

【图2.25】

【图2.26】

第⼆个参数:bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D

同样的⽅法,先搜索值,但是注意的是这⾥⾯的参数值是通过urlencode的,所以先解码再搜索。

可以使⽤fiddler⾥⾯的textwizard⼯具来解码

【图2.27】

发现并没有这个,但是你可以搜索⾥⾯的version或者dfp,为什么呢?因为这很有可能是类似的JS⽚段。

{‘version’:n,‘dfp’:}

,我建议搜索dfp。但是说道理,我们也可以直接搜索参数名bop⽽不纠结于参数值。

然后有意思的是,我们想太多了,发现其实都在下⾯如图这⾥。

【图2.28】

所以上图能找到前⾯的⼏个参数的依据了。

那么就剩下的callback和vf了

callback可以使⽤同样的⽅法即使⽤⾕歌浏览器的开发者⼯具调试⼀下,看⼀下什么时候获得了callback。

下图是vf的

【图2.29】

所以到⽬前为⽌,完成了第⼆层构造,也就是构造②。

到现在,我们已经构造出来了

GET

/jp/dash?

tvid=1294428000&bid=300&vid=5e54f1fec36034f67521abf755dd3f93&src=00000000&vt=0&rs=1&uid=&ori=pcw&ps=0&tm=01&qd_v=1&k_uid=836c674bfa7e7387a323d314bfb4

HTTP/1.1

结束第⼆层构造

继续第⼀层构造

GET/r//videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=153

domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_00000000&qd_p=7908d205&qd_src=00000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a3

HTTP/1.1

通过构造第⼆层请求头,我们得到了字符串611f0244cfe1a64d165b2f630be2e9fc和其响应中剩余的数据

【图2.30】

⽽要知道的是,我们的⽬标就是构造⼀的请求头,⽽构造⼆只是为了寻找字符串611f0244cfe1a64d165b2f630be2e9fc。

现在回过头来发现第⼆层的构造不仅得到了字符串611f0244cfe1a64d165b2f630be2e9fc,还得到了第⼀层构造的很多参数。

⽐较⼀下

【图2.31】

通过对⽐发现还确实缺了不少。不如先从key开始找

key=0433de19d0c1b75057f6fc64c676e6ded

寻找0433de19d0c1b75057f6fc64c676e6ded,得到下图

【图2.32】

【图2.33】

下⾯是第⼀层构造

GET/r//videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=153

domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_00000000&qd_p=7908d205&qd_src=00000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a3

HTTP/1.1

发现这简直就是了好吧,第⼀层构造的请求头的所需的构造就在这⾥⾯(对⽐图2.33和第⼀层请求头)

所以我们需要知道得到这段数据的请求头,也就是构造如下请求头,称为构造③

GET/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?qd_tvid=1294428000&qd_vipres=0&qd_index=1&qd_aid=220327201&qd_stert=0&qd_scc=ec9c19fe1c7863a46bd3245b238c2745&

HTTP/1.1

我们⼜发现了,这个请求头跟第⼀层构造很相像,想必是孪⽣兄弟。

如下图

【图2.34】

所以,事实上,如下⾯⼀段是第三层构造⽐第⼀层要多的数据

&cross-domain=1&qyid=836c674bfa7e7387a323d314bfb4a875&qypid=1294428000_00000000&qypid=1294428000_00000000&rn=29&pv=0.1&cross-domain=1

结束第⼀层构造

结束分析

简短说明

接下来你可以⼀个参数⼀个参数的找依据,但是有时候这是不必要的,你可以通过在不同的爱奇艺视频⽹页请求抓包,把⼀些不变的量你就当然是常量就⾏了。当然这也有弊端:⽐如说这样你就⽆法了解更深⼀层的含

接下来的⼏个参数我不需要讲,因为这个前⾯的⼀些参数值有重复。

所以后⾯就⼤概简单的讲⼀下如何验证你构造出来的结果对不对。你需要如下软件

下⾯软件可以帮助你运⾏js脚本,这样你就能运⾏上⾯的函数得到加密结果。

【图2.35】

然后你可以使⽤postman可以帮助你提交请求数据

【图2.36】

⾄于这些软件如何使⽤我就不讲了。(如有需要⾃⼰可以去⽹上查教程资料什么的)

参考和说明

参考和说明

本⽂⾸次是在吾爱论坛发布点这,经过两个⼩时的重新修改整理重新发表在这⾥。

本⽂章仅⽤于技术交流。

更多推荐

爱奇艺播放器官方