honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

PCエンジンminiのファイルシステムとコピープロテクト

honeylab.hatenablog.jp

 

前回に引き続き、システムをすこし紹介します。

PCEMiniでは内蔵ストレージはeMMCが使われています。
これは、SDカードの前身であったMMCの拡張のようなもので、
シリアルもしくは少数のパラレルI/Oでアクセスし、
LinuxからはMMCカードと同じように見えます。

また、u-bootのMMCサブシステムからも認識されています。 

 

Partition Map for MMC device 2  --   Partition Type: DOS

Partition     Start Sector     Num Sectors     Type
    1              6287360         1396736       b
    2                73728           16384       6
    3                    1         6197248       5 Extd
    5                90112            4096      83
    6                94208           16384      83
    7               110592          204800      83
    8               315392         1376256      83
    9              1691648         4587520      83
   10              6279168            8192      83

このうち、p6はvfatパーティションで、LinuxのKernelイメージであるuImageファイルが保存されています。p7はrootファイルシステム、p8はエミュレータから一時的に展開されるゲームイメージ置き場、p9には圧縮・暗号化されたゲームイメージの保存場所です。

 

ところで、このようにファイルが普通に見えているので、コピーも簡単にできてしまいそうです。それはメーカとしては困ったものですね。

そのため、いくつかのコピー防止機能があるようです。

前の記事にも書きましたが、ゲームデータはすべて一つのファイルとインデックスにまとめて保存して暗号化され、一般人には解読できないようになっています。
これにより、個別の吸い出したゲームデータが流通しにくいようにしてあるのだと思います(が、m2engageは長らくWiiなどのバーチャルコンソールに使われてきたエンジンであるため、このフォーマットは解析され、展開するツールがじつは存在しています。そして、複合化キーはm2engageの中に納まってしまっています…)

 

また、個別のゲームデータに加え、ミニ系ゲームマシンではゲームセレクトのUIなども重要な知的財産権です。そのため、全体のROMをコピーされて別プラットフォームで動かされることも困ります。

調べてみたところ、CPUの特定のレジスタに書かれたZ7213専用のデータを読み込むことで、ほかの互換SoC,例えばR16やA33では動かないようにしてあることがわかりました。

 


現在、このZ7213はPCエンジンミニ、メガドライブミニにしか使用されていません。

また、まえのブログの記事で「不明」としていた6ピンのチップ、これは特定のバイト列に対して演算結果を返す、いわゆるセキュリティチップの働きをしていることがわかりました。

 


このセキュリティチェックが通らなければブートローダすら動作しないことが確認できました。

 

上記のように、いくつかのコピーガードのようなものが設けてあることが確認されました。しかし、本当に一般ユーザが読みだせない領域を使ったり、高度な認証を行ったりするようなものではありません。
メールの本文と別に、パスワードを送る程度のセキュリティです。

(君とこの会社の話してるのよ。君だよ君。びくっとするんじゃないよ。)

 

それでも、メーカとしては「コピー防止策を行った」という事実による体制のアピールと、著作権者への許諾に対する姿勢、お偉いさんへの承諾など、それなりに重要なことなのだと思います。