GitHubで、zoogie氏がNintendo 3DSに用意されたSAFE_MODE(セーフモード)のアプリケーションに存在する脆弱性を利用した新しいハック
unSAFE_MODEは最新ファームウェア(現時点では11.13.0-45でも有効です。
ただし、古いファームウェアには下限が存在します。Old3DSの場合は6.0.0-12から11.13.0-45(最新)まで
new3DSの場合は8.1.0-18から11.13.0-45(最新)まで
となっています。
3DSでは本体の更新を行う際、エラーが出て更新できないときに備えて強制的に本体更新を行うための、いわゆるリカバリーモードが用意されています。
このリカバリーモードはSAFE_MODEと呼ばれます。「L+R+A+十字ボタン上」をすべて押しながら電源を投入すると本体更新の画面が表示され、「OK」をタッチすると本体更新が可能になるというものです。このとき起動するアプリケーションがSAFE_MODE sysupdaterです。
SAFE_MODE sysupdaterは実は3DSのファームウェア1.0のときのものと同じものなのです。SAFE_MODEではない通常のsysupdater(MSET:本体設定)と同じもののように見えますが実は別物で、通常の本体設定の方にも同様の脆弱性がファームウェア3.0までは存在していました。
つまり、通常使う本体設定のsysupdaterの部分はとっくに修正されているものの、何らかの理由でSAFE_MODEのsysupdaterは初期の脆弱性が存在する状態から更新されていないのです。
SAFE_MODE sysupdaterが起動するとアクセスポイントを検索するために3つのWi-Fiスロットをチェックしに行きます。有効なアクセスポイントが見つからなかった場合インターネット設定で設定を変更できるようになります。
ここで「接続先1/2/3」→「設定変更」→「Proxyの設定」→Proxyの設定を「する」を選んで「詳細設定」→「Proxyサーバー」で本来ならプロキシサーバーを入力するためのオンスクリーンキーボードが出てきます。ここでの入力の長さチェックが存在しないために、それを利用してコードを実行できるようにしたのがunSAFE_MODEです。
通常のリカバリーモード(SAFE_MODE)はインターネットに接続して本体を更新することになります。起動していきなりSAFE_MODEになるため、インターネット接続の設定するところがありません。インターネット接続が確立しなかった場合インターネット接続設定画面が開けるようになります。ここでのプロキシ設定で、選択するとexploitとして使えるWi-Fi設定を何らかの形で3DSヘインジェクトしてやる必要があります。これがunSAFE_MODEの肝になります。
このインジェクトしたWi-Fi設定というのがポイントです。動作としては下記動画をご覧下さい。
この設定のインジェクトをまず行わなければなりません。zoogie氏は
A) PICHAXXを使う方法
と
B) Bannerbomb3を使う方法
の2種類を推奨しています。
A) PICHAXXを使う方法
1)いきなりで申し訳ありませんが、細かく書くと大変なので詳しくは割愛します。この方法はあまり推奨されないらしいので全体として軽く流します。詳しくは『ポケモンピクロス』で3DS Homebrew Launcher起動するPICHAXXの記事を参照して下さい。
ただし、PICHAXXで利用するペイロードotherapp.binはunSAFE_MODEをダウンロードして解凍したotherapps_with_CfgS
の中にあるペイロードを利用します。
具体的にはold3ds_JPN.bin
またはnew3ds_JPN.bin
のいずれかです。自分の3DS(oldかnewか)に合わせて選びます。
2) old3ds_JPN.bin
またはnew3ds_JPN.bin
のペイロードをotherapp.bin
とリネームしてSDカードのルートにコピーします。
3) PICHAXXを起動してslotToolを実行し、最初に出てくるオプションを選択すると3DSの電源が落ちる
4) usm.binとLuma3DSのboot.firmをSDカードのルートにコピーする。
5) L+R+A+十字ボタン上をすべて押しながら電源を投入し、3秒後にボタンを離す。
6) 本体更新の画面が表示され「インターネットに接続して本体を更新します。よろしいですか?」と聞かれるので「OK」をタッチする。
7) 本体更新についての承認画面が出るので「同意する」をタッチする。その後「ACアダプタをさすことをおすすめします。」画面になるので「OK」をタッチする。
8) アップデートは失敗し、アクセスポイントが見つからないというエラー画面になるので「OK」をタッチする。
9) 「インターネットの接続設定をしますか?」と聞かれるので「設定する」をタッチする。
10) 「接続先1」→「設定変更」→(画面右の矢印を押して右画面へ移動する)→「Proxyの設定」→Proxyの設定を「する」の状態で「詳細設定」→発動!以下略。次のBannerBomb3を使う方法と以下同じです。
B) BannerBomb3を使う方法
zoogie氏のチュートリアルだと自分でPythonスクリプトを走らせたりと少し面倒なので、そのあたりをウェブサーバー側でやってくれる3ds.hacks.guide/が公開されたのでそちらを紹介します。
1. 事前準備
1) unSAFE_MODE-bb3 toolをPCのウェブブラウザで開く
2) PC上に保管しているmovable.sed
を選択してアップロードする状態にした上でDownload unSAFE_MODE-bb3 archive
をクリックする。unSAFE_MODE-bb3.zip
がダウンロードされるので解凍するとexploit DSiWare(F00D43D5.bin
)とSAFE_MODE exploitデータ(usm.bin
)が入手できる。
※movable.sed
に関してはPICHAXXの記事に書いてあるものと同じなので参照のこと。長くなるので省略します。
3) 3DSの電源を落とした状態でSDカードを3DSから抜き出し、PCにマウントする。
4) Luma3DSのboot.firm
とboot.3dsx
をSDカードのルートにコピーする。
5) 先ほどダウンロードしたunSAFE_MODE-bb3.zip
のSAFE_MODE exploitデータ(usm.bin
)もSDカードのルートにコピーする。
6) SDカードのNintendo 3DS
/ [32文字の長いフォルダ名:ID0]
/[別の32文字の長いフォルダ名:ID1]
/ Nintendo DSiWare
を開く。
※Nintendo DSiWare
フォルダがない場合は作成する。
※[32文字の長いフォルダ名:ID0]はmovable.sed
のID0
と同じもの。
7) もしNintendo DSiWare
フォルダに既にDSiWareのファイル([8文字のID].bin
)がこのフォルダに存在する場合はPCに待避する等で空の状態にしておく。
8) unSAFE_MODE-bb3.zip
のexploit DSiWare(F00D43D5.bin
)をNintendo DSiWare
フォルダにコピーする。
2. BannerBomb3
1) SDカードを3DSに戻す。
2) 3DSの電源を入れる。
3) 「本体設定」を開く。
4) 「データ管理」→「DSiWareデータ管理」を開く。
5) microSDカードをタッチする。下画面が赤く光り3DSが再起動してHOMEメニューに戻ればexploitのWI-FI設定のインジェクトに成功。
6) 3DSの電源を落とす。
3. unSAFE_MODE
1) L+R+A+十字ボタン上をすべて押しながら電源を投入し、3秒後にボタンを離す。
2) 本体更新の画面が表示され「インターネットに接続して本体を更新します。よろしいですか?」と聞かれるので「OK」をタッチする。
3) 本体更新についての承認画面が出るので「同意する」をタッチする。その後「ACアダプタをさすことをおすすめします。」画面になるので「OK」をタッチする。
4) アップデートは失敗し、アクセスポイントが見つからないというエラー画面になるので「OK」をタッチする。
5) 「インターネットの接続設定をしますか?」と聞かれるので「設定する」をタッチする。
6) 「接続先1」→「設定変更」→(画面右の矢印を押して右画面へ移動する)→「Proxyの設定」→Proxyの設定を「する」の状態で「詳細設定」→発動!
7) 上画面に「9S install SUCCESS」と表示され、何かボタンを押すとLuma Configurationメニューが表示される。
4. Luma3DS設定
1) Luma3DS設定画面で十字キーのAボタンでShow NAND or user string in System Settings”
“を選んでSTARTボタンを押す。
2) セーブと再起動が行われ Luma3DSが起動する
5. Wi-Fi設定を元に戻す
1) 「本体設定」を開く。
2) 「データ管理」→「DSiWareデータ管理」を開く。
3) microSDカードをタッチする。下画面が緑色に光り3DSが再起動してHOMEメニューに戻ればWI-FI設定プロファイルのレストアに成功。
4) 3DSの電源を落とし、SDカードを3DSから抜き出してPCにマウントする。
5) SDカードのNintendo 3DS
/ [32文字の長いフォルダ名:ID0]
/[別の32文字の長いフォルダ名:ID1]
/ Nintendo DSiWare
を開く。
6) exploit DSiWare(F00D43D5.bin
)をNintendo DSiWare
フォルダから削除する。
7) SDカードを3DSヘ戻し、Wi-Fi設定を確認して終了する。
なお、このSAFE_MODEの脆弱性は任天堂がなぜ古いバージョンのまま更新をせず放置しておいたのかの理由が分かりませんが、アップデートによる対策が可能なためいずれ使えなくなる可能性は濃厚です。ちなみに、3DSのチュートリアル系はスクリーンショットないと非常にわかりにくいだろうなと思いながら、面倒なので画像用意せず書いてます。
SAFE_MODEのsysupdaterが更新されない理由は、、通常使う本体設定のsysupdaterとSAFE_MODEのsysupdaterの両方が壊れると詰むからだと思います。
更新しなければ壊れませんから。