VLCでDVDを開くと(DVDメニューが表示されます)、魔法のようにデータにアクセスできるようになると人々は言っていますが、dd
その理由とVLCがこの偉業を達成する方法についてはまだ誰も説明していません。
SMBを使用してネットワーク経由でDVDドライブのルートを共有することにより、テレビに接続されたKodiデバイスからコンピューターでDVDを再生しようとしたときに、この動作を再現できました。最初にVLCでDVDを開いた場合を除いて、それは機能しませんでした。その時点で、Kodiは魔法のようにファイルを再生できました。
このような魔法は私の感性を害するので、掘りに行きました。問題の根本的な原因はあなたのDVDドライブがあなたに対して働いていることです。あたりとしてウィキペディア:
ただし、ドライブがCSSでコンパイルされたディスクを検出すると、著作権で保護されているとマークされている論理ブロックへのアクセスを拒否します(§6.15.3[2])。プレイヤーは最初に認証ハンドシェイクを実行する必要があります(§4.10.2.2[2])。
したがって、DVDを読み取った場合に再生できない暗号化されたデータを取得するだけではありません。Linuxカーネル(この場合はDVD_AUTH)によって公開されたDVD固有のIOCTLを使用して、マシン上のプログラムがドライブに対して自身を認証しない限り、ドライブはビットを送り返しません。これがI / Oエラーとして現れる理由です。
これらのIOCTLがどのように機能するかについての詳細は、それらを実装した人からのこのメーリングリストの投稿で入手できますが、基本的には、ユーザーランドソフトウェアがDVDドライブハードウェアと秘密のハンドシェイクを実行する方法を提供します。
VLCはを通してこの秘密の握手実行libdvdcss
順番にでそれを行うように見える、GetBusKey()
でをcss.c
。おそらく、リンクされたスタンドアロンプログラムlibdvdcss
は、VLCのすべてに依存する代わりに、ファイルとしてアクセスするためにドライブのロックを解除するように書かれる可能性があります。ロックが解除されると、ドライブはどのプログラムが読み取りを行っているかを認識できなくなります。そのため、(まだ暗号化されていますが、現在は読み取り可能)ビットを、dd
またはを含むすべてのユーザーに送り返しcp
ます。
(興味深いことに、DVD IOCTLは、ディスク上のデータを復号化するために使用される復号化キーを取得する唯一の実際の方法でもあります。ファイルのコピーされたディレクトリを再生している場合、アクセスできません。キーを取得するためにIOCTLを使用するため、libdvdcss
統計的解読を使用して暗号を解読します。