在线教育录播视频防下载安全测试 _EduSoho_HLS(m3u8)

2023-11-02

基于测试某录播课平台视频安全性的需求, 对平台上的免费视频进行安全测试,看看到底能否较好的防下载。

 

以下为几种常用的视频加密技术,我们这次的测试平台采用的是第二种,第三种方式主要依靠专用播放器来解决数据交到客户端的这一环的安全性,但是专用播放器带来了使用不便的兼容问题。

1、防盗链技术:这种严格来说,不属于视频加密,只是想办法防止视频被下载,只允许在线播放。但这种基本上来说属于防一般用户,很容易被绕过去。因为你只要让浏览器可以播放,别人就可以伪装自己是浏览器,拿到url,进行伪装浏览器的各种referer等信息,欺骗过防盗链系统,下载到视频。

2、HLS加密技术:也可以称之为m3u8切片加密,这种是目前H5时代广泛使用的技术,该加密本身是很安全的,基于AES加密算法。但有个致命的问题:别人很容易拿到秘钥进行解密。这种方式最大的优点是:几乎主流浏览器都支持,包括微信、qq等,打开就能播放,兼容性很好。缺点也很明显:

因为算法是公开的,并且如果不保护好秘钥文件,ffmpeg等命令行、很多工具软件,均可拿到秘钥对视频基本还原,如果只是采用单纯的HLS加密技术,可以说:极其不安全。幸好,近几年国内很多厂商在标准HLS加密的基础上,对m3u8文件中的秘钥等做了防盗处理,这种二者结合,效果就好很多。

3、视频文件内容采用私有算法真正逐帧加密:这种方式一般是基于不公开的算法,对视频文件、直播流、m3u8中的ts数据等,均可实现实时逐帧加密。但加密后的视频,需要专用特定播放器才可以播放。由于采用私有算法,因此其他播放器无法进行播放,增强了安全性。但也带来了一定不便利性,就是必须安装专用软件。不过这类技术就比较考验加密实力了,目前很多加密软件号称加密,但某宝等平台随便一搜,也有很多破解。因为,即使你用了专用播放器,但如果别人很容易逆向你的播放器,也就知道了加密算法,所以需要开发公司有多年深厚的研发实力才可以放心。

https://www.zhihu.com/question/24561177/answer/1191234975

 

   首先打开视频平台视频连接,打开浏览器调试窗口查看视频连接,可见是  EduSoho 气球云提供的播放方案,HLS 流媒体视频格式,使用 VLC 打开视频地址并不能直接播放,视频地址内容是加密的。

进一步查看 m3u8 文件内容可以看到,视频切片内容使用了 AES-128加密,解码需要 iv (偏移量),key (秘钥),m3u8 内 EXT-X-KEY,URL 记录了秘钥的获取路径,而打开此网址是需要 cookie 鉴定访问者身份的,且可以在平台后端控制用户的秘钥过期时间,到此为止,仍然还是安全。

 

 

 

接下来,进行进一步的测试,对于普通 HLS 格式视频,使用 ffmpeg 可以直接下载转为 mp4 格式,但是案例这种加密视频是不可以的,需要对下载下来的视频切片进行解码。

ffmpeg -i https://embed-fastly.wistia.com/deliveries/bde18e17ca5ff78ec940fc82c76ed6194f4f7886.m3u8 wistia.mp4

通过 m3u8 内获取到的 iv , 和秘钥尝试解码失败,说明 iv , key 秘钥保护变形过,并不能直接使用。

openssl aes-128-cbc -d -in fileSequence0.ts -out fileSequence0_decrypto.ts -nosalt -iv *** -K ***

秘钥已经下发给浏览器客户端,那么解密的工作一定是在浏览器内通过 Javascript 完成的,由于 Javascript 的透明性,这里的加密算法并不安全。

打开调试查看调用的 js 文件,可以看到有 气球云(EduSoho) 的播放器 SDK。

 

打开 js文件查看,是经过 webpack 打包过的,原文件的路径仍然可见,"/src/crypt/decrypter.js" 看起来就是解密算法所在。

 

定位到相关函数 ,可以看到是对秘钥进行过一系列的操作换出来的,对视频切片解码后操作 Dom 把播放内容推给播放器。

 

 

由于打包加密过的 js 代码,变量都被换过,调试起来非常困难,解读跟踪代码来获取解密算法的方式理论上可行,但是花费的时间很难预估,会让很多人知难而退,前端对秘钥的加密算法的目的基本也达到了。

继续进行下一步之前,我们注意到 气球云的播放器 SDK 的 js 文件未采用 https 加密传输,那也就意味着可以被劫持后 插入调试代码,破解将变得更加容易,如图,我们通过反向代理+hosts 文件修改的方式将目标 js 文件劫持到本地文件,插入调试代码。

 

现在最简单方式是直接获取解密后的切片内容,不理会解密过程。

从原代码可以看到视频内容的解密是在浏览器 ServiceWoker 内进行的, 这里并不能操作 dom 还不能很方便的将解密内容取出来。 

可以看到,解密后 ServiceWoker 通过 postMessage 发解密内容给主进程,我们接下来只有 添加监听器截取对应时间和内容。

并将解密的内容放到全局变量内 window._files 。

 

t.onWorkerMessage = function(e) {

    if (e.data.event=="hlsFragParsingData" && e.data.data.type == "pureData" ) {
		var _files = window.files || {}		
		_files[e.data.data.sn] = e.data.data.data;		
		window.files = _files		
		console.log('sn', e.data.data.sn,Object.keys(_files).length, Math.round(Object.keys(_files).length/6)+" mins");	
		window.sn = e.data.data.sn
	}
...
}

 最后使用 window.saveAs('xx.ts')  下载合并后的视频文件。

window.saveAs = (filename) => {
	  var blob = Object.values(window._files)
	  if (window.navigator.msSaveOrOpenBlob) {
	    navigator.msSaveBlob(blob, filename)
	  } else {
	    const link = document.createElement('a')
	    const body = document.querySelector('body')
		link.href = window.URL.createObjectURL(new Blob(blob, {type: "application/zip"}))\
	    link.download = filename

	    link.style.display = 'none'
	    body.appendChild(link)

	    link.click()
	    body.removeChild(link)
	    window.webkitURL.revokeObjectURL(link.href) 
	  }
	}

 可以看到,虽然视频最终下载了,但是需要一点的前提条件 比如 http 不安全协议,逆向加密算法的时间成本等。

视频保护问题的根本是总有那么一个环节你要将视频真实数据交给客户端,这个环节是平台控制的更多还是客户自己控制的更多,决定了效果。  强如 DRM 数字版权保护的方案,设置了很多限制条件比如播放时必须在线、解码是在专用硬件是解密的,但是数据总要给显示器的,所以仍然存在 hdmi、wifi投屏 的盗录方式。

安全是相对的, 目前能做的只能是增加破解者的成本。

 

 

改进前景:浏览器端加密 WebAssembly

WebAssembly(缩写WASM)是一种安全,便携,低级代码设计用于高效执行和紧凑表示的格式。

它的主要目标是使Web上的高性能应用,不需要针对网络的特定假设或提供特定的定制化的网络功能,因此它可以在其他环境中直接使用,也就是良好的跨平台特性。 WebAssembly是由W3C社区组开发的开放标准

 

《WebAssembly 在性能及加密场景的深度探索》

https://gmtc.infoq.cn/2019/shenzhen/presentation/2064?utm_source=infoq&utm_medium=arti&utm_campaign=8&utm_content=zhaoyang&utm_term=1108

WebAssembly在性能及加密场景的深度探索

https://cloud.tencent.com/developer/news/471800

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在线教育录播视频防下载安全测试 _EduSoho_HLS(m3u8) 的相关文章

  • ieee-explore/springer文献免费下载办法

    http ieeexplore ieee org document xxxxxxx 改为 http ieeexplore ieee org sci hub tw document xxxxxxx 即可免费下载 是哈萨克斯坦女黑客搞的 见下文
  • word无法显示图片的问题终于搞定!oh yeah!

    我的word中的图片只显示一个方框 这个问题困扰我有一段时间了 今天终于搞定 原因如下 Word中不能显示公式 问 在Word 2003中编辑好的公式无法显示 只显示为一个方框 该怎么办 答 Word把使用公式编辑器输入的公式作为图形处理
  • Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

    概述 本文介绍通过Nginx FFmpeg实现rtsp流转hls流 在WEB通过H5 video标签实现视频播放功能 此方法可用于网络摄像头RTSP视频流WEB端实时播放 一 FFmpeg Nginx转流hls 1 FFmpeg安装 官网
  • 王者荣耀 露娜 技巧-教学-总结

    文章目录 参考教程 技巧和个人理解 连招训练方法 出装顺序 赞同参考教程 节奏顺序 团战 个人遇到的坑 补充描述 参考教程 王者荣耀 国服榜一露娜深度教学 月下无限连 实战案例分析 哔哩哔哩 露娜教程很多 虎牙直播多 技巧和个人理解 连招训
  • 一天内时针和分针重叠的次数

    一天内时针和分针重叠的次数 这是一道谷歌面试题 答案是22次 分别是上午 12 00 1 05 2 11 3 16 4 22 5 27 6 33 7 38 8 44 9 49 10 55 下午12 00 1 05 2 11 3 16 4 2
  • How to delete local branches of GitExtension

    How to delete local branches of GitExtension Jin Qing s Column Dec 2021 GitExtension is a good tool After a long time of
  • 网站流量统计

    常使用web服务器的朋友大都了解 一般的web server有两部分日志 一是运行中的日志 它主要记录运行的一些信息 尤其是一些异常错误日志信息 二是访问日志信息 它记录的访问的时间 IP 访问的资料等相关信息 现在我来和大家介绍一下利用t
  • HLS 流传输库hls::stream

    流传输数据是一种数据传输形式 其中数据样本从第一个样本开始按顺序发送 流传输不需要地址管理 Vivado HLS 提供了 C 模板类 hls stream lt gt 用于对流传输数据结构进行建模 使用 hls stream lt gt 类
  • CSDN竞赛6期题解

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 总结 这次竞赛题目比较简单 没多大必要写题解 更多的还是给出自己的一些体会和建议吧 很多同学已经对比赛规则和编程体验给出了
  • git 删除右键菜单

    首先 我表示git默认的右键菜单很烦 太多项了 而我们平时用的最多的无非是一个Git Bash 删除msGit右键菜单 如果是windows 64位系统 cmd进入 C Program Files x86 Git git cheetah 目
  • HLS图像处理系列——肤色检测

    本博文采用Xilinx HLS 2014 4工具 实现一个肤色检测的模块 其中 本文重点是构建HLS图像处理函数 新建HLS工程的步骤 本博文不再详述 本工程新建之后 只添加了五个文件 如下图所示 其中 top cpp中的主函数最终会综合生
  • CISC RISC ARM MIPS区别与联系

    转载 文章有点老 不过还是有所收获 补充一句 国内那么多牛人研究处理器架构 要钱有钱 要人有人 ARM都能获得如此成就 为啥国产那么多CPU团队都不成功 其它类型的芯片也一样 大多都是买国外IP 个人理解 相关专利太少 也就是积累不足 无法
  • discuz 论坛配置 QQ/163 网易邮箱

    步骤 在 discuz 后台的 站长 邮件设置 里按如下配置 SMTP 服务器固定 163 网易填 ssl smtp 163 com QQ 邮箱则填 ssl smtp qq com 端口 465 验证 勾选 配置完成后 会进行测试验证 发信
  • 使用 Node JS 进行 HLS 流式传输

    我正在尝试使用 node js 流式传输 HLS 内容 但不知怎的 它不起作用 如果有人帮助我 那将会有很大的帮助 问题 尝试从 node js 提供 HLS 内容 不是直播 而是一组 ts 文件和 m3u8 播放列表 或者换句话说 VOD
  • 如何使用 FFmpeg 生成多分辨率 HLS 进行直播 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 请注意 SRS 支持为特定分辨率生成单独的 m3u8 文件 SRS 是否还支持为多种分辨率和比特率场景生成额外的主 m3u8 文件 所需的母版 m3u8 示例 EXTM3U EXT
  • swift 无法将 .m3u8 文件保存到图库

    我使用下面的方法下载我的视频并将其保存到图库 使用 mp4 可以正常工作 但是当更改为 m3u8 时 它总是失败 func downloadVideoLinkAndCreateAsset videoLink String fileName
  • AVPlayer 无法从本地文件播放 m3u8

    我正在尝试让 AVPlayer 播放本地文件的 m3u8 播放列表 我使用 Apple 的示例播放列表之一将其范围缩小为一个简单的测试用例 https tungsten aaplimg com VOD bipbop adv fmp4 exa
  • 解密使用 AES-128 加密的 M3U8 播放列表,无需 IV

    我目前正在构建一个用于下载 M3U8 播放列表的应用程序 但我遇到了一个问题 如果播放列表使用 AES 128 加密 例如有这样一行 EXT X KEY METHOD AES 128 URI https website com link k
  • Android 音频 m3u8 流 - 如何

    正如标题 如何在没有 vitamio 的情况下在 Android 上流式传输 m3u8 音频 在 Android 2 3 上 我发现某些应用程序可以传输我的链接像 VLC 或 aqua Player 但我无法设置 mMediaPlayer
  • 从 .ts 文件动态生成 .m3u8

    我有一个遵循此模式的 ts 文件段列表 http www someaddress com file 11223344 ts http www someaddress com file 11223345 ts http www someadd

随机推荐

  • 感知机算法(原始和对偶)——100%还原统计学习方法的python代码实现,每行都有注释,超清晰

    参考 统计学习方法 第二版 李航著 目录 一 感知机的定义 二 感知机模型 三 感知机学习策略 四 感知机学习算法 4 1感知机学习算法的原始形式 4 2 感知机学习算法的对偶形式 一 感知机的定义 假设输入空间 特征空间 是 输出空间是
  • [第五空间 2021]pklovecloud

  • VScode如何设置默认自动换行设置

    VScode安装完默认不能自动换行 文本超出显示时 需要拖动下面的滑块才能看到超出的部分 如图 看起来很不方便 自动换行 为了更方便看代码 我们可以设置自动换行显示 在菜单 查看 切换自动换行 选中 就可以自动换行了 或者直接按快捷键 AL
  • c++中的栈内存和堆内存的区别以及智能指针的使用

    栈内存和堆内存的区别 https www cnblogs com ChenZhongzhou p 5685537 html https blog csdn net qianyayun19921028 article details 8036
  • python如何实现前后端交互_笔记

    前端工程师的职责 1 UI重构 2 在正确的区域渲染出服务端的数据 毕竟 我们要构建一个大的web应用 必然不是普普通通的静态页面构成 下文将罗列前端工程师应该必备的同后端打交道的常用技能 1 服务端渲染 谈起服务端渲染 对于动态服务而言
  • 不均衡数据集采样2——BorderlineSMOTE算法(过采样)

    论文 Borderline SMOTE A New Over Sampling Method in Imbalanced Data Sets Learning https citeseerx ist psu edu viewdoc down
  • 高级JS(堆、栈、作用域、闭包、原型、this指向)

    一 变量的内存分配 基本数据类型 number string boolean undefined null symbol 引用数据类型 object array object function 基本数据类型 都是存放在栈内存中 栈内存空间大
  • 接口测试工具Postman(三)使用postman抓包捕获HTTP请求

    目录 一 捕获HTTP请求 二 代理 一 捕获HTTP请求 Postman提供了轻松查看和捕获应用程序中发送和接收的实际HTTP请求流量的工具 可以在Postman本机应用程序中使用内置代理进行抓包 1 postman内置代理 postma
  • python实现AI井字棋极大极小算法和Alpha-beta算法

    python实现AI井字棋极大极小算法和Alpha beta算法 程序设计思路 主要步骤和代码 对于两个算法流程图 运行结果 程序设计思路 大致思路 井字棋最后的结果无非就是玩家赢 电脑赢和平局三种结果 而最后的结果正对应这整棵棋盘生成树的
  • 辞职后的一些感想

    辞职了 不急着找工作 一直独立开发app 整天码UI取数据填数据 知识得不到沉淀 以前的blog都删了没什么意思 重新开始做个总结 也算个新启程吧
  • 87.el-table翻页后保存前一页所选并再次返回前一页时把数据勾选上

    1 首先给
  • 汇编基础知识

    一 汇编语法 1 GNU 汇编语法适用于所有的架构 并不是 ARM 独享的 GNU 汇编由一系列的语句组成 每行一条语句 每条语句有三个可选部分 如下 label instruction comment label 即标号 表示地址位置 有
  • Python面试数据库

    1 举常见的关系型数据库和非关系型都有那些 关系型 MySQL SQL Server Oracle Sybase DB2 非关系型 Redis MongodDB 2 MySQL常见数据库引擎及比较 InnoDB MyISAM NDB Mem
  • react基础详细介绍(消息订阅-发布机制、ajax请求、路由基础知识)

    一 消息订阅 发布机制 1 工具库 PubSubJS 2 下载 npm i pubsub js save 3 使用 import PubSub from pubsub js 引入 PubSub subscribe delete functi
  • 程序员护眼法

    第一节 按揉耳垂眼穴 脚趾抓地 用双手大拇指和食指的螺纹面捏住耳垂正中的眼穴 其余三指自然并拢弯曲 伴随音乐口令 用大拇 指和食指有节奏地揉捏穴位 同时用双脚全部脚趾做抓地运动 每拍一次 做四个八拍 第二节 按揉太阳穴 刮上眼眶 用双手大拇
  • Qt QComboBox QSS样式设置

    QComboBox 样式表可谓太丰富了 研究了一阵 总结出的记录 QComboBox整体样式 未下拉时 QComboBox的样式 QComboBox border radius 3px padding 1px 18px 1px 3px ba
  • JavaScript 面试题(核心基础类)

    面试题按类型来分 主要涉及到 技术 与 非技术 两大类 今天我们主要讨论的是 技术类 在这个大类别下涉及到的子类别有 移动 PC端布局类 JavaScript 核心基础类 衍生框架类 项目应用类 JavaScript 核心基础类面试题 一
  • mediawiki使用中遇到的两个问题

    1 禁止新用户自行注册 我的wiki版本是1 22 5的 最近想禁用掉用户注册的功能 网上百度了一下都是 在LocalSettings php中加入 Prevent new user registrations wgWhitelistAcc
  • 最小二乘法拟合圆公式推导及其实现

    1 1最小二乘拟合圆介绍与推导 最小二乘法 least squares analysis 是一种数学优化技术 它通过最小化误差的平方和找到一组数据的最佳函数匹配 最小二乘法是用最简的方法求得一些绝对不可知的真值 而令误差平方之和为最小来寻找
  • 在线教育录播视频防下载安全测试 _EduSoho_HLS(m3u8)

    基于测试某录播课平台视频安全性的需求 对平台上的免费视频进行安全测试 看看到底能否较好的防下载 以下为几种常用的视频加密技术 我们这次的测试平台采用的是第二种 第三种方式主要依靠专用播放器来解决数据交到客户端的这一环的安全性 但是专用播放器