首页 > 解决方案 > 如何将这个 m3u8 和密钥文件解密为 mp4,也许它使用 javascript 来解密数据

问题描述

是视频网站: 视频网站链接

从这个视频链接,我下载了 m3u8、key.key 和 ts 视频文件,并使用FFMPEG将这些文件转换为 mp4。但错误:

ffmpeg -allowed_extensions ALL -i a.m3u8 -c copy 01.mp4
ffmpeg version N-94813-g85386c36e3-ffmpeg-for-N_m3u8DL-CLI Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.2.0 (GCC)
  libavutil      56. 35.100 / 56. 35.100
  libavcodec     58. 56.101 / 58. 56.101
  libavformat    58. 32.104 / 58. 32.104
  libavfilter     7. 58.102 /  7. 58.102
  libavresample   4.  0.  0 /  4.  0.  0
  libswresample   3.  6.100 /  3.  6.100
[hls @ 007e3000] Skip ('#EXT-X-VERSION:3')
[hls @ 007e3000] Skip ('#EXT-X-ALLOW-CACHE:YES')
[hls @ 007e3000] Opening 'a.key' for reading
[hls @ 007e3000] Opening 'crypto:43924590506ad94e644d0bfac89e14b9_2_0.ts' for reading
[hls @ 007e3000] Opening 'crypto:43924590506ad94e644d0bfac89e14b9_2_1.ts' for reading
[hls @ 007e3000] Error when loading first segment '43924590506ad94e644d0bfac89e14b9_2_0.ts'
a.m3u8: Invalid data found when processing input

关键文件是

00000000h: 46 F5 50 A3 7A 46 85 B5 8C 17 5B 0E 4B 8D F5 49 ; F鮌F叺?[.K嶕I
00000010h: F1 02 79 41 58 C7 A3 D3 17 90 0D D6 27 67 D6 D0 ; ?yAX牵???g中

m3u8文件中的IV值为

IV=0x786d9270e353d8758b621c1f775491f2

FFMPEG 的字节太长。


在我对 html 和 javascript 的有限经验中,当网站页面刷新时,我发现 Chrome blob 是一个随机命名的 javascript 文件。

Chrome - 网络日志:

XHR:43924590506ad94e644d0bfac89e14b9_2.m3u8?pid=1608691204584X1511260&device=desktop
XHR:43924590506ad94e644d0bfac89e14b9_2.key?token=1df110e5-ff1d-42de-bd39-b63304bb3062-53648385
XHR:43924590506ad94e644d0bfac89e14b9_2_0.ts?pid=1608691204584X1511260&device=desktop
Other:blob:https://www.sciconf.cn/93ebcbe3-0211-4ec0-94df-421024e8b505

javascript 文件 ( blob:https://www.sciconf.cn/93ebcbe3-0211-4ec0-94df-421024e8b505) 中的一些代码如:

o = function() {
                function t(t, e, i, n) {
                    this.decryptdata = i,
                    this.discardEPB = n,
                    this.decrypter = new v.a(t,e,{
                        removePKCS7Padding: !1
                    })
                }
                var e = t.prototype;
                return e.decryptBuffer = function(t, e) {
                    this.decrypter.decrypt(t, this.decryptdata.key.buffer, this.decryptdata.iv.buffer, e)
                }

我认为网站使用这个js文件来解密密钥文件和IV值,但是我不能在随机命名的js文件中添加断点。


我研究了很长时间,但没有用。

请帮助或尝试给出一些想法如何实现解密的密钥和IV?

提前致谢。

标签: javascriptvideoffmpegm3u8

解决方案


推荐阅读