小ネタ 2008-016
NintendoDSのカートリッジのセーブデータの解析 その5

(NintendoDSのゲームカートリッジに保存されているセーブデータの読み出しと書き込み方法について解析した結果の記録。)



- 大合奏バンドブラザーズDXの新しいチップについて -

2008年6月26日、大合奏バンドブラザーズDXが発売された。このカートリッジ基板について、調べてみた。(2008-06-26)




写真の基板のまんなかのMXというロゴのチップがメインプログラム収納用のマスクROM。(3Dメモリではない)

写真の基板右側のST製のM25P64というチップがセーブデータを記録するためのシリアルFLASHメモリである。
容量は64Mbit (8M byte)。 実際にメモリのIDを読み出した結果も、M25P64のデータシートの値と一致した。

今までに出ていた中ではポケモン ダイヤモンド&パールやえいご漬けで4Mbitのものが最大だったのだが、今回いきなり巨大になったので驚いた。
大合奏バンドブラザーズDXでは、100曲のデータをダウンロードできるとあり、これを記録するためにこれだけの大容量が必要になったのだろう。
コストはどのくらいなのか気になる。


以前に、DSカートリッジのセーブデータの読み書きを試したりしている。
従来のメモリと同様、前に作ったI/Fのハードウェアはそのままでソフトウェアだけ直せば、セーブデータのバックアップとか消去ができる。
消去すると出荷状態に戻るので、また別の100曲をダウンロードすることができると思われる。(後日加筆 無理かも? 詳しくは後述)
BBMEのようなソフトを作れば楽曲の編集とか可能だろう。


写真のM25P64のチップにSTというロゴがあるのだが、データシートがSTMicroelectronics社のWebのページに無かった。
新しいNumonyxという会社で取り扱っている。
この会社は、2008年4月1日にIntelとSTMicroelectronicsと他数社のジョイントベンチャーとして設立されたらしい。



(後日加筆 2008-06-30)
64MbitのシリアルFLASHメモリの採用は、今回が初めてではないようだ。
DS文学全集のセーブ用メモリが64Mbitだそうだ。

DS文学全集を入手して調べてみた。DS文学全集のセーブ用メモリはM45PE80(8Mbit)だった。



(後日加筆 2008-07-01)
Panyawoさんのブログでも分解調査されており、基板上のSL1について言及されている。

> >SL1
> 3番ピンに繋がっているらしく、そこは
> Write Protect/Enhanced Program supply voltage (W/VPP)
> だそうで

さらに、カートリッジ中身の基板上の白字のシルク印刷で"FLASH WP"と印刷してあるのが見える。
このWPというのはWrite Protectの意味だと思われる。
(FLASHメモリの一部分はWrite Protectで保護することが可能な保護領域となっている。)

Write Protectがどのように機能しているか推測すると、
(1) カートリッジ組み立て直前に基板のSL1(short land)を短絡させてプロテクトを解除し、1つ1つ個別の内容(ID?)をFLASHメモリの保護領域に書き込んでいるかも?
(2) カートリッジ組み立て後は、SL1が殻の中にあるためプロテクト解除できないので、FLASHメモリの保護領域は書き換えや消去が不可能。
(3) ユーザーの曲ダウンロード時には、カートリッジ毎の個別のIDをチェックして、サーバー側で個別のDL回数を管理しているかも?
(4) 個別IDが"正しく無い"ような不正アクセスをチェックしている? 当面そういうアクセスを拒否しないで記録だけ集める? (後日加筆 2008-07-02 アクセス拒否するようになったっぽい?)
(5) FLASHメモリのWrite Protectの有無をソフトでチェックして、Protectが無い場合、正規のカートリッジで無いと判別することも可能かもしれない? 正規品判別のコーディングを定型のチェックで検出できないように工夫してあると効果的か? 今回はここまでやってないかも?



(後日加筆 2008-07-02)
カートリッジ個別にIDが書き込まれているか、詳しく調べようとしているのだが、既にPanyawoさんのブログでPanyawo氏が調べた結果が出ていた。

> ユニークIDっぽいのが320bit(40byte)の2カ所だから
> 2セクタ分にプロテクトが掛かっててる感じかな?
> ちょうどStatus Registerが001のときと一致する

40バイトのIDっぽいものが書き込まれているそうだ。

以前、3Dメモリで個別のIDを使うようになるかもしれないという予想があったが、3DメモリのメーカーのMatrixがSanDiskに買収されてからはそういう積極的な開発がされていないようだ。実際に3Dメモリに個別IDを書き込むには、そういう装置とか工程とかのコストが必要で、それが投資できなかったのだろうか?

シリアルFLASHメモリに個別IDを書き込むのは難しいのかというと、全然難しいことでなくて既に昔からDS本体のファームウェアの書き込みで実現されている。DS本体のファームウェアも同様のシリアルFLASHメモリを使っており、これに1台1台固有のMACアドレスが書き込まれている。既に実現している技術なので、ゲームカートリッジ用に応用することも容易だったと思われる。

従来のM45PExxシリーズで個別IDが実現していなかったのは、Write Protectによる保護領域のサイズが固定だったのでID等のために領域を割くと書き込みできる領域が少なくなってしまうためだろう。今回使われたM25Pxxシリーズは保護領域のサイズを変更することが可能である。この機能を使って保護領域を必要最小限に小さく設定してあると思われる。

40バイトのユニークIDっぽいものは、書き換え対策されているのだろうか? 40バイトの一部がチェックディジットになっているのかな? もしチェックがないとしたら簡単に偽装されてしまうのでヤバそうだ。
ちなみに、DS本体ファームウェアのMACアドレス部分はCRCでチェックされている。



(後日加筆 2008-07-03)
色々検索していて見つけたのだが、DSのゲームカートリッジに使われているマスクROMのメーカーMacronix社もシリアルFLASHメモリを作っているようだ。
今回のM25PE64と同じ容量の64Mbit製品で、MX25L6405という製品がある。
いずれ、DSのセーブ用メモリのバリエーションにMacronix社のシリアルFLASHメモリも加わるかもしれない。コストがNumonyxに対抗できれば。

MacronixのマスクROMは、汎用のマスクROMに保護用の暗号機能を内蔵した特別な"任天堂仕様"のマスクROMを製造している。
それと同様、セーブ用メモリについても、汎用のメモリ+何かコピープロテクト用の機能を追加した"任天堂仕様"のシリアルFLASHメモリを作るかもしれない。




(後日加筆 2008-07-17)

ドラゴンクエスト5というゲームで何か新しいプロテクトが搭載されているらしい。

入手して、中身を見てみた。





大きい方のICは、Sandisk製の3Dメモリである。ゲームのメインプログラムの格納用。

小さい方のICは、セーブデータ用のシリアルフラッシュメモリらしい。違った。シリアルEEPROMのようだ。容量は512kbitらしい?
今までに見たことがないタイプだが、これに何か仕掛けがあるのだろうか? メーカーとか品番を調べ中。

(後日加筆 2008-07-23)
セーブ用ICのメーカーや品番はわからずじまいである。誰か分かったら教えて欲しい。
以前に作ったセーブデータ読み書き用ソフトで正しく読み書きができなかった。原因を調べ中。

(後日加筆 2008-08-08)
以前に作ったセーブデータ読み書き用ソフトでは正しく書き込みが出来なかったのだが、1バイト書き込む毎に読み出し処理を入れたら正しく書き込むことができるようになった。そのかわり書き込みには凄く時間が掛かるようになってしまった。



(後日加筆 2008-08-12)
ドラゴンクエスト5のマジコン対策プロテクトは、基板上の部品から判断するとハード的なものではないようだ。
ソフト的に純正ROMカートリッジかマジコンかを判別するには、マジコン固有の挙動を判別すればよいので、方法は色々とある。
例えば、各マジコンに固有のAPIでSDカードにアクセスしてみるとか、マジコンのファームウェアアップデートのAPIにアクセスしてみるとか。
そういうチェックルーチン各種が毎回ゲームソフト内に形を変えて仕込まれると、マジコン側は毎回個別にパッチをしないといけなくなる。
そうすると、コピープロテクトを除去する装置の販売は日本では禁止されているために、マジコンを売るのが違法になってしまう。
実際に、任天堂がゲームメーカー各社と一緒にマジコンを売っている会社に訴訟を起こしている。

いわゆるModチップの場合には、最初は中に無害な合法ファームウェアを入れた状態で販売して、あとで客が違法なファームウェアを勝手に上書きするという形で販売されたりしていたが、日本ではそういう形でのModチップ販売まで駆逐されている。

DSのマジコンの場合どうなるのだろうか。駆逐されるのかなあ。