Люди згадують, що відкриття DVD з VLC (який відображає меню DVD) магічно робить дані доступними dd
, але ніхто ще не пояснив, чому це так і як VLC здійснює цей подвиг.
Мені вдалося повторити цю поведінку, намагаючись відтворити DVD на своєму комп’ютері з пристрою Kodi, підключеного до мого телевізора, за допомогою SMB для обміну кореневим пристроєм DVD через мережу. Це не спрацювало, якщо я вперше не відкрив DVD з VLC, і тоді Kodi міг магічно відтворити файли.
Така магія ображає мою чутливість, тому я пішов копатися. Основна причина проблеми полягає в тому, що ваш привід 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
вдається до статистичного криптоаналізу, щоб зламати шифрування .)