本帖最后由 tree_fly 于 2025-11-8 12:16 编辑
班主任基本功交流活动离线
声明:本文仅作技术探讨,不提供任何下载工具
0x1 分析m3u8
[Plain Text] 纯文本查看 复制代码 #EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="https://ndvideo-key.ykt.eduyun.cn/v1/resource_keys/10d898dcb9c840fb978f1557e352dea7",IV=0x00000000000000000000000000000000
#EXTINF:10.000000,
63635d7a-351b-e800-456a-48638e10f79b-1920x1080-true-f8b3085d6e80b7664c5fc92528ddd774-c26181a843d441b28016c790ae7b1756-00000.ts
下载切片.ts文件,被加密无法播放,先直接获取Key数据返回错误:
[Bash shell] 纯文本查看 复制代码 curl [url=https://ndvideo-key.ykt.eduyun.cn/v1/resource_keys/10d898dcb9c840fb978f1557e352dea7]https://ndvideo-key.ykt.eduyun.c ... 0fb978f1557e352dea7[/url] | jq
{
"host_id": "ndvideo-key.ykt.eduyun.cn",
"request_id": "ndvideo-key-172.22.160.78^1761726406464^15724433",
"server_time": "2025-11-08T00:37:42.282+0800",
"code": "WAF/REQUIRE_ARGUMENT",
"message": "您输入的参数有误,请重新输入。",
"force_update": null,
"detail": "Message:Required String parameter 'nonce' is not present \r\n SourceAppName:ndvideo-key \r\n ",
"cause": null
}
0x2 分析Network数据
打开浏览器调试器,查看数据流,先实时获取 nonce:
[Bash shell] 纯文本查看 复制代码 curl [url=https://ndvideo-key.ykt.eduyun.cn/v1/resource_keys/10d898dcb9c840fb978f1557e352dea7/signs]https://ndvideo-key.ykt.eduyun.c ... f1557e352dea7/signs[/url] | jq
{
"nonce": "1762533708308:mgmdqx5d"
}
再二次请求获取加密字符串 key1:
[Bash shell] 纯文本查看 复制代码 https://ndvideo-key.ykt.eduyun.cn/v1/resource_keys/10d898dcb9c840fb978f1557e352dea7?nonce=1762532666576:2NfTtPRa&sign=7608cb125dd747bc
{
"id": "10d898dcb9c840fb978f1557e352dea7",
"key": "aJK5arEwg61sbw5bEKHngZAIlCnF2oUk8uq9Jm/Zngw="
}
注意这里sign参数。
尝试解密key1:
[Bash shell] 纯文本查看 复制代码 echo 'aJK5arEwg61sbw5bEKHngZAIlCnF2oUk8uq9Jm/Zngw=' | base64 -d | hexdump
0000000 9268 6ab9 30b1 ad83 6f6c 5b0e a110 81e7
0000010 0890 2994 dac5 2485 eaf2 26bd d96f 0c9e
0000020
Data数据长度0x20位,需要继续分析看看如何使用.
0x3 分析播放器videoplayer.mini.js源码
搜索字符串“Invalid HLS key”定位到key赋值位置:
刷新页面,断点处读取变量i内存值,使用语句:
[JavaScript] 纯文本查看 复制代码
[...new Uint8Array(i)].map(b => b.toString(16).padStart(2, '0')).join('')
0x4 验证key2正确性
PS:图片中的key2是另外一个视频的截图展示
[Bash shell] 纯文本查看 复制代码 openssl aes-128-cbc -d \
-in e94af7e5-41cf-1b57-5354-8322a02a5e92-1920x1080-true-b4f3ab39d259c7aa7efd9f2673885576-5262810e42004a33bf4c13c287450f48-00004.ts \
-out 00004.ts -nosalt -K 65366366343934383964616234373636 -iv 00000000000000000000000000000000
0x5 分析sign的算法
参考字符串 '&sign=',快速定位到:
注意N的算法,稍后一起交给AI处理,N = (0,p.Pu)(E + _).toString().substring(0, 16)
0x6 分析key1 --> key2 解密过程
看到一些关键词 decrypt mode padding
0x7 AI出场分析算法, Thanks to Cursor & LLM
注意到视频vid在m3u8文件中可以提取,所以离线只需要视频地址即可。
AI写下载工具:
0x8 最后
2025-11-08
tree_fly/P.Y.G
|