某开发社区视频m3u8逆向(一)---单个视频下载

免责公告:

仅仅交流学习,读者产生的行为后者自负、

知识星球:https://articles.zsxq.com/id_81zgktftbn60.html(新球,前20人进入者,加作者微信进行退款)

视频链接:

aHR0cHM6Ly9lZHUuY3Nkbi5uZXQvbGVhcm4vMzkzNTMvNjM5NTk4P3NwbT0zMDAxLjQxNDM=

一:

点开f12,点开视频,向下拉,点击网络(net)找到位置

发现视频是m3u8流式视频(ts文件),即视频是由多个ts组合而成的,我们在左侧搜索m3u8,发现有很多js文件,只有info里面的playUrl有所以视频(ts)的数据

我们只需要请求每个m3m8里面的视频,并把他拼到一起即可

至此第一步完成

二:

我们对playUrl进行请求,结果如下

发现他是AES加密,其中加密的密钥内容是url,iv是初始化向量

请求里面的url,用iv进行AES解密,在利用解密的东西请求ts,并拼接即可完成

代码

import re
from Crypto.Cipher import AES
import requests


headers = {
    "accept": "application/json, text/plain, */*",
    "accept-language": "zh-CN,zh;q=0.9",
    "cache-control": "no-cache",
    "origin": "https://edu.csdn.net",
    "pragma": "no-cache",
    "priority": "u=1, i",
    "referer": "https://edu.csdn.net/learn/39353/638733?spm=1002.2001.3001.4157",
    "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-site",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
    "x-ca-key": "203866374",
    "x-ca-nonce": "1d181c04-0fec-47b9-a5e2-006371e0f85e",
    "x-ca-signature": "yYvN0QQSpcLcX7zjoo6zKB4ptNmKbAOl5zsh53inVpQ=",
    "x-ca-signature-headers": "x-ca-key,x-ca-nonce"
}

url = "https://bizapi.csdn.net/edu-academy-web/v1/material/info"
params = {
    "materialId": "638733",
    "courseId": "39353",
    "cId": "39353",
    "playerVersion": "2",
    "isFree": "2",
    "isMember": "2"
}
response = requests.get(url, headers=headers, params=params)
data =response.json()
title = data["data"]["title"]
m3u8 = data["data"]["info"]['playUrl']
m3u8_res = requests.get(m3u8, headers=headers)
m3u8_text = m3u8_res.text
key_url = re.findall('URI="(.*?)"', m3u8_text)[0]
key = requests.get(key_url).content
iv = re.findall('IV=(.*)', m3u8_text)[0][2:]
IV = bytes.fromhex(iv)
ic = AES.new(key, AES.MODE_CBC, IV)
ts_list = re.findall(',\n(.*?)\n#', m3u8_text)
for ts in ts_list:
    ts_url = 'https://course.csdnimg.cn/asset/ed9e92517b1a25cd1c1d228e0ca37d0a/play_video/{}'.format(ts)
    ts_content = requests.get(ts_url, headers=headers).content
    content =ic.decrypt(ts_content)
    with open('video\\'+title+'.mp4', mode='ab') as f:
        f.write(content)
    print(ts_url)
print(data)
print(m3u8_text)

解释

这段代码是一个用于下载并解密 m3u8 视频的 Python 脚本。以下是对代码的简要逐行解释:

1-2. 导入所需的模块:re 用于正则表达式,Crypto.Cipher.AES 用于 AES 解密,requests 用于发送网络请求。

3-22. 定义请求头 headers,这些头信息用于模拟浏览器行为,以适应目标网站的反爬虫机制。

23-24. 定义 API 接口 url 和请求参数 params,这些参数用于获取视频的相关信息。

  1. 发送 GET 请求到 url,获取视频信息,并解析 JSON 响应数据。

  2. 从响应数据中提取视频标题 title

  3. 从响应数据中提取 m3u8 播放地址 m3u8

  4. 发送 GET 请求到 m3u8 地址,获取 m3u8 文件内容。

29-30. 使用正则表达式从 m3u8 文本中提取加密密钥的 URL key_url 和初始化向量 iv

  1. 发送 GET 请求到 key_url 获取加密的密钥内容。

  2. 将字符串形式的 iv 转换为字节序列。

  3. 创建一个 AES 解密上下文 ic,使用获取的密钥和初始化向量。

  4. 使用正则表达式从 m3u8 文本中提取所有的 ts 文件片段 URL,并存储在列表 ts_list 中。

35-44. 遍历 ts_list,对于每个 ts 文件片段:

  • 构造 ts 文件的 URL。
  • 发送 GET 请求获取 ts 文件内容。
  • 使用 ic 对象的 decrypt 方法解密 ts 文件内容。
  • 将解密后的内容写入到本地文件中,构建完整的视频文件。

45-46. 打印出 API 响应和 m3u8 文件内容,用于调试。

这段代码的目的是下载加密的 m3u8 视频,并将其解密为一个完整的视频文件。代码中的关键步骤包括:

  • 发送网络请求获取视频信息和 m3u8 文件。
  • 使用正则表达式解析 m3u8 文件,提取加密密钥和 ts 文件片段 URL。
  • 使用 AES 解密算法解密 ts 文件片段。
  • 将解密后的视频数据写入到本地文件。

请注意,这段代码可能需要根据目标网站的具体实现进行调整,例如请求头、API 接口和参数等。此外,下载和使用加密视频可能涉及版权问题,请确保合法合规使用。

效果呈现:

5.35 DuF:/ P@K.WZ 07/20 效果  https://v.douyin.com/i65ktMex/ 复制此链接,打开Dou音搜索,直接观看视频!

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HLS(HTTP Live Streaming)是苹果公司提出的一种流媒体传输协议,而M3U8则是HLS流媒体的播放列表文件格式。在HLS中,媒体数据被分段传输,并通过M3U8文件来描述这些媒体段的详细信息。M3U8文件中包含了媒体段的URL地址,可以从服务器获取这些媒体段进行播放。 Sample-AES(Sample-based AES encryption)是HLS中对媒体段进行加密的一种方式。它使用AES(Advanced Encryption Standard)算法对每个媒体段进行加密,然后在M3U8文件中使用URI方式引用加密的密钥。这样,只有具有正确密钥的用户才能解密和播放这些加密的媒体段。 要实现HLS/M3U8的Sample-AES解密及软件开发,需要考虑以下几个步骤: 1. 解析M3U8文件:通过解析M3U8文件,获取媒体段的URL地址和加密键信息。可以使用Python等编程语言来实现M3U8文件的解析。 2. 下载媒体段:根据M3U8文件中的URL地址,从服务器上下载加密的媒体段。可以使用HTTP请求库(如requests库)来发送HTTP请求并下载媒体段。 3. 获取密钥:从M3U8文件中的加密键信息中获取加密用的密钥。密钥通常以URI的形式给出,可以根据URI的规则找到对应的密钥。 4. 解密媒体段:使用AES算法和获取的密钥对下载的媒体段进行解密。可以使用AES加密库来实现解密算法。 5. 播放媒体:将解密后的媒体段进行播放。可以使用FFmpeg等多媒体处理库来实现播放功能。 总之,实现HLS/M3U8的Sample-AES解密及软件开发,涉及到M3U8文件的解析、媒体段的下载、密钥的获取、媒体的解密和播放等步骤。通过合理选择编程语言和相关库,可以实现这一功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值