前回に引き続き、システムをすこし紹介します。
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では動かないようにしてあることがわかりました。
さらに、cpuの特定レジスタを読んでZ7213上かどうかも見ているようだ。
— ひろみつ(honeylab) (@bakueikozo) 2020年3月22日
ということは、只のリマークじゃないの?というのは間違いで、少なくともリブランド以上なのかな。
そして、この帰ってきてる文字列には見覚えがあるなw pic.twitter.com/ADvKHwC8QV
現在、このZ7213はPCエンジンミニ、メガドライブミニにしか使用されていません。
また、まえのブログの記事で「不明」としていた6ピンのチップ、これは特定のバイト列に対して演算結果を返す、いわゆるセキュリティチップの働きをしていることがわかりました。
なるほどやはりPCエンジンminiに載っててメガドラミニには載ってなかった謎の6pin、セキュリティ用のデバイスだった。
— ひろみつ(honeylab) (@bakueikozo) 2020年3月22日
起動時(BOOT0)と、エミュレータの実行ファイル内の二回、デバイスに投げたバイト列に対して帰ってきた値をチェックしてる pic.twitter.com/ySHyjHhCON
このセキュリティチェックが通らなければブートローダすら動作しないことが確認できました。
上記のように、いくつかのコピーガードのようなものが設けてあることが確認されました。しかし、本当に一般ユーザが読みだせない領域を使ったり、高度な認証を行ったりするようなものではありません。
メールの本文と別に、パスワードを送る程度のセキュリティです。
(君とこの会社の話してるのよ。君だよ君。びくっとするんじゃないよ。)
それでも、メーカとしては「コピー防止策を行った」という事実による体制のアピールと、著作権者への許諾に対する姿勢、お偉いさんへの承諾など、それなりに重要なことなのだと思います。