La gente menciona que abrir el DVD con VLC (que muestra el menú del DVD) mágicamente hace que los datos sean accesibles dd
, pero nadie ha explicado aún por qué es así y cómo VLC logra esta hazaña.
Logré replicar este comportamiento al intentar reproducir un DVD en mi computadora desde un dispositivo Kodi conectado a mi TV, usando SMB para compartir la raíz de la unidad de DVD a través de la red. No funcionó, a menos que primero abriera el DVD con VLC, momento en el que Kodi podría reproducir mágicamente los archivos.
Este tipo de magia ofende mi sensibilidad, así que fui a cavar. La causa subyacente del problema es que su unidad de DVD funciona en su contra . Según Wikipedia :
Sin embargo, si la unidad detecta un disco que ha sido compilado con CSS, niega el acceso a los bloques lógicos que están marcados como con derechos de autor (§6.15.3 [2]). El jugador debe ejecutar primero un protocolo de enlace de autenticación (§4.10.2.2 [2]).
Por lo tanto, no es solo que obtendrá datos cifrados que no se pueden reproducir si lee el DVD; la unidad no devolverá los bits a menos que algún programa en su máquina se haya autenticado en la unidad, utilizando algunos IOCTL específicos de DVD expuestos por el kernel de Linux (en este caso, DVD_AUTH ). Es por eso que esto se manifiesta como un error de E / S.
Más información sobre cómo funcionan estos IOCTL está disponible en esta publicación de la lista de correo de la persona que los implementó , pero básicamente proporcionan una forma para que el software del país de usuario realice el protocolo de enlace secreto con el hardware de la unidad de DVD.
VLC realiza esta apretón de manos secreto a través libdvdcss
, que a su vez parece hacerlo en GetBusKey()
encss.c
. Presumiblemente, se libdvdcss
podría escribir un programa independiente que se vincule en contra para desbloquear la unidad para acceder como archivos, en lugar de depender de todo VLC. Una vez que está desbloqueado, la unidad no puede saber qué programa está leyendo, por lo que envía los bits (aún encriptados pero ahora legibles) a cualquier persona, incluidos dd
o cp
.
(Curiosamente, los DVD IOCTL también son la única forma real de obtener la clave de descifrado utilizada para descifrar los datos en el disco, una vez que los haya leído. Si está reproduciendo un directorio de archivos copiado, no tiene acceso a los IOCTL para obtener las claves, por lo que libdvdcss
recurre al criptoanálisis estadístico para descifrar el cifrado ).