[免责声明]本文来源于作者个人学习整理,仅供学习交流使用,不构成商业目的。所有资源均系本人个人学习或网络收集,仅提供一个展示、介绍、观摩学习的博文,不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任。如涉及文章内容、版权和其它问题,请与本人联系,我将在第一时间处理。

0x1 视频课程信息收集--m3u8、key

1. m3u8视频文件获取

首先找到对应的课程视频,最好是已经购买了的(你懂的-_-)。接着使用IDM如下图浏览器右上角,我这使用的是firefox安装的扩展插件IDM进行视频下载操作,记下这个下载URL:https://edu.51cto.com//center/player/play/m3u8?lesson_id=1043_253110&id=245898&dp=high&type=wejoboutcourse&lesson_type=course

开始下载,发现弹出如下对话框~~~~~~~

没关系,我们接着往下操作,点击该URL或者复制该地址到浏览器中打开,你会发现下载一个文件newplay.m3u8,然后先保存到本地。

至此,我们拿到了m3u8文件。

2. 通过m3u8文件获取到加密key

既然拿到了文件,我们就用文本编辑打开看看里面啥内容,发现好多信息有某有:METHOD加密方式AES-128、key的URI下载地址、iV偏移量以及下面大量的视频ts切片地址信息。

接下来,我们根据文件中key的URI下载地址链接去试试呗。https://edu.51cto.com//center/player/play/get-key?lesson_id=1043_253110&id=245898&type=wejoboutcourse&lesson_type=course&isPreview=0

出现errorSign,这个啥情况?缺少参数?

重点来了:我们回到原视频播放页面中,接着调试一波看看能不能找到点有用的,打开浏览器的开发者工具, 以firefox为例, 页面上右键--检查, 或者快捷键F12, 切换到Network/网络监视器面板--刷新或重新载入当前页面;

用key关键字过滤url发现完整的key地址链接出来了https://edu.51cto.com/center/player/play/get-key?lesson_id=1043_253110&id=245898&type=wejoboutcourse&lesson_type=course&isPreview=0&sign=401b379280593cf4dbefbd703886475b,点击链接查看详细信息,发现响应里面出现了一串看不懂的字符串BiNQy07alW36osRdnP0UlNOHH7xjEPRamHxjZPYJiNyPx7NUQQVddPiOua0oJOiUjPNjSPxH9N0Ux5elOPyHVUCB0PPHpLw3QHOPZPxUiQyPQLexQQV51这个就是加密的key了记录下来。

注意: 加密key的内容每次都会变化, 但是解密得到的key是唯一的;

0x2 视频课程key解密

获取课程id

视频播放地址https://edu.51cto.com/center/course/lesson/index?id=1043_253110&type=wejob 其中有个id数字: "1043_253110", 这是课程id, 记下这个数字;

加密key

BiNQy07alW36osRdnP0UlNOHH7xjEPRamHxjZPYJiNyPx7NUQQVddPiOua0oJOiUjPNjSPxH9N0Ux5elOPyHVUCB0PPHpLw3QHOPZPxUiQyPQLexQQV51

开始解密

用以上准备好的加密key和课程id, 开始解密:

浏览器打开解密key的js代码(文末百度盘打包有)

打开浏览器的开发者工具, 页面上右键--检查, 或者快捷键F12, 切换到console/控制台面板. 在console面板粘贴、执行刚才的js代码;

执行代码:

decode("BiNQy07alW36osRdnP0UlNOHH7xjEPRamHxjZPYJiNyPx7NUQQVddPiOua0oJOiUjPNjSPxH9N0Ux5elOPyHVUCB0PPHpLw3QHOPZPxUiQyPQLexQQV51","1043_253110")

得到解密key: e5e319c31a310fb5

0x3 用解密key解密视频

转换进制

需要先把解密key转为32位的16进制字符串

可以用这个在线工具: https://www.bejson.com/convert/ox2str/ 或安装Windows下hexdump工具手动转换

得到转换后的32位key: 65356533313963333161333130666235

使用bat批量解密ts切片并自动合并:

其中ffmpeg、wget工具配合openssl来实现批量脚本的自动解密合成最终的视频文件。

0x4 百度盘打包程序

链接:https://pan.baidu.com/s/1rIytswcyDpsqLp8GQsRE3A

提取码:blog

PS:开发好的同学亦可python脚本,根据本文内容步骤进行自动批量视频的download。

某学院m3u8视频解密获取分析实战分享的更多相关文章

  1. 优酷m3u8视频源地址获取失败

    昨天和今天上午,优酷站点视频全然没有办法播放,可是我是获取的优酷视频的视频原地址,所以app还是能够正常播放而且有下载功能.今天下午開始,优酷视频网页能够訪问了,可是视频原地址却不在了.我全部的app ...

  2. 打造m3u8视频(流视频)下载解密合并器(kotlin)

    本文是对我原创工具m3u8视频下载合并器关键代码解析及软件实现的思路的讲解,想要工具的请跳转链接 1.思路说明 思路挺简单,具体步骤如下: 下载m3u8文件 解析m3u8文件获得ts文件列表 根据文件 ...

  3. 《Wireshark数据包分析实战》 - http背后,tcp/ip抓包分析

    作为网络开发人员,使用fiddler无疑是最好的选择,方便易用功能强. 但是什么作为爱学习的同学,是不应该止步于http协议的,学习wireshark则可以满足这方面的需求.wireshark作为抓取 ...

  4. 如何打造一款m3u8视频爬虫

    0.前言 m3u8是一种很常见的网页视频播放器的视频源,比如说中国大学MOOC中课程就是使用了该种视频格式. 随便打开一门课程,就可以发现在网络请求中存在一个m3u8的文件,在preview中预览,它 ...

  5. 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战

    笔记 3.高级篇幅之Ribbon负载均衡源码分析实战     简介: 讲解ribbon服务间调用负载均衡源码分析         1.完善下单接口         2.分析@LoadBalanced ...

  6. stars-one原创工具——m3u8视频下载合并器(kotlin)

    一款可以下载m3u8.解密ts文件及合并ts文件的视频下载工具 蓝奏云下载地址 github地址 软件对你有帮助的话,不妨赞赏一波!感谢! 程序说明 采用多线程下载,可有效的提高下载速度 内置解密程序 ...

  7. 恶意代码分析实战五:OllyDebug动态结合

    目录 恶意代码分析实战五:OllyDebug动态结合 OllyDebug界面介绍 OllyDebug载入程序方法 OllyDebug地址跳转 OllyDebug下断点 OllyDebug单步执行 Ol ...

  8. 恶意代码分析实战四:IDA Pro神器的使用

    目录 恶意代码分析实战四:IDA Pro神器的使用 实验: 题目1:利用IDA Pro分析dll的入口点并显示地址 空格切换文本视图: 带地址显示图形界面 题目2:IDA Pro导入表窗口 题目3:交 ...

  9. IOS从视频中获取截图

    从视频中获取截图: NSString *movpath =[[NSBundle mainBundle] pathForResource:@”iosxcode4″ ofType:@”mov”]; mpv ...

随机推荐

  1. Linux查看与设定别名

    1.alias :查看系统中所有的命令别名 2.设定别名 alias 别名='原命令' 3.删除别名 unalias 别名 4.使别名永久生效    vi  ~/.bashrc  写入这个文件中即可永 ...

  2. 『心善渊』Selenium3.0基础 — 7、XPath轴定位详解

    目录 1.XPath轴定位介绍 2.位置路径表达式概念 3.步的路径表达式范例 4.练习 使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位.例如:先找到一个相对好定位的元素,在根据与 ...

  3. js中有对象的key怎么获取对应的值

    一般人的思路是这样的 var obj = {"name1":"张三","name2":"李四"}; var key = ...

  4. (1)Canal入门

    1.前言 在我们系统开发过程中,根据业务场景很多数据库数据并不会直接给用户访问的,需要同步保存到ElasticSearch.Redis等存储应用当中(例如最常见的是搜索页面的ElasticSearch ...

  5. Docker搭建mysql:5.7版本数据库

    搭建MySQL: 1.启动测试mysql,拷贝容器内配置文件到宿主机 mkdr -P /server/docker/mysql/{data,conf} docker run -e MYSQL_ROOT ...

  6. AcWing 102. 最佳牛围栏

    农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大 ...

  7. Java运算中的类型转换

    类型转换 运算中,不同类型的数据先转化为同一类型,然后进行运算 public class Dome04 { public static void main(String[] args) { //int ...

  8. swoole实现任务定时自动化调度详解

    开发环境 环境:lnmp下进行试验 问题描述 这几天做银行对帐接口时,踩了一个坑,具体需求大致描述一下. 银行每天凌晨后,会开始准备昨天的交易流水数据,需要我们这边请求拿到. 因为他们给的是一个bas ...

  9. 使用Less/Sass生成Bootstrap格栅样式系统

    熟悉Bootstrap的同学应该了解其中的格栅系统,用来排版非常方便.他将页面分为12等分,并且适用不同的尺寸屏幕.超小xs(小于768px),小屏sm(大于等于768px),中屏md(大于等于992 ...

  10. 探索互斥锁 Mutex 实现原理

    Mutex 互斥锁 概要描述 mutex 是 go 提供的同步原语.用于多个协程之间的同步协作.在大多数底层框架代码中都会用到这个锁. mutex 总过有三个状态 mutexLocked: 表示占有锁 ...