CPRM解除をやってみる

過去にRD-XS53で地上アナログ放送を録画したダビング可能なものが、HDDやDVDドライブのエラーでコピーワンス(「コピー×」マークが付く)になってしまい、泣く泣くDVD-RやDVD-RAMにムーブ(移動)したものを救出するため、CPRMディスクをコピーする方法を参考にしてCPRMの解除をやってみた。

必要なツールのダウンロードと解凍

まずはBlu-ray CPRM Ripping Masterから、lernel32.dll、c2dec、cprmgetkey041を、AutoUnCPRM (略称:AUC)から、AutoUnCPRM037.cabを、あとはここからcprmauto001.zipを、最後にバイナリエディタ Bzをダウンロードし、Noah等を使って全て解凍する。
c2decは解凍する際にパスワードを聞かれるので「sage」と入力する。

cprmgetkey041の書き換え

cprmgetkey041は2007年7月までしか使えないので、lernel32.dllを使って期限解除できるように書き換える。
Bz.exeを起動して、Ctrl+O(Ctrlキーを押しながらOキーを押す)で「cprmgetkey.exe」を開き、Ctrl+Fで「KERNEL32.DLL」と入力してEnterキーを押し、Ctrl+Wの後に「L」と入力してCtrl+Sで上書き保存して終了する。
判らなければ、地デジ録画DVDをrelCPRMでリッピングを参考に。

必要なファイルの準備

適当なフォルダに、これまでに解凍した中からlernel32.dll、cprmgetkey.exe、c2dec.exe、ifocopy.exe(AutoUnCPRM037.cabに含まれている)、dvdread.bat(cprmauto001.zipに含まれている)、dvdwrite.bat(cprmauto001.zipに含まれている)を用意して、dvdread.batとdvdwrite.batのショートカットを作成する。

DVD-R/RW/RAMのCPRM解除

dvdread.batをダブルクリック等して実行するか、マイコンピュータにあるDVDドライブのアイコン(もしくはDVDドライブ内の適当なファイルかフォルダ)をdvdread.batのショートカットにドラッグ&ドロップすれば、コピーワンス解除されたものが(dvdread.batと同じフォルダにある)DVDVRフォルダの中に作られる。ただし、ファイナライズしていないDVD-RやDVD-RWはB's CLiP等を入れていない読めないと思われるので注意。(2010/04/13更新)
DVDフォルダのDVD_RTAVフォルダにあるVR_MOVIE.VROは、ただのMPEG-2データなので動画再生ソフト(Media Player Classic Homecinema等)で開けば再生できるハズ。

CPRM解除したものをDVD-RAMに保存

DVDドライブにDVDレコーダーで初期化したDVD-RAMを入れ、dvdwrite.batをダブルクリック等して実行するか、先ほどと同様にDVDドライブのアイコンをdvdwrite.batのショートカットにドラッグ&ドロップすれば、コピーワンス解除されたものがDVD-RAMに保存される。
このDVD-RAMはDVDレコーダーで再生やHDDへのダビング等が出来るし、HDDにダビングしたものからDVD-Videoを作成することも出来るハズ。

DVD-RAMに書き込みが出来ない場合

Windows XPDVD-RAMを認識するが、FAT32フォーマットでなければ書き込みが出来ないので、DVDレコーダーで初期化したUDF2.0フォーマットに書き込むにはDVD-RAMのドライバが必要になる。
DVDドライブに添付されていない場合は、東芝ダイレクトの海外サイトで配布しているDVD RAM Driver Software for Windows XP/2000をインストールしておけばいい。Unzipして解凍した後は日本語なので安心。

バッチファイルdvdread.batの内容

バッチファイル「dvdread.bat」は以下の内容をメモ帳などで保存して作成できる。(2010/04/13更新)

@ECHO OFF
SETLOCAL
FOR %%I IN (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: %~d1) DO IF EXIST %%I\DVD_RTAV\VR_MOVIE.VRO SET DVD=%%I
IF "%DVD%"=="" ECHO DVD が見つかりません&&PAUSE&&EXIT /B
ECHO ドライブ %DVD% の DVD を使用します
FOR /F "usebackq tokens=1-3" %%I IN (`"%~dp0cprmgetkey.exe" %DVD%`) DO IF "%%I %%J"=="ContentsKey Base64:" SET KEY=%%K
IF "%KEY%"=="" ECHO ContentsKey が読み取れません&&PAUSE&&EXIT /B
ECHO ContentsKey は %KEY% です
ECHO VR フォルダを作成します
IF EXIST "%~dp0VR" RMDIR /S /Q "%~dp0VR"
FOR /R %DVD%\ %%I IN (.) DO IF NOT EXIST "%~dp0VR%%~pnxI" MKDIR "%~dp0VR%%~pnxI"
ECHO VRO ファイルの暗号化を解除しています
"%~dp0c2dec.exe" -R %KEY% %DVD%\DVD_RTAV\VR_MOVIE.VRO "%~dp0VR\DVD_RTAV\VR_MOVIE.VRO"
IF ERRORLEVEL 1 ECHO VRO ファイルの暗号化解除に失敗しました&&PAUSE&&EXIT /B
ECHO IFO ファイルの暗号化を解除しています
"%~dp0ifocopy.exe" %DVD%\DVD_RTAV\VR_MANGR.IFO "%~dp0VR\DVD_RTAV\VR_MANGR.IFO"
IF ERRORLEVEL 1 ECHO IFO ファイルの暗号化解除に失敗しました&&PAUSE&&EXIT /B
ECHO その他のファイル群をコピーしています
FOR /R %DVD%\ %%I IN (*.*) DO IF NOT EXIST "%~dp0VR%%~pnxI" COPY %%I "%~dp0VR%%~pnxI"
ECHO VR フォルダに暗号化解除した DVD が出来ました
PAUSE
ENDLOCAL
EXIT /B

@ECHO OFF
SET DVD=%1
SET DVD=%DVD:~0,1%
"%~dp0cprmgetkey.exe" %DVD%: > "%~dp0CPRMKEY.TXT"
FOR /F "eol=- delims=" %%I IN ('FIND "ContentsKey Base64: " "%~dp0CPRMKEY.TXT"') DO SET KEY=%%I
SET KEY=%KEY:~20%
RMDIR /S /Q "%~dp0DVD"
XCOPY /S /E /I /G /H /K %DVD%:\*.* "%~dp0DVD\"
MOVE /Y "%~dp0DVD\DVD_RTAV\VR_MOVIE.VRO" "%~dp0"
"%~dp0c2dec.exe" -R %KEY% "%~dp0VR_MOVIE.VRO" "%~dp0DVD\DVD_RTAV\VR_MOVIE.VRO"
MOVE /Y "%~dp0DVD\DVD_RTAV\VR_MANGR.IFO" "%~dp0"
"%~dp0ifocopy.exe" "%~dp0VR_MANGR.IFO" "%~dp0DVD\DVD_RTAV\VR_MANGR.IFO"
SET DVD=
SET KEY=
  1. 1行目は実行中のコマンドを表示しない
  2. 2行目はドラッグ&ドロップされたパス名、もしくはコマンドプロンプトから実行した際の1つ目のオプションを環境変数DVDに格納
  3. 3行目はcprmgetkey.exeでDVDドライブを指定して、入っているCPRM対応DVD-R/RW/RAMとDVD_RTAVフォルダのVR_MANGR.IFOからCPRM解除キーを調べ、CPRMKEY.TXTに保存
  4. 4行目はFINDコマンドでCPRMKEY.TXTから「ContentsKey Base64: 」が含まれる行だけを抽出して、FORコマンドで「-」で始まるファイル名を無視(eol=-)、区切り文字なし(delims=)を指定し、環境変数KEYに「ContentsKey Base64: 」が含まれる行を格納
  5. 5行目は環境変数KEYの先頭20文字分(ContentsKey Base64: )より後を環境変数KEYに格納し直す
  6. 6行目はDVDフォルダがあったら削除
  7. 7行目はDVDドライブから全てのフォルダとファイルをDVDフォルダを作成してその中にコピー
  8. 8行目はDVDフォルダのDVD_RTAVフォルダからVR_MOVIE.VROをc2dec.exeと同じフォルダに移動
  9. 9行目はc2decで-Rオプションを指定(RDI PackのCGMS/APSTB/EPNを削除)してVR_MOVIE.VROのCPRMを解除したものをDVDフォルダのDVD_RTAVフォルダにVR_MOVIE.VROとして保存
  10. 10行目はDVDフォルダのDVD_RTAVフォルダからVR_MANGR.IFOをifocopy.exeと同じフォルダに移動
  11. 11行目はifocopyでVR_MANGR.IFOのコピーフラグなどを解除したものをDVDフォルダのDVD_RTAVフォルダにVR_MANGR.IFOとして保存
  12. 12行目、13行目は環境変数DVDとKEYを使い終わったので解放

バッチファイルdvdwrite.batの内容

バッチファイル「dvdwrite.bat」は以下の内容をメモ帳などで保存して作成できる。(2010/04/13更新)

@ECHO OFF
SETLOCAL
FOR %%I IN (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: %~d1) DO IF EXIST %%I\DVD_RTAV\VR_MOVIE.VRO SET DVD=%%I
IF "%DVD%"=="" ECHO DVD が見つかりません&&PAUSE&&EXIT /B
ECHO ドライブ %DVD% の DVD に書き込みます
RMDIR /S /Q %DVD%\
XCOPY /S /E /G /H /K "%~dp0VR\*.*" %DVD%\
ECHO 終了しました
PAUSE
ENDLOCAL
EXIT /B

@ECHO OFF
SET DVD=%1
SET DVD=%DVD:~0,1%
RMDIR /S /Q %DVD%:\
XCOPY /S /E /G /H /K "%~dp0DVD\*.*" %DVD%:\
SET DVD=

動作確認したDVDドライブ

今回使用した環境はThinkPad X40(2371-GDJ)のWindows XP Professional SP3で、DVDドライブはPanasonicのUSB接続ポータブルDVDマルチドライブ LF-P967Cを使用。他にもいくつか確認したcprmgetkey041対応のDVDドライブを以下に列挙。

一応、参考までに対応だった時のログなんぞも。(表示されてる値はそのまま出すとナンなので適当に書き換えてる)

C:\>cprmgetkey e:
CPRM ContentsKey Get Ver 0.41 by taku
MKB_TBL_I: 0
MediaKey: 53 91 48 46 f5 cf 5a 
titleKey: 74 f1 bb 49 31 b2 a0 1b 
disk_Id: 69 03 b3 6e 10 00 d0 12 
ContentsKey: 83 84 9e 4f 93 a4 85 
ContentsKey Base64: AUxJOEjp7F=

C:\>

逆にcprmgetkey041非対応(もしくはCPRM非対応かDVD-RAM非対応)だったDVDドライブも以下に列挙。

一応、参考までに非対応だった時のログなんぞも。

C:\>cprmgetkey e:
CPRM ContentsKey Get Ver 0.41 by taku
Error code: 52400
Error code: 52400
Error code: 52400
Error code: 52400
Error code: 52400
MATSHITAUJDA745 DVD/CDRW1.02302170KME14130133061
msg: 21

C:\>cprmgetkey e:
CPRM ContentsKey Get Ver 0.41 by taku
Error code: 35700
TOSHIBA DVD/HD  X807616 MC0810/03/06
msg: 1

C:\cprmauto>cprmgetkey d:
CPRM ContentsKey Get Ver 0.41 by taku
Error code: 52400
Error code: 52400
Error code: 52400
Error code: 52400
Error code: 52400
HL-DT-STRW/DVD GCC-4242N02010BIBA   03/12/18    
msg: 21

C:\>