ali-player-decrypt.
AliyunVodEncryption加密分析
阿里云点播API文档地址
预定义伪代码
covert
|
AES
//AES加密,模式为CBC,填充方式:PKCS5Padding |
返回参数说明
PlayInfoList.PlayInfo[0]
{ |
逻辑分析
假设视频文件的AES key
为 realKey
浏览器生成一个随机串 r1
利用RSA
公钥加密,结果为randStr
服务器接受到randStr
,利用私钥解密出随机串 r1
把r1
利用MD5
生成数字摘要,再截取(8,24)位的字符串 记为rs1
convert(rs1)
得到第一段加密的IV
和KEY
,记为KEY1
,IV1
再生成一段随机字符串记为r2
,利用AES.encrypt(r2,KEY1,IV1)
得到上面返回结果中的 Rand
拼接r1 + r2
,利用MD5
生成数字摘要,再截取(8,24)为的字符串,记为rs2
convert(rs2)
得到第二段加密的KEY
,记为KEY2
利用AES.encrypt(realKey,KEY2,IV1)
得到上面返回的结果Plaintext
至此,整个加密逻辑分析完毕
解密TS文件
用到的工具EasyICE
,DVB Inspector
,tsduck
ts-header(32byte)
字段名 | 位数 | 说明 |
---|---|---|
sync_byte | 4bit |
TS package 标识,固定值0x47 |
transport_error_indicator | 1bit |
传输错误标识 |
payload_unit_start_indicator | 1bit |
PES包开始标识,可以用掩码0x40 判断 |
transport_priority | 1bit |
传输优先级 |
PID | 13bit |
TS package identity 0x100:视频数据 ,0x101:音频数据 , -1:id3Track ,应该从PMT表中查找 |
transport_scrambling_control | 2bit |
是否有干扰码 |
adaptation_field_control | 2bit |
是否有扩展字段,0x01:payload only ,0x02:adaptation field only ,0x03:adaptation field follow payload |
continuity_counter | 4bit |
pack seq |
var data = [] |
reference
https://gist.github.com/manyuanrong/39f151181a193b454c3b11dac1b60e15#file-jsencrypt-js
https://g.alicdn.com/de/prismplayer/2.9.0/hls/aliplayer-hls-min.js
https://stackoverflow.com/questions/28562894/how-to-loop-an-mpeg-ts-stream