Mọi người đề cập đến việc mở DVD bằng VLC (hiển thị menu DVD) một cách kỳ diệu làm cho dữ liệu có thể truy cập được dd
, nhưng chưa ai giải thích được tại sao đó là cách và VLC hoàn thành kỳ tích này.
Tôi đã quản lý để sao chép hành vi này khi cố gắng phát DVD trong máy tính của mình từ thiết bị Kodi được nối với TV của tôi, bằng cách sử dụng SMB để chia sẻ thư mục gốc của ổ đĩa DVD qua mạng. Nó không hoạt động, trừ khi lần đầu tiên tôi mở DVD bằng VLC, lúc đó Kodi có thể phát các tệp một cách kỳ diệu.
Loại phép thuật này xúc phạm sự nhạy cảm của tôi, vì vậy tôi đã đi đào. Nguyên nhân cơ bản của vấn đề là ổ đĩa DVD của bạn đang hoạt động chống lại bạn . Theo Wikipedia :
Tuy nhiên, nếu ổ đĩa phát hiện đĩa đã được biên dịch bằng CSS, nó sẽ từ chối quyền truy cập vào các khối logic được đánh dấu là có bản quyền (§6.15.3 [2]). Người chơi phải thực hiện bắt tay xác thực trước (§4.10.2.2 [2]).
Vì vậy, không chỉ là bạn sẽ nhận được dữ liệu được mã hóa không thể phát nếu bạn đọc DVD; ổ đĩa sẽ không gửi lại các bit trừ khi một số chương trình trên máy của bạn đã tự xác thực vào ổ đĩa, sử dụng một số IOCTL dành riêng cho DVD được trình bày bởi nhân Linux (trong trường hợp này là DVD_AUTH ). Đó là lý do tại sao điều này biểu hiện như một lỗi I / O.
Thông tin thêm về cách thức hoạt động của các IOCTL này trong bài đăng danh sách gửi thư này từ người đã triển khai chúng , nhưng về cơ bản, chúng cung cấp một cách để phần mềm người dùng thực hiện bắt tay bí mật với phần cứng ổ đĩa DVD.
VLC thực hiện cái bắt tay bí mật này libdvdcss
, qua đó dường như thực hiện nó GetBusKey()
trongcss.c
. Có lẽ một chương trình độc lập được liên kết với libdvdcss
có thể được viết để mở khóa ổ đĩa để truy cập dưới dạng tệp, thay vì dựa vào tất cả VLC. Khi đã được mở khóa, ổ đĩa không thể biết chương trình nào đang đọc từ đó, vì vậy nó sẽ gửi lại các bit (vẫn được mã hóa nhưng hiện có thể đọc được) cho bất kỳ ai, kể cả dd
hoặc cp
.
(Thật thú vị, các IOCTL DVD cũng là cách thực sự duy nhất để lấy khóa giải mã được sử dụng để giải mã dữ liệu trên đĩa, một khi bạn đã đọc nó. Nếu bạn đang chơi một thư mục sao chép các tệp, bạn không có quyền truy cập vào các IOCTL để lấy các khóa, do đó libdvdcss
phải dùng đến tiền mã hóa thống kê để bẻ khóa mã hóa .)