小ネタ 2005-008

NintendoDS 非純正ソフトを動作させるのを試みた

NintendoDSをhackして非純正ソフトを動作させる試みが活発化してきている。特にDarkFaderという人物が最初に外付け回路を付加して成功して以来、NDS-PassThroughの手法が現在(2005年4月中旬)までの定番となっている。最近ではNatrium42という人物が小型化した「PassMe」というタイプの回路が公開されたばかりである。DSのBIOSが吸い出しされていたり、タッチパネルやポリゴンを使ったデモソフトが試作されているするのを見て、やってみたくなった。

1.CPLDを使って挑戦
 今回、オプティマイズというサイトで販売されている「カメレオンUSB」というXilinxのCPLDを使った電子工作キットを応用してNDS-PassThroughを製作してみた。とりあえず組み立て終わったのでテストしてみたが、うまく動作しなったので間違いがなかったかチェック中である。


製作したNDS-PassThrough(うまく動作していない)


製作した電子回路

接続は、
 (実カートリッジからROMを外したもの) →(カメレオンUSBのXilinx社XC95144XL)→(DS用スロット部品)→(DS用カートリッジMetroidPrimeHunter体験版)、という接続になっている。

うまく動作しない原因は、配線ミスの可能性が大である。あるいはVHDLというハードウェア記述言語で書かれたソースからXC95144XL用のJEDファイルを作る手順でなにかミスをしているかもしれない。



2.無線で挑戦
 無線版PassMe「WiFiMe」の噂を聞いて、早速試してみた。Panyawoさんのブログを参考にした。
 Corega製の特定の無線LANカードが必要ということで、速攻で近所のパソコンショップに買いに行ったところ、1つ確保できた。
 hack版の無線ドライバのインストール時にはinfファイルをあらかじめ手動で修正しておくのが必要なので要注意である。
 事前にGBA用のフラッシュカートリッジにDS用ソフトを書き込んでおくこと。
 あとは、PCで無線Multibootのホスト用ソフトを起動し、DSでダミーのソフトをダウンロードして実行するだけである。
 結果、ちゃんとDS用のデモソフトを動作させることができた。


無線版は、すごくあっけなく簡単に動いてしまった。先のCPLDのハード製作の苦労が空しく感じてしまう。
CPLD版PassThroughについては、ちゃんと動作するまでモチベーションが維持できそうにないので、とりあえずこのページを作った。


--今後について--
 「WiFiMe」があれば、あとはGBAのフラッシュカートリッジだけでマジコンできるので、すそ野が一気に広がると思われる。
 次の難関は、無線の暗号解読だろう。無線モジュール内のファームウェアが解析の獲物にされてしまうかも。
 個人的にはXport2.0とWiFiMeの組み合わせで色々と試してみたい気がする。




(後日加筆 2005.4.24)
オプティマイズ製PassMeキットでも再挑戦

 オプティマイズというサイトで「PassMe」のキットの販売が開始されたので、入手して試してみた。
結果、うまく動作させることができた。


PassMeキットを組み立てた完成品 (カートリッジの中身を直接半田付けした)


DS本体にセットして、GBA用フラッシュメモリカートリッジ上に書き込んでおいたデモソフトを起動させた





(後日加筆 2005.4.26)
Xport2.0でPassMe

Xport2.0でPassMeできるかどうかを試してみた。Xport2.0キットに付属の書き込みソフトはROMイメージ先頭のGBAヘッダを勝手に書き換えてしまうので、このソフトのソースを改造してROMイメージをそのまま書き込むように修正した。その結果、当然、ROMに書き込んだデモソフトをPassMeで動作させることができた。 しかし、一部のソフトに限ってはFlashAdvanceでは動作するのだが、Xport2.0では正常に動作しなかった。例えばWiFiMeのサイトに置いてあったteapot demoソフトはXport2.0上で正常に動作しなかった。原因は不明である。
今後、Xport2.0のI/Oポートから制御信号をちゃんと出せるかどうかテストしてみたい。うまくいけばDSに周辺機器を接続して色々と入出力して遊ぶことができる。キーボードとかCCDカメラとかは簡単に接続できそうだ。 (ネタがゲームラボ誌のTeamKNOxの連載と似てるが)
(後日加筆、これについては続きを別のページに書いた)

Xport2.0とPassMeをNintendoDSにセットして動作させた



(後日加筆 2005.4.29)
PassMeキットをDSに内蔵する

PassMeキットをDSに取り付けると外にハミ出す部分が多いので、取り付けたまま持ち運ぶことができない。思い切ってDSの中にPassMeを内蔵してしまうというのを試してみた。
そのままでは内蔵するためのスペースが無いので、DSカートリッジのソケット部分の部品を取り外して、PassMeの基板を小さくカットして、その部分に内蔵した。
この改造をしたDSでは、通常のDSゲームカートリッジが挿さらないので開発&解析用に使うか、GBA用ソフトを動かすのに使う。GBAソフトを動作させる時にはPassMeの電源をスイッチで切る必要がある。


左の写真...PassMeとカートリッジの中身をDSに内蔵するレイアウト案、 右の写真...実際に内蔵した結果


PassMeを内蔵したNintendoDSの外観 (外に出っ張らないようになった)




(後日加筆 2005.4.30)
DSのファームウェアを書き換えて、PassMe不要になった

PassMeの代わりの動作をするファームウェア「FlashMe」というのが配布されている。早速入手してみた。
ファーム書き換えソフトを動作させるためPassMeを使って起動した。試してなかったが、WiFiMeでも出来るかもしれない。
ファームウェアを書き換えた結果、ちゃんとデモソフト等がフラッシュカートリッジから起動するのを確認できた。
DSゲームソフトやGBAゲームソフトも今まで通りに動作させることができるし、PassMeを挿さなくてもよいので便利である。
苦労してDSにPassMeを内蔵したのが無駄になってしまった。


ファーム書き換えソフトを動作するためPassMeを使った、成功したのでPassMeが不要になった


ファームウェアの改造については、現在(2005.4.30)のところ、「PassMeの機能を追加する」というのと「無線マルチブートの認証チェックコードをすっ飛ばして、非純正ソフトを無線マルチブートできるように改造する」というのが出ている。
特に後者の無線マルチブートのhackは、認証チェックの暗号の鍵さえ見つかればすぐにでも未改造のDSで無線マルチブートできるようになるように期待を持たせてくれる。

無線の鍵は、前にも書いたが無線モジュール上に実装されているシリアルフラッシュメモリLE25FW203の中のファームウェアに埋め込まれている可能性が高いと予想していた。無線モジュールのファームウェアの吸い出し自体は非常に簡単だったので、あとは解析が進めば鍵が見つかるのではないかと思われる。

と思っていたが、RSA公開鍵暗号(RSA-1024)らしいので、鍵は記録されていないのね。とほほ。



(後日加筆 2005.6.2)
無線モジュール上に実装されているシリアルフラッシュメモリLE25FW203の中身というのが、そもそもDS本体のファームウェアなのだそうだ。いままで別物だと誤解していた。 ファームウェアの吸い出しはできていたが、解析が進んでいなかったので気が付かなかった。 (ちなみに一部の初期DSは、実装されている部品が異なっており、M45PE20で搭載されている)

もし、ファームウェアの書き換えを失敗した場合には、直接この部品に配線して書き込むということをすれば、復旧することは可能である。その際には大合奏バンドブラザーズのセーブメモリと同じ部品なのでBBMEのソフトをベースにDSファーム書き換えソフトを作ればよい。自分のところではファームウェア書き換えを失敗していないが、実験として試してみようか。



(後日加筆 2005.8.12)
最近発売された新色のレッドのDSなどはPassMeとかWiFiMeが使えないように対策されたそうだ。自作ソフトを起動できなくなってしまったわけである。 あと、やはり最近の7月23日に発売された中国版のDS(神遊機 iQue DS)も同様に対策済みと思われる。

そろそろ市販マジコンが出るかという動きがあったのが、未然に任天堂が防いだと言える。自作ソフトを動作させたり市販ソフトをバックアップして改造したりするマジコンには罪はないのだが、悪用が目に余るので対策を余儀なくされたようだ。特に、著作権について法的対策が効かない実質無法地帯の国でゲーム資産がタダ喰いされ放題な状態なので、影響がネット経由で日本や欧米にも出て来そうだからなあ。レボ発売迄またはレボ発売後もまだまだ他にも(GBA,GBMとかも)対策が続けられると思う。

さて、PassMe等の他に自作ソフト起動のための何らかの穴がないだろうか? GBAカートリッジ部分のアドレス空間でのソフト実行はできなくなったみたいなので、なんらかの方法でメインメモリ上にコードを持ってきて実行しなければならないが、難しそうだ。

大合奏バンドブラザーズというソフトが追加の楽曲をGBAスロット用のオプションカートリッジとして発売するそうだが、曲データだけでなく追加のプログラムコードもそのカートリッジに入っているならば、そのオプションカートリッジの改造が可能か? バンブラ以外でもそういう連動モノが出てくると可能性があるかもしれない。

何かのゲームのセーブデータを改変して異常値を書き込むことによって、そのデータをロードしたソフトが誤動作を起こして結果として任意のコードを実行することができないだろうか? セーブデータのチェックが甘そうなソフトはありそうに思える。

DSのゲームカートリッジのマスクROMは暗号化機能付きのMacronix社のものが使われている。PassMeは暗号化されていない部分の信号に割り込んでジャンプ先を改変していた。この暗号は無線に使われているRSA1024(ほとんど鉄壁)よりは弱そうなので、コストを考えなければ自作の暗号化機能が作られてしまうかもしれない。そうすれば暗号化されている実際のソフト本体が改変できるので好きなコードが実行できるかもしれない。

無線については、ソフトが認証込みの真正なものは無線ダウンロードして実行できるが、そうでないものはもともと実行できない。特別にWiFiMeのようにGBAカートリッジに飛ばすだけの改変が可能な穴があったが、今回塞がれてしまったらしい。認証に関する部分は任天堂がよほどのポカをしないかぎり流出はしないだろう。最近展開中の無線ダウンロードの基地局の機材が一度回収されているそうだが、何か改修しないといけないことがあったのだろうか? 中身は普通のDS本体ハードをそのまま使っているみたいなので、認証を簡単に発行しちゃうようなチェックの甘い配信側ソフトがそのDSに入ってたりすると面白いのだが。


つづく