Люди упоминают, что открытие DVD с VLC (которое отображает меню DVD) волшебным образом делает доступными данные dd
, но никто еще не объяснил, почему это так и как VLC выполняет этот подвиг.
Мне удалось воспроизвести это поведение при попытке воспроизведения DVD на моем компьютере с устройства Kodi, подключенного к моему телевизору, с помощью SMB для совместного доступа к корневому каталогу дисковода DVD по сети. Это не сработало, если я сначала не открыл DVD с VLC, после чего Коди мог волшебным образом воспроизвести файлы.
Такая магия оскорбляет мои чувства, поэтому я начал копать. Основной причиной проблемы является то, что ваш DVD-привод работает против вас . Согласно Википедии :
Однако, если привод обнаруживает диск, скомпилированный с помощью CSS, он запрещает доступ к логическим блокам, помеченным как защищенные авторским правом (§6.15.3 [2]). Игрок должен сначала выполнить аутентификационное рукопожатие (§4.10.2.2 [2]).
Так что это не только то, что вы получите зашифрованные данные, которые невозможно воспроизвести, если вы прочитаете DVD; накопитель не отправит обратно биты, если какая-либо программа на вашем компьютере не аутентифицирует себя на накопителе, используя некоторые специфичные для DVD IOCTL, предоставляемые ядром Linux (в данном случае, DVD_AUTH ). Вот почему это проявляется как ошибка ввода-вывода.
Более подробную информацию о том, как работают эти IOCTL, можно найти в этом посте списка рассылки от человека, который их реализовал , но в основном они предоставляют программному обеспечению для пользователя возможность выполнять секретное рукопожатие с оборудованием DVD-привода.
VLC выполняет это секретное рукопожатие libdvdcss
, которое, в свою очередь, делает это GetBusKey()
вcss.c
. Предположительно, отдельная программа, с которой связаны, libdvdcss
может быть написана, чтобы разблокировать диск для доступа в виде файлов, а не полагаться на все VLC. После разблокировки накопитель не может определить, какая программа читает с него, поэтому он отправляет (все еще зашифрованные, но теперь читаемые) биты кому-либо, включая dd
или cp
.
(Интересно, что DVD IOCTL также являются единственным реальным способом получить ключ дешифрования, используемый для дешифрования данных на диске, после того, как вы прочитали его. Если вы воспроизводите скопированный каталог файлов, у вас нет доступа к IOCTL, чтобы получить ключи, поэтому libdvdcss
прибегает к статистическому криптоанализу, чтобы взломать шифрование .)