ツイッターで、zoogie(TheGreatBugFish)氏がニンテンドー3DS『ポケモンピクロス』に存在するexploitを利用してHomebrew Launcherを起動するPICHAXXをリリースしていました。
この『ポケモンピクロス』を使ったPICHAXXはMrNbaYoh氏が2016年に発見したもので、いわゆるセカンダリーexploitです。『ポケモンピクロス』自体はダウンロードタイトルで無料配信されています。
MrNbaYoh氏と『ポケモンピクロス』と言えばMrNbaYoh氏が2016年6月にHomebrew Launcherを起動する動画を公開していました。そういえばその後実際リリースされたという記事を書いてないことを私もやっと思い出しました。
これですね。
So yeah I think it is working. pic.twitter.com/mQHzKHDi7H
— nba::yoh (@MrNbaYoh) June 20, 2016
動画公開当時はQRコードで外部からデータを読み込むような仕組みがなさそうなので、改変して暗号化したセーブデータを作るためにハック済み3DSでのHomebrew Launcherが必要なセカンダリーexploitだと記事に書いています。
確かにPICHAXXは実際分類としてはセカンダリーexploitとなるのですが、昨年秋のFrogminerの記事でちょっとだけ触れましたが今は暗号鍵であるmovable.sedを総当たり方式で抜き出してPC等で暗号化されたセーブデータを作れるようになっています。事実上セカンダリーexploitはプライマリーexploitと比べると手間がかなり余計にかかるだけでハック済み3DSがなくても何とかなるレベルにはなっています。
PICHAXX対象のリージョンはUS/EU/JPで、日本版も含まれています。新旧3DS、2DSすべてが対象です。
同じようにダウンロード無料のタイトル『STEELDIVER SUBWARS』のセーブデータを使ってHomebrew Launcherを起動する事ができるセカンダリーexploitのSteelhaxとの違いが列記されているので紹介しておきます。
☆起動率100%(Steelhaxは75%程度)
☆ファイルサイズが91MBと半分なのでSDカードの容量節約になる
☆『ポケモンピクロス』のバージョンはアップデート版がなく1種類だけしかない。Steelhaxの場合アップデートされていて、最新版はサポートされていない
☆リージョンフリー
☆必要なファイルが少ない(セーブデータ以外にはotherapp.binのペイロードだけ)
☆アイコンがいい感じ
起動率100%がうれしいですね。
PICHAXXを公開した理由について、zoogie氏曰くBannerbomb3が面白かったので他にも作りたくなったそうです。zoogie氏はちょっと前に実はNintendo 3DSの本体設定に存在する脆弱性を利用するBannerbomb3というexploitを公開したのですが、同じファームウェアで動作する(対策されるとしたら同時かもしれない)exploitを2つリリースしたことになります。なお、Bannerbomb3については記事を書きかけて絶賛放置中です。時間ができたら続きを書こうとして早3週間ほど経過しております。
ピクロスのPICとHAXを組み合わせたPICHAXXとMrNbaYoh氏が命名したexploitの仕組みは、セーブデータのメモリコピー時にサイズチェックを通り抜けてバッファがオーバーフローしてしまう脆弱性を利用したものです。
MrNbaYoh氏が当時リリースしなかった本当の理由は分かりませんが、zoogie氏は任天堂が施した3DSのexploit対策であるPASLR(擬似的(Pseudo)なASLR(Address Space Layout Randomization:バッファーオーバーフローの脆弱性対策技術でメモリー領域への配列をランダム化すること)がリリースしようとした直前に実装されてしまった、ないしはもっと使いやすいexploitを見つけたので一旦棚上げしてそのままにしてしまっているのではないかとしています。
そもそもPICHAXXはセカンダリーexploitのためセーブデータインストールにハック済み3DSが必要という、その仕組み上そんなに価値が高くないと判断して当時リリースを見送ったままにした可能性も指摘しています。
【ハック済み3DSを使わないインストール方法】
PICHAXXではセーブデータを作成するためのスクリプトも同梱されています。
1. https://bruteforcemovable.com/にアクセスし、画面の指示に従い使用している3DSのmovable.sedを入手する。自分のフレンドコードとID0(SDカード内のNintendo 3DSフォルダ内にある32文字の長い名前のフォルダがあるが、その32文字がID0)が必要。
2. pichaxxをダウンロードして解凍すると出てくる3ds-save-toolフォルダにmovable.sedをコピーし、Windowsの場合は.batスクリプトファイル(__MAKE_PICHAXX_SAVE.bat)をダブルクリックする。Linuxの場合は上記.batファイルの中に書かれているコマンドを直接シェルで実行する。
3. 3ds-save-toolフォルダ内に00000001.savというファイルが生成されるので、それを[ここ!]にコピーする。
sdmc:/Nintendo 3DS/[32文字の長いフォルダ名:ID0のこと]/[別の32文字の長いフォルダ名=今回は使わないID1のこと]/title/00040000/0017c100/data/[ここ!]
元から存在するファイルは上書きしてしまって構わない。
4. ペイロードであるotherapp.binをダウンロードする。
通常はsmea氏が管理する公式サイト3DS Homebrew Launcherから入手するが、3DSの最新ファームウェアである11.10.0-43が選べないので非公式サイトとして11.10.0-43に対応した
https://deadphoenix8091.github.io/3ds/#otherapp
を使う。このサイトはsmea氏が11.10.0-43に対応したら公式サイトへリダイレクトされる予定。
公式サイトと同様、ファームウェアのバージョン、リージョン、new/oldを選択してDownload otherappをクリックして.binファイルをダウンロードしてファイル名をotherapp.binに変更してSDカードのルートにコピーする。
5. Homebrew Menuを
https://github.com/fincs/new-hbmenu/releases/latest
からダウンロードし、boot.3dsxをSDカードのルートにコピーする。
6. 『ポケモンピクロス』を起動するだけでHomebrew Menuが起動する。
ハック済み3DSを使う場合には一緒に配布されているall.datを既存のセーブデータに上書きし、セーブデータマネージャー(Checkpointとか)でエクスポートしてそれをセーブデータとして使います。なお、v8.0以降のLuma3DSでは動かないと書かれています。
PICHAXX自体はPICHAXX v1.0としてGitHubで公開されています。
Bannerbomb3の記事待ってます!