warning 内容已过时
内容具有时效性,仅供学习参考,作者无义务负责内容更新。
0.前言
本文仅用于技术交流,未经允许严禁转发!若有侵权请联系删除!
众所周知某鹅通是知识付费平台,该平台会对用户上传的资料进行加密避免被下载传播。
俗话说没有绝对的安全,本文就针对于视频下载需求进行技术分析研究。
文章中出现的图片均为本人创建的试用店铺,为了避免快速盒打击,已对相关个人信息打码脱敏处理
1.获取视频链接
首先需要找到店铺的H5链接,即适配手机的网页端。如果是PC版的,可复制到移动端打开链接再复制到电脑浏览器上。
H5链接好处是开浏览器F12可以看到开发人员会把调试日志给放出来,不知道是忘记清除了还是以为就只有移动端用户访问,但这样有利于我们追踪相关函数的执行。
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677745667-image-1024x708.png](https://doupoa.site/wp-content/uploads/2023/03/1677745667-image-1024x708.png)
可以看到本来需要我们解码的blob链接,在控制台就帮我们解码出来了。
如果后续官方清除了这些调试,可根据下图获取blob链接,blob解码参考其他文章自行操作。
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677747020-image-1024x503.png](https://doupoa.site/wp-content/uploads/2023/03/1677747020-image-1024x503.png)
2.解析m3u8文件
上述图中可以直接获取m3u8的地址,我们可以点击将文件下载下来
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677747842-image-1024x257.png](https://doupoa.site/wp-content/uploads/2023/03/1677747842-image-1024x257.png)
可以发现视频片段使用了AES加密,下面还有IV偏移值,可以推断下加密方式是AES-CBC。第二个框就是密钥的获取链接。但如果访问这条链接,会提示缺少uid。
那么我们可以在浏览器开发工具开启网络日志记录,刷新下网页,等视频加载完之后将密钥的链接复制到搜索框。这样就可以直接得到正确的链接及uid了:
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677748396-image.png](https://doupoa.site/wp-content/uploads/2023/03/1677748396-image.png)
3.数据获取
为了更加方便的获取更多有用的数据,我们需要对这条请求的发起源进行追踪
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677751651-image.png](https://doupoa.site/wp-content/uploads/2023/03/1677751651-image.png)
点击后将会追踪到链接的发送操作
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677752109-1677752094525.png](https://doupoa.site/wp-content/uploads/2023/03/1677752109-1677752094525.png)
完成后再次刷新,前往控制台已经输出了关键网络请求。如下图所示。
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677752796-image.png](https://doupoa.site/wp-content/uploads/2023/03/1677752796-image.png)
可以看到请求密钥链接确实返回了16字节的密钥,但如果根据密钥去解密ts视频,视频依然会无法播放。
根据网络大神(某鹅通m3u8视频JS获取解密Key的过程分析 – 52pojie)对网页深入研究,发现平台对密钥用用户ID进行了混淆,解密方法很简单,即使用用户ID对key进行异或处理。
继续看控制台日志后续请求对ts视频片段进行了获取,这样又可以获得ts视频片段的网址
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677754018-image-1024x649.png](https://doupoa.site/wp-content/uploads/2023/03/1677754018-image-1024x649.png)
关于UserID,在控制台日志一开始就给你打印了出来。
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677754900-image.png](https://doupoa.site/wp-content/uploads/2023/03/1677754900-image.png)
即使没有打印出来,平台也贴心的放置到window对象下的全局变量中。(未登录用户就是anonymous开头)
![xiaoetech - 某鹅通m3u8视频下载解决方案 https://doupoa.site/wp-content/uploads/2023/03/1677754807-image.png](https://doupoa.site/wp-content/uploads/2023/03/1677754807-image.png)
4.编写脚本
到这里我们来统计下我们获取到了哪些数据:
- 正确的AES-KEY链接
- AES-KEY的解密方式
- AES-KEY解密所需的UserID
- ts视频的链接
- 以及包含所有ts视频链接数据的m3u8文件
根据以上数据我们就可以开始对视频进行下载了
脚本下载的视频均为ts视频片段,下载完成后需要对视频片段进行合并。相关方法请自行在互联网上搜索“ts视频合并”
5.更多
鉴于本文特殊性,下载脚本已开源至Github。如果你喜欢或者帮助到了你,请给一颗小星星吧!
发表回复