Люди упоминают, что открытие 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прибегает к статистическому криптоанализу, чтобы взломать шифрование .)