/ / Come decifrare i file video m3u8 crittografati AES-128? - crittografia, openssl, aes, m3u8

Come decifrare i file video m3u8 crittografati AES-128? - crittografia, openssl, aes, m3u8

Sto cercando di decifrare file video m3u8 criptati AES-128 come questo:

il file m3u8:

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:NO
#EXT-X-VERSION:2
#EXT-X-FAXS-CM:MII6lAYJKoZIhvcNAQcCoII6hTCCOoECAQExCzAJBgUrDgMCGgUAM... very long key...
#EXT-X-KEY:METHOD=AES-128,URI="faxs://faxs.adobe.com",IV=0X99b74007b6254e4bd1c6e03631cad15b
#EXT-X-TARGETDURATION:8
#EXTINF:8,
video.mp4Frag1Num0.ts
#EXTINF:8,
video.mp4Frag1Num1.ts
...

Ho provato con openssl:

openssl aes-128-cbc -d -kfile key.txt -iv 99b74007b6254e4bd1c6e03631cad15b -nosalt -in video_enc.ts -out video_dec.ts

key.txt contiene la chiave molto lunga ->

bad decrypt
1074529488:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:

Che cosa sto facendo di sbagliato ?

risposte:

4 per risposta № 1

Per decodificare il flusso video crittografato è necessaria la chiave di crittografia. Questa chiave è non parte del flusso. Dovrebbe essere ottenuto separatamente.

L'intestazione EXT-X-FAXS-CM contiene metadati DRM e non la chiave.

Questo è excert dallo sviluppatore di Adobe Media Serverguida: La playlist con variante protetta di Adobe Access Server deve includere anche il tag # EXT-X-FAXS-CM. Il valore del tag # EXT-X-FAXS-CM nella playlist di varianti è l'URI relativo riferito ai metadati DRM di uno dei singoli flussi. Al client, il tag # EXT-X-FAXS-CM nella playlist di varianti sarà utilizzato per creare la sessione DRM. La stessa sessione DRM verrà utilizzata per tutti i file M3U8 crittografati all'interno della playlist variante.

La guida completa può essere trovata qui: http://help.adobe.com/en_US/adobemediaserver/devguide/WS5262178513756206-4b6aabd1378392bb59-7fe8.html

C'è anche menzione di fax: //faxs.adobe.com URI serve per la chiave locale. Quindi chiave ottenuta localmente da un dispositivo.


1 per risposta № 2

Questo potrebbe essere un po 'un trucco, ma dato un URL per un file .m3u8, scaricherà e decodificherà i file che compongono lo stream:

#!/usr/bin/env bash
curl "$1" -s | awk "BEGIN {c=0} $0 ~ "EXT-X-KEY" {urlpos=index($0,"URI=")+5; ivpos=index($0,"IV="); keyurl=substr($0, urlpos, ivpos-urlpos-2); iv=substr($0, ivpos+5); print "key=`curl -s """"keyurl"""" | hexdump -C | head -1 | sed "s/00000000//;s/|.*//;s/ //g"`"; print "iv="iv} $0 !~ "-KEY" && $0 ~ "http" {printf("curl -s """"$0"""" | openssl aes-128-cbc -K $key -iv $iv -d >seg%05i.tsn", c++)}" | bash

Questo script genera un secondo script cheestrae chiavi e vettori di inizializzazione e li utilizza per decodificare durante il download. Ha bisogno di arricciare, awk, hexdump, sed e openssl per funzionare. Probabilmente si soffocherebbe su un flusso non criptato, o su un flusso che utilizza qualcosa di diverso da AES-128 (sono supportate altre crittografie?).

Riceverai un sacco di file: seg00000.ts, seg00001.ts, ecc. Usa tsMuxeR (https://www.videohelp.com/software/tsMuxeR) per unirli in un singolo file (la semplice concatenazione non ha funzionato per me ... è quello che ho provato prima):

(echo "MUXOPT --no-pcr-on-video-pid --new-audio-pes --vbr  --vbv-len=500"; (echo -n "V_MPEG4/ISO/AVC, "; for i in seg*.ts; do echo -n ""$i"+"; done; echo ", fps=30, insertSEI, contSPS, track=258") | sed "s/+,/,/"; (echo -n "A_AAC, "; for i in seg*.ts; do echo -n ""$i"+"; done; echo ", track=257") | sed "s/+,/,/") >video.meta
tsMuxeR video.meta video.ts

(Potrebbe essere necessario regolare gli ID di traccia e il framerate ... ottenere i valori da utilizzare passando uno dei file scaricati su tsMuxeR.)

Quindi usa ffmpeg per rimandare a qualcosa di un po 'più ampiamente compreso:

ffmpeg -i video.ts -vcodec copy -acodec copy video.m4v

0 per risposta № 3

Anche attraverso questo file include dati crittografati AES, openssl non so il m3u8 formato. però FFmpeg potrebbe essere in grado di gestirlo