CRCを任意の数値に書き換える方法

ROM抽出,エミュレーター,日常

任意の数値に変更可能

本来は邪道も邪道なので、褒められる話ではないのですが
どうしても最近の抽出したROMでは著作者名の変更や
自主表現規制によってROMのデータが不一致化することがあります。

そうなると監査を通過できなくなってしまい
プレイできるけど未所持になってしまいます。

Windows版では問題なく動作してくれても
別プラットフォームで動作するLibRetro等では
CRC違うから動作しないよ!と無情に返される事もしばしば。

そのため、見た目だけは監査を通過できるようにごまかそうと言う事です。

利用するプログラム

こちらのサイトから、好きな環境で動作する物を選んで下さい
事例では一番使いやすいPython版を利用していますが
起動部分以外は同じなので、各自読み替えて貰えれば。

書式

py forcecrc32.py 対象のファイル名 書き込む場所(バイト指定) 書き換えたいCRC

Windowsでの書式の一例です。
 バックアップを取らないで書き込んでしまうので

必ず対象のバックアップしておきましょう。

実例

コナミのAnniversary Collection Arcade Classicsから抽出した
Vulcan Venture(海外版のグラディウスII)のCRCエラーを解消します。

FinalBurnNEOで確認

Vulcan Ventureを右クリック
View Game informationをクリック

Rescan Romsetをクリックすると
サウンドRomの 785_f02.7cのCRCが異常です
ファイルのCRCは7EE8CDCD、正常な物はC39F5CA4と怒られます

バイナリエディタで確認

Vulcan.zipから785_f02.7cを解凍します
バイナリエディタで中身を確認します

綺麗なまでに00で埋め尽くされていて、完全なダミーファイルとなっていました
なぜかグラディウス系の移植は、音源や音声が弄られる事が多い印象ありますね
おそらく綺麗な音声に差し替えしているのでしょう。

ちなみに中古基板からサウンドRom吸い出しすれば正常音声で遊べます。
が、ジャンクでも日本版グラディウスIIが
7万円する時代なのでここは妥協でCRCをごまかします。

実行例と解説

py forcecrc32.py 対象のファイル名 書き込む場所(バイト指定) 書き換えたいCRC
 py forcecrc32.py 785_f02.7c 131068 C39F5CA4

それぞれに当てはめると上記になります。

バイト数はプロパティから確認します。
128kbは131072バイトで、末尾4バイトを書き換えるので4を引きます。
そうすると131068と言う数字になります。
CRCはFinalBurnNEOの警告が出しているC39F5CA4になります。

実行すると上記のように検算が行われ確認が取られて完了します。

バイナリエディタで確認

末尾4バイトがDE 3A D2 4Bに書き換わりました。
末尾では無く中間地点などを書き換える際には
バイト指定がズレたりする事もあるので、必ず書き換え後に確認しましょう。ヨシ!

FinalBurnNEOで再確認

Romset OK!が出ました。これで所有扱いになり
正常なRomとして所有リストに表示されるようになります。
ただしサウンドRomデータは0フィルなので音声が一切なりません

ダメな事もある

特に古いアーケードゲームではROMチェックが走る製品があります
こういった製品は真正性のチェックエラーで止まったり、起動しないことがあります。

また、ファイルサイズが小さすぎて書き換え場所がなかったり
書き換えることで動作に支障をきたして、エラーになる事もあります。

試行錯誤で場所を変えるか、諦めるか
CRCエラーを無視して実行できる環境に切り替えると言った感じになります。

例)libRetroのFBNEOではエラーで起動不能でも(何か回避策あるっぽい?よく分からない)
Mame2003PLUSのコアではエラーを無視するオプションがあったりします