[TUTORIAL] Récupérer du contenu en streaming protégé

Vous créez ou partagez un tutorial, postez-le ici !
Répondre
Avatar du membre
Auteur du sujet
Mimisiku
Administrateur
Administrateur
Messages : 84
Enregistré le : il y a 13 ans
Localisation : Localhost

[TUTORIAL] Récupérer du contenu en streaming protégé

Message par Mimisiku »

- Tutoriel agile - Il s'améliorera au fil des découvertes / demandes.

Cas pratique / Contexte : viewtopic.php?t=23930

⚠️ Tutoriel avancé. Explications volontairement larges.

Partie 1 : Analyse

On se rend sur le site visé, on se connecte, et on ouvre l'inspecteur d'élément, puis on va sur le contenu protégé.
Dans l'inspecteur d'élément > Onglet réseau

Il faut maintenant localiser comment les flux vidéo / audio arrivent dans le player.
On remarque sur BFM (et beaucoup d'autres sites) qu'ils chargent premièrement un "Manifest.mpd", suivi d'une demande de licence, ensuite les segments m4s arrivent (v0 et v4 correspondent à audio / vidéo)
(L'ordre est incohérent car le téléchargement des segments chiffrés peut débuter avant même d'avoir la clé de décryptage ;))

(Côté jargon technique, dans le cas présent, on est sur du streaming via MPEG-DASH, la DRM utilisée est Playready de chez Microsoft)

Image

- Récupérez le lien du Manifest.mpd (clic droit > copier le lien)
- Sauvegardez le dans un fichier texte
- Récupérez le lien de la "licence" (URL contenant widevine en général), collez la dans un fichier texte
- Récupérez les en-têtes de la requête de licence (Request headers) (ceux commençant par : sont inutiles)

Image

Coller le tout dans le fichier texte.

Dans le manifest.mpd (ouvrez le avec un éditeur de texte/code, récupérez la clé PSSH (texte base64 entre les balises <cenc:pssh>clé</cenc:pssh>.
Vous allez en voir plusieurs, récupérez celle qui n'est pas à proximité d'un <mspr:pro></mspr:pro>

Partie 2 : Récupération des flux chiffrés

- Installer yt-dlp : https://github.com/yt-dlp/yt-dlp#installation

Code : Tout sélectionner

yt-dlp --allow-u --downloader aria2c -f bv,ba "http://URLManifest.mpd"
Le script lance le téléchargement des flux chiffrés. (Les avertissements sont normaux. ;))

Image

Partie 3 : Décodage des flux

Il vous faut python3 installé pour continuer !

Télécharger mon "pack custom", contenant un site permettant de déchiffrer (source de getwvkeys.cc) ainsi qu'un CDM (Content decryption module) récupéré d'un Xiaomi Redmi 6A :

Code : Tout sélectionner

TWL2.395166564A42487D6668527D63693B6E6A407471686834495A43495A4265 3953384A697D2245644167797463295A64575E6644643F256C69666F2A7E6E216 7656D6F2F2A33707474786
Décompressez le pack, avec un terminal, naviguez dans le dossier "getwvclone"

Installation des requirements : (si pip ne fonctionne pas, essayez pip3)

Code : Tout sélectionner

pip install -r requirements.txt
Création de la base SQLite :

Code : Tout sélectionner

python3 create_databases.py
Lancement du serveur de dev :

Code : Tout sélectionner

python3 app.py
Ouvrez un navigateur sur http://localhost:8080

Dans la section "Upload", envoyez les fichiers contenus dans le dossier `Xiaomi-Redmi-6A-cdm`
Image

Copiez le Build Info retourné.
Image

Dans la section "Home"
Image

Collez le Build Info de l'étape précédente dans le champ "Build Info"
Collez votre clé PSSH (de la partie 1), ainsi que la licence, et les headers.

! Certains headers doivent être entourés de quotes (") pour fonctionner, par exemple : accept ou content-length, les messages d'erreur sont assez clairs.

Si tout est ok, la page affiche "Success" suivi de la / les clés de décryptage, collez les dans un fichier texte. (Dans le screenshot suivant, la dernière ligne)

Image

Partie 4 : Déchiffrement & merge

Pour cette partie, vous devez installer au préalable mp4decrypt, présent dans la suite d'outils bento4 : https://www.bento4.com/documentation/mp4decrypt/
Vous aurez aussi besoin de ffmpeg pour regrouper l'audio et la vidéo.

Remplacez KEY par la clé récupérée à l'étape précédente, si plusieurs, rajoutez un --key clé2

Déchiffrement du flux audio :

Code : Tout sélectionner

mp4decrypt --key KEY ca.m4a audio.mp4
Déchiffrement du flux video :

Code : Tout sélectionner

mp4decrypt --key KEY cv.mp4 video.mp4
Merge de l'audio et de la vidéo en un fichier mp4 :

Code : Tout sélectionner

ffmpeg -i video.mp4 -i audio.mp4 -c:v copy -c:a aac output.mp4
Vous pouvez désormais apprécier votre contenu en lançant output.mp4. 🚀

Explication du fonctionnement des DRM :

Code : Tout sélectionner

https://youtu.be/mn2POYEiJVE
Aller plus loin : (Comment Netflix font pour pimenter avec MSL? :p)

Code : Tout sélectionner

https://youtu.be/hUeGT91deSM
N'hésitez pas à poser vos questions pour aider à améliorer ce tutoriel !
Avatar du membre
ThiWeb
Administrateur
Administrateur
Messages : 9530
Enregistré le : il y a 13 ans
Localisation : On earth
Contact :

Message par ThiWeb »

Boulot de titan ! Respect 👍

ThiWeb
Avatar du membre
LaDidi21
Modérateur
Modérateur
Messages : 9857
Enregistré le : il y a 13 ans

Message par LaDidi21 »

@GhostFly :
Superbe travail 8| .
________________________________________________________________________________

@others :
Quelques pointeurs :
Quelques acronymes :
  • CENC = Common Encryption mode
  • DASH = Dynamic Adaptive Streaming Over HTTP
  • PRO = PlayReady Header Object
  • PSSH = (PlayReady) Protection System Specific Header
-> Décryptage des liens du forum : -/ extension "ThiWeb Crypt / Decrypt"™ ou -/ Thiweb Live <-
Avatar du membre
Phil2B
Nouveau
Nouveau
Messages : 53
Enregistré le : il y a 4 ans

Message par Phil2B »

Impressionnant,
Très intéressé pour enregistrer des opéras, je vais me plonger dans la chose... J'espère parvenir à comprendre.
Merci
Avatar du membre
Joselito
Modérateur
Modérateur
Messages : 2394
Enregistré le : il y a 8 ans

Message par Joselito »

@GhostFly,
Merci pour ce tuto.
Je vais attendre d'être à la retraite pour tenter de l'appliquer.
En espérant disposer d'un intervalle libre avant que le cerveau ne se sclérose complètement.
Avatar du membre
ScapO
Modérateur
Modérateur
Messages : 2601
Enregistré le : il y a 13 ans

Message par ScapO »

Boulot de ouf ! :thumbsup: Thx
S'il faut mourir Autant vivre à en crever
Tout retenir pour tout immoler
S'il faut mourir Sur nos stèles je veux graver
Que nos rires ont berné La mort et le temps



--> Décryptage des liens du forum : ThiWeb Live
Avatar du membre
Phil2B
Nouveau
Nouveau
Messages : 53
Enregistré le : il y a 4 ans

Message par Phil2B »

Bon, j'ai essayé de me plonger dans la chose... il me faudra 3 vies pour arriver à qqc !

Cela étant, connaitriez-vous un moyen d'enregistrer un flux de sous-titres webvtt ?
Je récupère ce type d'adresse : https://sdn-global-streaming-cache-3qsd ... 568.webvtt
Je parviens à les enregistrer un par un, mais pour un opéra de Wagner qui dure 4 h cela est quelque peu fastidieux ;-)

Merci et bon week-end.
Philippe
Avatar du membre
Auteur du sujet
Mimisiku
Administrateur
Administrateur
Messages : 84
Enregistré le : il y a 13 ans
Localisation : Localhost

Message par Mimisiku »

Phil2B a écrit : il y a 1 semaine Bon, j'ai essayé de me plonger dans la chose... il me faudra 3 vies pour arriver à qqc !

Cela étant, connaitriez-vous un moyen d'enregistrer un flux de sous-titres webvtt ?
Je récupère ce type d'adresse : https://sdn-global-streaming-cache-3qsd ... 568.webvtt
Je parviens à les enregistrer un par un, mais pour un opéra de Wagner qui dure 4 h cela est quelque peu fastidieux ;-)
Tu peux t'inspirer de projets comme https://github.com/benwiley4000/youtube-vtt, passe moi un lien sur Discord ou en MP et je regarde avec plaisir ^^
Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité