以前にiQue Playerを入手したさいに少し触っただけでほったらかしにしていましたが、2018年ごろにiQue Playerがハックされ一時話題になったのを思い出し、「そういやN64のローカライズされたロムが入っているんだったなぁ」と思い立って実際にやってみることにしました。
iQue Playerは中国向けの書き換え可能なN64互換なゲーム機で、初期のころは店頭に設置された専用の端末でゲームを追加したり、内蔵OSを更新することができましたが、途中からWindowsパソコン向けにiQue@Homeというサービスが実施され、ユーザーのパソコンに専用のソフトをインストールしUSBケーブルで接続するだけでパソコン上で書き換えができるようになりました。そのインストールされたソフトの中にその後のハックで重要となる”ique_diag.exe”という診断プログラムが一緒に入っており、これを利用するとiQue PlayerからファイルやNAND全体の読み書きができることが判明します。
AES暗号のCBCモードの脆弱性及びiQue Playerのセキュアカーネルの脆弱性を組み合わせて
1.AES暗号化されているロムファイルに任意のコードを埋め込み(Padding oracle attack)
2.書き換えたロムファイルと任意のコードが書かれたセーブデータファイルを本体に転送
3.ゲームを起動して任意のコード実行
という手法でiQue Playerをハックできるようになりました。
AES暗号のCBC mode脆弱性については下記を参考にしてください。
用意するもの
iQue Playerハックに必要なものはざっくり下記のとおりです。
・USB接続可能なiQue Player
・USB 2.0 Mini-Bケーブル
・メインWindowsPC
・WindowsXP 32bit搭載のPC
・各種ソフト
パソコンですが、メインPC以外にWinXP 32bitが動作する環境が必要です。これはiQue PlayerのドライバがXP32bitしか存在しないためです。USB接続できればいいのでVirtualBoxやVMWarePlayerなどに仮想マシンを準備してもOKです、というかこの方が便利。ただしXPなのでネットワークに接続することは避けてください。
一番重要なのがiQue Player本体で、製造時期や本体の更新具合によりUSB接続に対応した本体とそうでない本体が存在します。見分け方としては、外箱にiQue@Homeのロゴが入ってるシールが貼られているもの、起動時に「アイキュー」と喋る、起動時の左上に「神游在线」の文字がある場合はUSB接続対応版です。手元にある本体を比べてみるとUSB接続対応版は本体裏が若干緑がかっているので見分ける判断になるかもしれません。
もしUSB非対応の場合、USB対応の本体があればメモリーカードの入れ替えで内蔵OSの更新をすることでUSB対応にすることが可能です。(2台も持っている人は少ないだろうからない場合は諦めてください。)
私は所有していた本体がUSB非対応だったため、もう一台買いたしました。
にだいめ pic.twitter.com/cbQHrFJ0jY
— Nekokabu (@Nekokabu) April 3, 2022
各種ソフト
iQue@Home用のパソコンのクライアントソフトですが公式サーバ上からは削除されてしまっているためInternet Archiveのバックアップからダウンロードします。205MBくらいあります。
https://web.archive.org/web/20191111233321/https://www.ique.com/products/download/iQue@Home-complete.rar
バイナリエディタはStirling等、使い慣れたものを用意。
それ以外のソフトはiQuebrewのdiscordサーバ上で配布されているのでそちらを探すか下記URLから用意してください。
- iQueDiagExtend v0.5
https://github.com/iQueBrew/iQueDiagExtend
- iQueTool 0.4a
https://github.com/emoose/iQueTool
- ique_cbc_attack.c
https://gist.github.com/pixel-stuck/e6e6d2148102b62b527d2777acefbf70
- Proof-of-Concepts for the iQue Player (BB Player)
https://github.com/iQueBrew/bbp_pocs
ique_cbc_attackはCソースコードのみの配布なのでご自身でコンパイルしてください。Proof-of-Conceptsのcompiled\bootrom_v2_dumper\005d1870.staが後で出てくるv2_dump.staと同等のものです。ただファイルサイズが32KBあるのでバイナリエディタ等で0x0000~0x3FFFまでの16KBを005d1870.staとして改めて保存してください。
最初に
まずUSBケーブルを接続していない状態でiQue Playerを起動しDr.マリオ(马力欧医生)を起動し、適当に設定をいじったり遊んだりしてセーブデータを作成します。ある程度遊んだら電源を軽く押してしばらくするとiQue Playerのメニュー画面に戻るのでまた電源を押して本体の電源を落とします。
iQue@Homeクライアントをインフトールし、iQue PlayerとWinXPパソコンとをUSBケーブルで接続しiQue Playerの電源を入れるとパソコンで認識されるのでドライバのインストール等終わらせます。次にiQueDiagExtendを実行し、「B」を押して接続を初期化します。
今度は「1」を入力して本体のNAND情報をバックアップしましょう。20分くらいかかりますがiQueDiagExtendと同じフォルダ内にnand.binとspare.binが保存されるので別のフォルダにコピーするなり大切に保管しておいてください。最悪このファイルからデータを復元できます。
任意コード実行の準備
ここから先の手順でDr.マリオのセーブデータが上書きされる、Dr.マリオがプレイできなくなる(後から戻すことも可)ので注意してください。
iQueDiagExtendで「B」で接続初期化後(1.の続きの人はそのまま)、「3 005d1870.rec」を入力して005d1870.recをパソコンへ保存します。ちなみにこれがDr.マリオの暗号化されたロムファイルです。
005d1870.recをique_cbc_attack.exeのあるフォルダにコピーし、コマンドプロンプトを立ち上げ下記のコマンドを入力します。
ique_cbc_attack -p 3C088001350818E03C09000135298ED0 -r 005d1870.rec -d 081F0000000000000000000000000000 -o 1000
ちなみにファイルのオフセット0x1000にある
暗号化前のデータ 3C088001350818E03C09000135298ED0 を
081F0000000000000000000000000000 に書き換えろ
という内容です。「j $807c0000」という0x807c0000へ分岐する命令を埋め込みます。0x807c0000はゲームのセーブデータが一時的に保存されるアドレスのようです。
AES-CBC attack, by stuckpixel
successfully injected 1 blocks!
と表示されれば成功です。
ique_cbc_attackで書き換えた005d1870.recをiQueDiagExtendのあるフォルダにコピーし、「4 005d1870.rec」と入力し本体へ書き込みます。
「v2_dump.sta」を「005d1870.sta」へリネームし(または「各種ソフト」で用意した「005d1870.sta」を)iQueDiagExtendのあるフォルダにコピーし、「4 005d1870.sta」と入力し本体へ書き込みます。
「Q」を入力して接続を終了し、iQue Playerの電源ボタンを押して電源を落とします。これで準備が整いました。
キーのダンプ
USBケーブルを抜いた状態でiQue Playerの電源ボタンを押してiQue Playerを起動します。タイトル画面が表示されたらメニューへ進みDr.マリオを起動します。
Dr.マリオが起動するものの黒い画面のままになります。2~3秒したら電源ボタンを軽く押します。しばらくするとiQue Playerのメニュー画面に戻るのでまた電源ボタンを押して本体の電源を落とします。これでキーが保存されたはずです。
iQue PlayerをUSBケーブルでつないで電源を入れパソコンと接続し、iQueDiagExtendで「B」で接続初期化後、「3 005d1870.sta」を入力しパソコンへ保存します。
保存された005d1870.staをバイナリエディタで開き、v2_dump.staを使用した場合は0x600~0x6FF、それ以外は0x20CC~0x21CBの256バイトに0x00以外の何かしらデータが書き込まれていれば成功です。V2.binとして保存しておきましょう。このファイルはiQue Player本体ごとに違う固有のキーを含むため取り扱いに注意ください。
この後はhackit_patcherを当ててticket.sysを編集して・・・と行きたいかもしれませんが目的はiQueのロムファイルなのでその辺はオリジナルのガイドを参考にしてもらうとして先へ進みます。
ファイルの展開
バックアップしたnand.binとspare.binをiQueTool.exeのあるフォルダにコピーし「nand_extract.bat」を実行すると「nand.bin_ext」フォルダ内にファイルが展開されます。展開されたファイルのうち、「*.rec」の拡張子のファイルがロムファイルになります。
ファイルの復号化
iquecryptのあるフォルダに「nand.bin_ext」フォルダと「V2.bin」をコピーし、ゲームごとのキーを取り出します。
例えば「004f60b7.rec」のキーを取り出すには下記のように入力します。ticket.sysは「nand.bin_ext」に出力されたものを指定してください。
iquecrypt extract -ticket nand.bin_ext\ticket.sys -cid 004f60b7
最後にファイルを復号化します。
iquecrypt decrypt -rec nand.bin_ext\004f60b7.rec -v2 V2.bin -fiv 004f60b7_content_iv.bin -rsys nand.bin_ext\recrypt.sys -cid 004f60b7
output.binが復号化された状態で出力されていてればOKです。
他のファイルも同様の手順で復号化します。
微妙にN64本体と仕様が違うためセーブできなかったりそもそも起動しないいことが多いですが一部のロムはエミュレーターで動作しました。
iQue Playerからロムをダンプしました pic.twitter.com/e90KILs8FA
— Nekokabu (@Nekokabu) April 5, 2022
以前紹介した64DDの吸い出しのように機器を持っている人、やってみようと思う人は大変少ないと思いますが、是非チャレンジして見てください。