小X通m3u8视频流AES加密分析

这篇具有很好参考价值的文章主要介绍了小X通m3u8视频流AES加密分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有空研究了下小X通的视频协议,下面记录下研究过程

首先我们要了解下m3u8是什么

m3u8基础

首先我们需要了解什么时HLS,所谓HLS(HTTP Live Streaming)是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。而m3u8是HLS协议的一部分,但是在直播,视频网站等用处很广泛。

HLS协议规定,视频的封装格式是TS(Transport Stream),除了TS视频文件本身,还定义了用来控制播放的M3U8文件(文本文件)。HLS协议的工作原理是把整个视频流分割成一个个小的TS格式视频文件来传输,在开始一个流媒体会话时,客户端会先下载一个包含TS文件URL地址的M3U8文件(相当于一个播放列表),给客户端用于下载TS文件。这样可以让用户更方便的选择视频节点播放,给用户更好的体验,其次提供了加密方式,可以更好的保护视频不被窃取。

下面是m3u8的一个基本字段

#EXTM3U:M3U8文件头,必须放在第一行。
EXT-X-MEDIA-SEQUENCE :第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0。
#EXT-X-TARGETDURATION:每个分片TS的最大的时长; #EXT-X-TARGETDURATION:10 ,表示每个分片的最大时长是10秒。
#EXT-X-ALLOW-CACHE:是否允许cache,#EXT-X-ALLOW-CACHE:YES 、#EXT-X-ALLOW-CACHE:NO,默认情况下是YES。
#EXT-X-ENDLIST:M3U8文件结束符。
#EXTINF:extra info,分片TS的信息,如时长,带宽等;一般情况下是 #EXTINF:<duration>,[<title>] 后面可以跟其他的信息,逗号之前是当前分片的TS时长。分片时长要小于 #EXT-X-TARGETDURATION 定义的值。
#EXT-X-VERSION:M3U8版本号。
#EXT-X-DISCONTINUITY:该标签表明其前一个切片与下一个切片之间存在中断。
#EXT-X-PLAYLIST-TYPE :表明流媒体类型。
#EXT-X-KEY:是否加密解析。例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx" 加密算法是AES-128,密钥通过请求 https://example.com/video.key?token=xxx 来获取,密钥请求回来以后存储在本地,并用于解密后续下载的TS视频文件。

请求流程

  1. 客户端发起对m3u8的请求,服务器在校验完成后会下载m3u8文件到本地。

  1. 客户端解析m3u8文件,在#EXT-X-KEY中找到密钥key地址,并访问拿到加密的密钥key。

  1. 客户端解析m3u8文件拿到分割文件的大小和对应ts文件地址,并访问拿到视频流。

  1. 客户端使用拿到的key地址和#EXT-X-KEY中对应的加密算法对视频流进行解密,播放视频。

所以我们看到这里真正重要的就几个部分,首先一定要找到m3u8文件的链接地址,然后从中找到#EXTINF和#EXT-X-KEY两个字段

  • #EXTIN字段中我们可以拿到ts协议流的分段大小信息,和视频流下载链接信息,并且可以通过start和end参数得到视频的最终大小

  • #EXT-X-KEY字段中我们可以拿到ts视频是否加密,如果加密可以拿到对应的加密方式和加密key地址。

  • 最后用得到的key和VI对ts文件使用openssl解密即可。

实战分析

了解了HLS的加密过程下面我们对小X通进行一个分析,首先我们通过抓包拿到了这个m3u8的链接地址,前面做了很多校验,但是不属于这个视频加解密分析范畴,这里不做分析。拿到以后我们可以对字段进行分析。如下图:

小X通m3u8视频流AES加密分析

下面对m3u8进行分析,我们可以得到如下信息:

  • #EXTIN中我们可以发现文件的分割大小,然后到最后可以看到文件的最终大小为141809727

v.f421220_0.ts?start=0&end=603679&type=mpegts
v.f421220_0.ts?start=141595968&end=141809727&type=mpegts
  • #EXT-X-KEY中我们可以发现文件的加密方式为AES-128的加密方式,对应得到下载key链接,并知道加密IV为0.

首先访问key地址,发现报错,提示缺少uid。

小X通m3u8视频流AES加密分析

可以看到这里需要校验对应的uid,js代码中也可以看到,那通过自有验证抓取uid。

小X通m3u8视频流AES加密分析

通过得到的uid信息得到对应的key文件

小X通m3u8视频流AES加密分析

然后拼接拿到整个是视频流

https://encrypt-k-vod.xet.tech/*****/****/drm/v.f421220_0.ts?start=0&end=141809727&type=mpegts&sign=*****&t=***&us=***

使用openssl解密

openssl aes-128-cbc -d -in 001.ts -out 001_dec.ts  -iv 00000000000000000000000000000000 -K ********************************
小X通m3u8视频流AES加密分析

但是发现报错,解密失败。哈哈我猜也不会这么简单

报错分析

既然报错了,那由可能是这个几个地方存在问题

  1. 选择的加密工具openssl工具解密出错

  1. 加密所用的key或IV出错

  1. 视频原始文件出错

具体分析尝试三个点可以发现

  1. 我尝试了自己使用AES加密文件后使用openssl解密,发现没有问题,证明不是openssl的问题

  1. 视频文件在页面可以播放,证明不是视频的问题

那么问题就出在key或iv上了,继续分析。如果我是写系统的人,为了加密视频通常会选择如下方式:

  1. 对key的二次加密,再来解密视频

  1. 实现一个自己的加密解密算法,来解密视频

逻辑推导一下可以看到对key的二次加密最简单快速,且最终可以调用公共的解密库执行,如果自己实现难度高而且bug多,估计多数不会选择。

那么我们从二次解密出发,首先再js中找关键字encrypted关键字,找到如下关键点:

小X通m3u8视频流AES加密分析

替换js并打印log尽然发现数组数据正好16位,可能是key文件

小X通m3u8视频流AES加密分析

但是抓到的是十进制数据,转换为十六进制

printf '%x\n' 84 43 *******

然后用得到的十六进制key进行解密操作

openssl aes-128-cbc -d -in uu.ts -out uu_out.ts -K ********************* -iv 00000000000000000000000000000000

发现并无报错,证明解密成功

小X通m3u8视频流AES加密分析

播放也没有问题,视频解密流程搞定。

小X通m3u8视频流AES加密分析

为了避免不必要的麻烦,对key等关键部分做了处理,本文只做研究分析,不想带来不必要的麻烦。

小结

最后来个小结,对整个流程分析下来还是很顺畅,难点也不多,真正难的算是对js的分析,js已经做了混淆,很多代码中找到对应的解密地址还是很麻烦,花了不少时间。

最后对视频加防下载的一些思考

  1. 目前大部分视频网站都采用的是HLS来进行视频流的获取和播放,因为首先对应的资源很丰富,各个云平台厂商均有对应的接口,方便开发者快速的搭建,但是对应的加密方式还是由很多问题

  1. 首先是加密方式,有些小厂商也不会对视频进行加密处理,直接可以进行下载播放,这种破解很简单就不提了。

  1. 有些选择了对m3u8文件进行加密,但是个人感觉这个和对key二次加密是一样的,均可以在js中找到对应的解密方法和最终的key或m3u8文件,这个只是时间问题,毕竟js文件在客户端,服务器不可控。

  1. 即便解密对应的key很费时间,但是如果采用对浏览器hook可以解决所有的加密方法,毕竟最终还是要在网页进行播放,只要抓取最终的数据流并dump就可以拿到最终解密完成的视频。

  1. 个人感觉加水印等防止小白录屏是可以,但是对懂一点技术的其实整个破解只是时间和熟练问题,我测试有些监控是自己通过c实现了一个加密解密算法,对视频进行加密保存,解密读取流程,虽然很安全,但是对.dll进行逆向还是可以找到对应的key和加密算法,只是时间问题。

  1. 说了这么多感觉什么都不安全,都可以被破解,事实也确实是这样,但是我们可以经常更新加密算法和加密key,来增加破解者的时间成本,也是可行的,让攻击者自己放弃,哈哈差不多就这样。文章来源地址https://www.toymoban.com/news/detail-447111.html

到了这里,关于小X通m3u8视频流AES加密分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端实现H265编码的m3u8视频流播放

    前言 视频监控是智慧城市、智慧园区等WebGIS类系统中最为常见的硬件对接设备,最常用的监控视频流格式为m3u8格式,但是m3u8格式通常都是h.265编码格式的,我搜遍了几乎所有前端视频播放插件,几乎普通的播放器插件都不支持h.265格式的视频编码。本文就带领大家了解H265视

    2024年01月18日
    浏览(36)
  • 关于vue播放flv,m3u8视频流(监控)的方法

    前文: 随着前端大屏页面的逐渐壮大,客户的需求也越来越多,大屏上面展示的事物也越来越丰     富。其中实时播放监控的需求逐步增加,视频流格式也是有很多种,用到最多的.flv、.m3u8。 一、 JessibucaPlayer插件用来播放flv流 1.首先是先把文件放在vue项目的public下面 2.在

    2023年04月15日
    浏览(73)
  • 在AWS Lambda中使用FFmpeg处理m3u8视频流

    在直播里领域,我们经常需要对视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文章,我们将以视频流截图为例,讲解如何在AWS Lambda中对m3u8视频流进行截图。因为Lambda是无服务架构,其本地存储是不可靠的,于是最后我们需要将截图文件上传S3桶。 这块的方案可以见

    2024年02月03日
    浏览(46)
  • ffmpeg + nginx 实现rtsp视频流转m3u8视频流,转码推流(linux)

    FFmpeg即是一款音视频编解码工具,同时也是一组音视频编码开发套件,作为编码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种多彩格式转换、多种采样率转换、多种码率

    2024年02月09日
    浏览(51)
  • Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流

    Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流: Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流_霸道流氓气质的博客-CSDN博客 上面讲了Nginx-http-flv-module+flv.js进行流媒体服务器搭建和前端播放视频流的过

    2024年02月01日
    浏览(40)
  • python 爬虫 m3u8 视频文件 加密解密 整合mp4

    完整代码如下: 1. 认识m3u8文件 m3u8 的结构详细分析可以看这个链接m3u8 文件格式详解 - 简书 (jianshu.com),这里我们只简要介绍一下; 相信无论多小白都应该知道如何打开开发者模型解析得到下面的结果; 要注意的是,只有预览里面包含了 ts 信息的才算是我们需要的 m3u8 文件

    2024年02月20日
    浏览(29)
  • 抓取m3u8视频

    视频url:https://www.9meiju.cc/mohuankehuan/shandianxiadibaji/1-1.html 打开网址分析当前视频是由多个片段组成还是单独一个视频 如果是一个单独视频,则找到网址,直接下载即可,如果为多个片段的视频,则需要找到片段的文件进行处理,本案例以m3u8为例 找到m3u8文件后进行下载,下载

    2024年02月11日
    浏览(35)
  • CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议

    只有添加分发加速的域名才能使用HLS加密,同时也要做HTTPS证书添加,不然也会报错。 1、这是电脑端视频播放页面效果 2、这个手机端H5视频播放页面效果 3、在网站后台上传你的视频内容 4、上传完之后可以进行预览 5、在阿里云控制台设置就好自己的转码模板 将不转码设为

    2024年02月08日
    浏览(43)
  • Scrapy 爬取m3u8视频

    爬取ts文件样式 合成的MP4文件 视频地址: [在线播放我独自升级 第03集 - 高清资源](https://www.physkan.com/ph/175552-8-3.html) 这里任务目标很明确 就是找m3u8文件 打开浏览器 进入开发者模式F12 搜索m3u8文件 查看 响应内容含有ts文件 的m3u8文件 再次查看 标头地址 即可 https://leshiyuncdn

    2024年04月15日
    浏览(22)
  • uniapp m3u8格式视频加载

    uniapp一:mui-player:三方  h5 web app   uniapp 使用 mui-player 插件播放 m3u8/flv 视频流_翘翘红的博客-CSDN博客 uniapp 开发的h5项目,需要播放m3u8/flv后缀的视频,网上有很多视频插件,但是样式和效果不尽如人意,博主最后选择mui-player插件: 定制化稍微强一点以及有官方文档可以阅

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包