cryptoswift aes 加密后解密失败_某利威m3u8加密流程分析

本文揭秘了某利威如何加密M3U8文件,涉及AES加密、Iv处理、解密逻辑和关键变量追踪。作者通过xhr调试和代码追踪揭示了加密过程中解密key的生成和使用方法,包括MD5哈希、AES参数设置及后续的base64解码流程。
摘要由CSDN通过智能技术生成

今天学习下某利威是如何加密m3u8的, 在m3u8加密方面某利威算是做的不错的.

进入主题

61a8d17119346bb6b64f60a052524a7f.png
m3u8内容

m3u8文件, key是加密过的, Iv十六进制

80256c7baac1e0cefe569d7302571850.png
key文件

因为key请求是xhr, 试着用xhr断点断下 , 分析下怎么解密的

611f252c0d921d76ff8c09cb64093929.png

发现在栈顶都没有完成key的解密, 只有原始的Iv , 有没有可能是在第一个ts流进行解密的, 因为它m3u8标明了是AES加密, 那肯定就有解密的过程, 自然用到的key也就是解密过后的

将第一个ts流用xhr断下, 跟踪栈

c1b6bd8ea9795f9a317d5349d636d98b.png

发现在栈底用到了key的请求和数据, 那继续向上找

e6571e1ba77586414f78d4bd398ec7de.png

这个b函数, 经过我调试发现, 就是key解密的地方, 但该js文件带了时间戳, 不好下断点,我用fd替换了该文件, 并在该函数开头打上debugger

aae81fa99349c77bb6aa01c74a80dae8.png

断下来了, 单步步入查看解密细节

  • n : 加密key的内容
  • r : 取决于hls.config.minSeekHole

发现minSeekHole是变量, 全局搜索该变量, 看在哪里进行赋值, 统一打上debugger

经过笔者的漫长跟踪, 终于找到对应的位置

6ac226343271ab7ef01d41a54665a63e.png
  • vid : https://player.polyv.net/secure/(vid).json
  • t.body : 就是上面vid链接请求回来的数据

大致说下代码逻辑

对vid进行md5加密 , 取前16位作为key , 后16位作为iv, 将16进制响应数据转换为bytes类型, 然后将key ,iv , body作为AES的参数传入进行解密, 解密后的结果转为字符串再通过base64解码, 最后将字符串通过json转换为对象

对象中的seed_const == 2 * minSeekHole就是我们需要的

回到key解密的环节, 因为seed_const我们拿到了, 进行接下来的解密环节

a1608afe3dda80824b4a0c303593eb4f.png
  • r : 对seed_const进行md5签名
  • a : r.a()对r取前16位作为解密key的AES中的key
3cc88fb51fb86e9a2cb71931d2989f03.png
237279b0b10763f9baa340af1fcc8fd0.png

这里有个小操作, 对固定的IV进行除2的操作,结果为

e724af31e3be60fd166c9d7192af5417.png

因为iv要为十六进制, 所以讲数组里的十进制数字转为十六进制, 切记最终的长度要为16

拿到了AES中的key, iv 和要解密的key内容, 最终对加密的key进行AES解密, 取前16位, 作为真正的key, 后续就可以通过解密完的key和m3u8里提供的iv对ts解密

上述所有的思维逻辑都是基于python实现, 因为特殊原因, 就不贴出代码了, 大家可以自己去操作一下, 下载ts流可以用aria2, 不懂的可以看我之前的文章

溜了, peace

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值