Les gens mentionnent que l'ouverture du DVD avec VLC (qui affiche le menu DVD) rend magiquement les données accessibles dd
, mais personne n'a encore expliqué pourquoi et comment VLC accomplit cet exploit.
J'ai réussi à reproduire ce comportement lorsque j'essayais de lire un DVD sur mon ordinateur à partir d'un appareil Kodi connecté à mon téléviseur, en utilisant SMB pour partager la racine du lecteur de DVD sur le réseau. Cela n'a pas fonctionné, sauf si j'ai d'abord ouvert le DVD avec VLC, auquel cas Kodi pouvait lire les fichiers comme par magie.
Ce genre de magie offense ma sensibilité, alors je suis allé creuser. La cause sous-jacente du problème est que votre lecteur de DVD fonctionne contre vous . Selon Wikipedia :
Cependant, si le lecteur détecte un disque qui a été compilé avec CSS, il refuse l'accès aux blocs logiques marqués comme protégés par le droit d'auteur (§6.15.3 [2]). Le joueur doit d'abord exécuter une négociation d'authentification (§4.10.2.2 [2]).
Ce n'est donc pas seulement que vous obtiendrez des données chiffrées qui ne peuvent pas être lues si vous lisez le DVD; le lecteur ne renverra pas les bits à moins qu'un programme sur votre machine ne se soit authentifié sur le lecteur, en utilisant des IOCTL spécifiques aux DVD exposés par le noyau Linux (dans ce cas, DVD_AUTH ). C'est pourquoi cela se manifeste comme une erreur d'E / S.
Plus d'informations sur le fonctionnement de ces IOCTL sont disponibles dans cette publication de la liste de diffusion de la personne qui les a implémentées , mais en gros, elles permettent aux logiciels de l'utilisateur de réaliser la poignée de main secrète avec le matériel du lecteur de DVD.
VLC effectue cette poignée de main secrète libdvdcss
, qui à son tour semble le faire GetBusKey()
encss.c
. Vraisemblablement, un programme autonome lié à libdvdcss
pourrait être écrit pour déverrouiller le lecteur pour l'accès en tant que fichiers, au lieu de s'appuyer sur l'ensemble de VLC. Une fois qu'il est déverrouillé, le lecteur ne peut pas savoir quel programme en lit. Il renvoie donc les bits (toujours cryptés mais désormais lisibles) à quiconque, y compris dd
ou cp
.
(Fait intéressant, les DVD IOCTL sont également le seul moyen réel d'obtenir la clé de déchiffrement utilisée pour déchiffrer les données sur le disque, une fois que vous l'avez lu. Si vous lisez un répertoire de fichiers copié, vous n'avez pas accès à les IOCTL pour obtenir les clés, libdvdcss
recourt donc à la cryptanalyse statistique pour casser le chiffrement .)