逆向案例二十五——m3u8中有AES加密怎么处理

网址链接:aHR0cHM6Ly93d3cuY2Jwb3J0YWwub3JnL2N1cGZveHBsYXkvODUyNzctMS0xLw==

打开一个视频,打开开发者工具,刷新,搜索m3u8,找到这个含有所有ts连接的包

预览一下:

 

这与平常的m3u8有所不同,如果有下面的代码,说明ts返回的数据有加密

#EXT-X-KEY:METHOD=AES-128,URI="enc.key",IV=0x00000000000000000000000000000000 

这是一个 HLS(HTTP Live Streaming)中的媒体加密标签,用于指定媒体流的加密方法和密钥信息。

在这个标签中:

  • METHOD=AES-128:指定加密方法为 AES-128,表示使用 AES 算法进行加密。
  • URI="enc.key":指定密钥文件的 URI,即密钥文件的路径或链接地址。在这个例子中,密钥文件的路径为 "enc.key"。
  • IV=0x00000000000000000000000000000000:指定初始化向量(Initialization Vector,IV)。IV 是在加密过程中用于增加安全性的参数。在这个例子中,IV 的值为全 0。

总体上,这个标签指定了使用 AES-128 加密方法,密钥文件的路径为 "enc.key",初始化向量为全 0。

而且加密是AES,告诉了密钥的链接,和向量。

对于这种的处理方法

1.访问密钥的链接,获取二进制密钥,可以直接搜索找到密钥链接

 

 

import requests
# 密钥链接
key_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/enc.key'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
key = requests.get(url=key_url,headers=headers).content

 

2.制作解码器,传入密钥,加密方式,和IV

key = requests.get(url=key_url,headers=headers).content
from Crypto.Cipher import AES
# 将 IV 和密钥转换为字节串
IV = bytes.fromhex('00000000000000000000000000000000')  # IV 字节串
ci = AES.new(key,AES.MODE_CBC,IV=IV)

 

一般填充方式都为CBC 

3.访问m3u8链接,提取出所有ts的链接。

import requests
import re
m3u8_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/index.m3u8'
response = requests.get(url=m3u8_url,headers=headers).text
ts_list = re.sub('#E.*','',response).split()
for ts in ts_list:
    print(ts)

4.开始保存

number = 0
for ts in ts_list:
    number += 1
    print(f'正在保存第{number}个ts文件')
    ts_content = requests.get(url=ts,headers=headers).content
    content = ci.decrypt(ts_content)
    with open('视频.mp4',mode='ab') as f:
        f.write(content)

 

5.完整代码

import requests
from Crypto.Cipher import AES
import re
# 密钥链接
key_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/enc.key'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

key = requests.get(url=key_url,headers=headers).content

# 将 IV 和密钥转换为字节串
IV = bytes.fromhex('00000000000000000000000000000000')  # IV 字节串
ci = AES.new(key,AES.MODE_CBC,IV=IV)
m3u8_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/index.m3u8'
response = requests.get(url=m3u8_url,headers=headers).text
ts_list = re.sub('#E.*','',response).split()
number = 0
for ts in ts_list:
    number += 1
    print(f'正在保存第{number}个ts文件')
    ts_content = requests.get(url=ts,headers=headers).content
    content = ci.decrypt(ts_content)
    with open('视频.mp4',mode='ab') as f:
        f.write(content)

结果展现:

 

 

 

 

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AES是一种非对称加密算法,它有着很高的安全性和可靠性,被广泛应用于网络安全领域。下面是AES加密算法的C语言实现过程: 1. 初始化密钥排列 AES加密算法需要一个密钥排列,该排列由一个4x4的字节矩阵组成。在初始化时,需要将密钥排列填充为用户提供的密钥。 2. 对密钥排列进行扩展 扩展密钥排列是AES加密算法的核心步骤。在此步骤中,需要根据初始密钥排列生成多个轮密钥。每个轮密钥都是一个4x4的字节矩阵。扩展密钥排列的过程包括以下步骤: a. 将初始密钥排列拷贝到扩展密钥排列的第一行。 b. 从第二行开始,对前一行进行操作。如果该行是4的倍数,进行逆向S盒变换,然后进行逆向行移位和逆向列混淆。否则,只进行逆向行移位。 c. 最后一行的操作和前面几行略有不同。首先进行逆向S盒变换,然后进行逆向行移位。最后,将第一行的第一个字节按位异或上轮常量,该轮常量是根据轮数生成的。 3. 对明文进行分块 明文是由一串字节组成的数据,为了方便加密,需要将明文分成块。每个块是一个4x4的字节矩阵。 4. 对每个块进行加密 对于每个块,需要进行多轮加密。每轮加密包括以下步骤: a. 将明文块和轮密钥进行逐位异或操作。 b. 进行S盒变换,将每个字节替换成S盒中对应的元素。 c. 进行行移位,对每一行进行循环左移。 d. 进行列混淆,对每列进行列混淆操作。 e. 最后一轮加密不需要进行列混淆操作。 5. 将加密后的块拼接成密文 将每个块加密后,将它们拼接成一串字节,即为加密后的密文。 以上就是AES加密算法的C语言实现过程。实现过程中需要注意的是,许多操作都是基于位运算和字节操作实现的,需要仔细处理字节顺序和字节对齐问题。另外,为了提高加密效率,可以使用预处理表格来优化算法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习各种软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值