目录
前言:
一切的起因:因为某个同学在某斯上面的会员快要过期了,想把视频下载到本地观看。
我想这还不简单?愉快的接下了任务,接下来,我想我是笑不出来了,但是走过来还是值得。
求助插件
You-Get
会Python的应该都听说过
you-get
吧,就是支持大多数视频的下载
这里我直接放上开源地址:https://github.com/soimort/you-get
B站的视频你想下载下来直接用这个多线程跑就行了。
Flash Video Downloader
一个在
Chrome
上的插件,不用说了没用。
Video DownloadHelper
一个在Firefox上的插件,第一次还检测到了
然后刷新页面,哦豁没了,逐渐开始变态起来~
分析网络请求
第一步
- 打开F12
- 刷新network
- 默认观察的是请求的先后顺序
我选择大小之后,随着视频的播放,逐渐产生新的文件
因为是大小倒序,0.ts,1.ts逐渐出现
那说明了这个视频的播放就是一个个这样的ts组成的
第二步
我接着去请教某位小透明,在他的带领下我明白了,可以找到一个m3u8的文件
这个文件的含义相当于整个视频的总指挥
他里面集合了所有的ts,以及如何加密,密钥来自哪里
那么如何找呢?
第三步
因为他这个涉及登录的,所以肯定会携带token等认证信息,注意留意这个
其次加载一个网页,首先会加载css,js,图片等先将整个网站的样子加载出来
随后就是js的渲染解码的问题,这个时候就会发出请求m3u8
所以根据waterfall来排序,拉到中间,就能发现上图。
进而他在里面说明了是AES-128加密
然后密钥对应的地址是URI中的
当然你直接访问肯定是不行的,自己造包又太麻烦
而网页能播放视频,说明密钥肯定也下发了
然后网站的js根据key和m3u8请求服务器并解密,前端就能观看到视频了
这里有个需要注意的地方,我下面单独说一下
来个小总结
网站是怎么播放视频的呢:
- 他是拆分成30秒一个的ts文件
- 网站的js会去读取请求来的m3u8文件
- 进而js会根据key解密
- 直接请求m3u8和key是会被服务器拒绝的
综上:
我们要将m3u8和key拉取到本地
用本地的服务器给我们的工具给可以直接访问到的链接
然后我们就能得到我们想要的视频了
如何处理加密key
- 使用火狐浏览器
这点值得谷歌浏览器学习哈,自动转码
- 使用hackbar
有的火狐浏览器是不会自动转码的,如果只存在一行,可以直接复制
到hackbar里面的base64_encode拿到
- 如果存在换行怎么办?
- burpsuit抓包 找到这个包的response到解码器里面解
- 右键改包的curl命令,到控制台里面发包处理返回回来的二进制(没试过~)
- 最后生成key文件
你直接复制是没有用的,二进制当成字符串用~
如下你会得到对应的key
file_put_contents('./key', base64_decode('DQoNCtL+6IOzUNCrR/OBXiRkDek='));
开始转视频
m3u8dl工具
开源地址:https://github.com/nilaoda/N_m3u8DL-CLI
但是这个在这里不是特别好使
youtu-dl 工具
开源地址 : https://github.com/ytdl-org/youtube-dl
最后直接搞定!
ffmpeg 根本
下载地址:https://www.gyan.dev/ffmpeg/builds/
上面的建议都要加入环境变量
而我就比较懒
直接丢到site-pakage
里面了事
注意:ffmpeg有很多阉割版,建议用上面的下载地址下载完成版
地址
还记得前面我们说过的,网站上的地址是要token认证的
而软件的使用是直接给个链接
加上有几点我们可以利用
- m3u8文件是没有加密的
- ts文件是直接可以拿下来的
所以我们可以将m3u8拿到本地,给本地连接
这里直接提供几种方式:
- XAMPP,PHPstudy等本地开个服务器,丢到里面
- python -m http.server
用python搭建一个临时虚拟的服务器
给连接参考下:
https://www.cnblogs.com/shenshangzz/p/8318143.html
https://juejin.cn/s/python%20http%20server%E6%95%99%E7%A8%8B
https://www.pythonf.cn/read/4681
- 白嫖图床
咳咳咳,小透明大佬的百宝箱中的东西
https://github.com/TransparentLC/free-img
这是个好玩意,大厂们也不差这点
最后一步
# 当前文件夹下打开cmd
$ youtu-dl http://127.0.0.1:8112/index.m3u8
上传到云盘
搞定!