doupoa
一个不甘落后的热血青年!
Ping通途说

xiaoetech - 某鹅通m3u8视频下载解决方案

warning 内容已过时
内容具有时效性,仅供学习参考,作者无义务负责内容更新。

0.前言

本文仅用于技术交流,未经允许严禁转发!若有侵权请联系删除!

众所周知某鹅通是知识付费平台,该平台会对用户上传的资料进行加密避免被下载传播。

俗话说没有绝对的安全,本文就针对于视频下载需求进行技术分析研究。

文章中出现的图片均为本人创建的试用店铺,为了避免快速盒打击,已对相关个人信息打码脱敏处理

1.获取视频链接

首先需要找到店铺的H5链接,即适配手机的网页端。如果是PC版的,可复制到移动端打开链接再复制到电脑浏览器上。

H5链接好处是开浏览器F12可以看到开发人员会把调试日志给放出来,不知道是忘记清除了还是以为就只有移动端用户访问,但这样有利于我们追踪相关函数的执行。

https://doupoa.site/wp-content/uploads/2023/03/1677745667-image-1024x708.png

可以看到本来需要我们解码的blob链接,在控制台就帮我们解码出来了。

如果后续官方清除了这些调试,可根据下图获取blob链接,blob解码参考其他文章自行操作。

https://doupoa.site/wp-content/uploads/2023/03/1677747020-image-1024x503.png

2.解析m3u8文件

上述图中可以直接获取m3u8的地址,我们可以点击将文件下载下来

https://doupoa.site/wp-content/uploads/2023/03/1677747842-image-1024x257.png
(*为数据脱敏)

可以发现视频片段使用了AES加密,下面还有IV偏移值,可以推断下加密方式是AES-CBC。第二个框就是密钥的获取链接。但如果访问这条链接,会提示缺少uid。

那么我们可以在浏览器开发工具开启网络日志记录,刷新下网页,等视频加载完之后将密钥的链接复制到搜索框。这样就可以直接得到正确的链接及uid了:

https://doupoa.site/wp-content/uploads/2023/03/1677748396-image.png

3.数据获取

为了更加方便的获取更多有用的数据,我们需要对这条请求的发起源进行追踪

https://doupoa.site/wp-content/uploads/2023/03/1677751651-image.png

点击后将会追踪到链接的发送操作

https://doupoa.site/wp-content/uploads/2023/03/1677752109-1677752094525.png

完成后再次刷新,前往控制台已经输出了关键网络请求。如下图所示。

https://doupoa.site/wp-content/uploads/2023/03/1677752796-image.png

可以看到请求密钥链接确实返回了16字节的密钥,但如果根据密钥去解密ts视频,视频依然会无法播放。

根据网络大神(某鹅通m3u8视频JS获取解密Key的过程分析 - 52pojie)对网页深入研究,发现平台对密钥用用户ID进行了混淆,解密方法很简单,即使用用户ID对key进行异或处理。

继续看控制台日志后续请求对ts视频片段进行了获取,这样又可以获得ts视频片段的网址

https://doupoa.site/wp-content/uploads/2023/03/1677754018-image-1024x649.png

关于UserID,在控制台日志一开始就给你打印了出来。

https://doupoa.site/wp-content/uploads/2023/03/1677754900-image.png

即使没有打印出来,平台也贴心的放置到window对象下的全局变量中。(未登录用户就是anonymous开头)

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。如果你喜欢或者帮助到了你,请给一颗小星星吧!

赞赏

doupoa

文章作者

诶嘿

发表回复

textsms
account_circle
email

  • 万象皆春

    怎么联系您

    1 年前 回复
  • 1

    控制台输入
    open(
    document.querySelectorAll("video")[
    document.querySelectorAll("video").length == 1 ? 0 : 1
    ].src
    );
    就可以获得blob链接,
    话说blob解码怎么弄?

    1 年前 回复
    • doupoa博主

      @1: 其实这一步可以忽略,直接在Network模块筛选后续请求的m3u8地址即可。

      1 年前
  • hi

    填入数据 之后 还是不能下载

    2 年前 回复
  • 1

    这个脚本怎么用呀,我看到是一串代码

    2 年前 回复
    • doupoa博主

      @1: 安装好python环境及依赖,打开脚本填入必要数据运行就可以了

      2 年前

Ping通途说

xiaoetech - 某鹅通m3u8视频下载解决方案
warning 内容已过时内容具有时效性,仅供学习参考,作者无义务负责内容更新。 0.前言 本文仅用于技术交流,未经允许严禁转发!若有侵权请联系删除! 众所周知某鹅通是知识付费平…
扫描二维码继续阅读
2023-03-02

Optimized by WPJAM Basic