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

Vous créez ou partagez un tutorial, postez-le ici !
Répondre
Auteur du sujet
Utilisateur 83 supprimé

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

Message par Utilisateur 83 supprimé »

Méthode simple :

- Installez StreamFab (dispo sur le forum)
- Avec le navigateur intégré, connectez vous sur la plateforme voulue
- Dès que le contenu se lance, StreamFab le détecte et propose de le télécharger.

Méthode avancée :

- 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

Rendez-vous sur https://cdrm-project.com/

Si vous avez de la chance la clé de décodage est déjà disponible, allez vérifiez sur : https://cdrm-project.com/findpssh vous pouvez passer directement à la partie 4 si un résultat est trouvé.

Sinon, sur l'index du site :

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 : 9785
Enregistré le : il y a 15 ans
Localisation : On earth
Contact :

Message par ThiWeb »

Boulot de titan ! Respect 👍

ThiWeb
Avatar du membre
LaDidi21
Modérateur
Modérateur
Messages : 13063
Enregistré le : il y a 15 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 : 71
Enregistré le : il y a 7 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 : 4293
Enregistré le : il y a 11 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 : 2982
Enregistré le : il y a 15 ans

Message par ScapO »

Boulot de ouf ! :thumbsup: Thx
I won't take no prisoners, won't spare no lives
Nobody's putting up a fight
I got my bell, I'm gonna take you to hell
I'm gonna get you, Satan get you


--> Décryptage des liens du forum : ThiWeb Live
Avatar du membre
Phil2B
Nouveau
Nouveau
Messages : 71
Enregistré le : il y a 7 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
Auteur du sujet
Utilisateur 83 supprimé

Message par Utilisateur 83 supprimé »

Phil2B a écrit : il y a 2 ans 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 ^^
Auteur du sujet
Utilisateur 83 supprimé

Message par Utilisateur 83 supprimé »

Pour récupérer via un .m3u8 : https://github.com/oopsguy/m3u8 (il y a les binaires pré-compilés)

Les commandes à utiliser sont décrites dans le readme : https://github.com/oopsguy/m3u8#binary

Comme expliqué en premier post avec le Manifest.mpd, il faut utiliser l'inspecteur d'élément pour localiser l'URL du fichier m3u8 (forcément chargé avant les segments.)

Fonctionne parfaitement bien, je l'utilise souvent avec Coinage (ils demandent de mint un NFT sur Ethereum pour regarder le contenu, je l'ai mint et télécharge pour certains channels privés)

Exemples :
https://www.coinage.media/s1/inside-cry ... as-do-kwon
https://www.coinage.media/s1/down-infin ... munity-cut

Récupéré (après conversion du fichier .ts en .mp4) :

Code : Tout sélectionner

TWL2.355A7B6D457F64534D23635A795F605A6163364A507166485A4C696F6355 746C447569497C416F556F546A532354394E6B6D45513F256C69666F2A7E6E216 7656D6F2F2A33707474786
Commande ffmpeg (TS > MP4) :

Code : Tout sélectionner

ffmpeg -i source.ts -c:v libx264 final.mp4
Un autre exemple (conversion du fichier .ts en .mkv via ffmpeg) :

Code : Tout sélectionner

TWL2.3030354D274A483446605A76613D4336517E463D674131403530375F5645 6C6977466D495961523536386A6322643A5A79755D493F256C69666F2A7E6E216 7656D6F2F2A33707474786
Commande ffmpeg (TS > MKV) :

Code : Tout sélectionner

ffmpeg -i source.ts -vcodec copy -acodec copy -f matroska final.mkv
teleco5
Petit Nouveau
Petit Nouveau
Messages : 2
Enregistré le : il y a 2 ans

Message par teleco5 »

Bonjour,

Je tiens à te remercié pour ce tuto super complet et bien détaillé.
J'ai essayer de mon coté j'ai utilisé ton "pack custom" n'ayant pas de CDM perso, hélas je n'ai pas réussi j'ai systématiquement une erreur, es ce que tu pense que le CDM du pack est révoqué par Google ? ce qui expliqué l'echec.

Merci pour tout.
Auteur du sujet
Utilisateur 83 supprimé

Message par Utilisateur 83 supprimé »

@teleco5 : Il faudrait tenter d'en chercher un non bloqué sur GitHub. Ou utiliser un vieil appareil et le récupérer. C'est des fichiers qui ne durent pas malheureusement..
BertoX
Petit Nouveau
Petit Nouveau
Messages : 2
Enregistré le : il y a 1 an

Message par BertoX »

Bonjour,

Tu m'auras convaincu par ton tuto de m'inscrire sur le forum :)

Beau travail ! Et c'est clair en plus !

Une question : il s'agit de flux VOD ou Live Streaming ?

Si VOD, est-ce adaptable pour un flux continu ?

Petite remarque, il me semble que les .m3u8 sont les manifest (playlist) pour HLS, et les .mpd pour DASH (mais je peux me tromper désolé si c'est le cas)

Amicalement.
Avatar du membre
Letsgoh
Nouveau
Nouveau
Messages : 123
Enregistré le : il y a 2 ans

Message par Letsgoh »

Impressionnant Mimisiku :p :p :p , mais là je vais me contenter de lire et d'enregistrer quelques étapes. Peut être qu'un jour, j'y arriverai :)) :))
Quand j'aurai installé python :thumbsup: :thumbsup: :thumbsup:
En tout cas merci pour ton partage. Ca donne envie de s'y mettre. :thumbsup:
Auteur du sujet
Utilisateur 83 supprimé

Message par Utilisateur 83 supprimé »

@BertoX : Ce tutoriel est spécifique VOD. Je suppose qu'on peut +/- le faire avec du live streaming.

Tutoriel simplifié / mis à jour (merci au boulot de l'équipe de https://cdrm-project.com/, leur Discord est aussi très sympa !)

Un petit exemple de récupération fait pour @crashsonic sur notre Discord : (RMC BFM Replay - Avions de chasse une technologie XXL)

Code : Tout sélectionner

TWL2.343A4F5E486A4635657665474B4E4D41407D48487A54643B42463872724D 23795A5671786462476B4F616C4322424358645473653F256C69666F2A7E6E216 7656D6F2F2A33707474786

Edit : StreamFab ajouté comme "Méthode simple" ;)

Pour ceux qui cherchent un CDM L3 :

Code : Tout sélectionner

TWL2.3F6442493A64724A7549364670383E65345F55475A63393835573C486957 41397A625A64435A654F4A45354322477C476743795A4F256C69666F2A7E6E216 7656D6F2F2A33707474786

(Il est public donc probablement banni sur les gros sites, néanmoins les L3 ne sont pas révocables (à part par un site spécifique))

Avatar du membre
Cracotte
Petit Nouveau
Petit Nouveau
Messages : 5
Enregistré le : il y a 5 ans

Message par Cracotte »

Bonjour,

J'ai essayé la méthode simple, ça marche nickel.
Du coup j'ai voulu tenter la méthode avancée pour comprendre un peu mieux, mais le site "https://cdrm-project.com/" n'a plus l'air d'exister, il y a un remplaçant ?

merci encore

Répondre

Qui est en ligne

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