Yellows8氏がBrowserHaxとThemeHaxをリリースしたことを先日お伝えしましたが、その際「GitHubベースで記事にしようとしております」と書きました。実は大まかな文章はできていたのですが、まとまりがなかったので記事として公開しておりませんでした。
せっかく書いたものなので、ちょっとだけ整理して記事として公開します。呼称が統一されていない上にexploitの種類が複数あるので理解するのに時間がかかりました。基本的に用語は3DSBrewに合わせています。
ThemeHax(対応する3DSのファームウェアは9.0から10.1)は、すでにHomebrew launcherを何らかのハックで過去にインストールしてある状態で3DS起動時にLトリガーを押しっぱなしにするとhblauncher payloadを読み込んで直接Homebrew launcherを起動できるというものです。起動のたびに『Cubic Ninja』などのゲームカードが不要になるというメリットがあります。HomeMenuHaxとも呼ばれます。
BrowserHax(対応する3DSのファームウェアは9.0から10.1)で、ThemeHaxとは異なり過去に Homebrew launcherをインストールしていない3DSでも使えます。ブラウザを使いますのでインターネット接続環境は必須です。
これらが出てきた話の流れはsmea氏のツイートを読むとよく分かります。
first up, yellows8's implementations of a webkit bug (for o3ds) and a stagefright bug (n3ds) https://t.co/LNedSdK5VB https://t.co/7WkPgOTTeK
— smea (@smealum) September 25, 2015
まず、yellows8氏が旧3DS向けにはWebkitのバグを、新3DS向けにはStagefrightのバグを利用した。
secondly, yellows8's homemenuhax : that's right, home menu is now an entrypoint, the most convenient one ever https://t.co/IzxJsdcgFf
— smea (@smealum) September 25, 2015
次にyellows8氏はHomeMenuHaxを編み出した。そう、HOMEメニューこそがエントリーポイント。今までの中で最も使い易いよね。
basically, until these are fixed, ninjhax, tubehax, ironhax, oot3dhax and smashhax are not needed. can just use browser + home menu !
— smea (@smealum) September 25, 2015
基本的にはそれが対策されるまではninjhaxやtubehax、ironhax、oot3dhax、smashhaxは要らなくなる。使うのはブラウザとHOMEメニューだけ。
BrowserHax
smea氏の言う旧3DS向けのWebkitのバグというのが3ds webkithaxで、新3DS向けのStagefrightのバグというのがbrowserhax frightです。
3ds webkithaxは実際には新旧3DS向けのそれぞれのexploitが含まれているため形の上では両対応しています。安定して発動しないため動作しない場合は何度かやり直す必要があります。
旧型向けは通称”sliderhax”というexploitで、10.1.0-27まで対応しています。一方で新型向けは9.9.0-26までしか対応していません。この脆弱性は旧型3DSにも存在していますが、旧型は10.1.0-27でもまだそれが残っていて、新型に限り10.1.0-27で先に対策されてしまっていたようです。したがって事実上これを旧型3DS向けにしています。
browserhax frightはNew3DSのインターネットブラウザのexploitです。libstagefright におけるオーバーフロー問題として知られている脆弱性で、不正な MP4 動画の解析時に生じる整数オーバーフローによりコードの実行を許容してしまうクラッシュを引き起こすものです。(参考:Mozilla Foundation セキュリティアドバイザリ 2015-83)
そもそもこの脆弱性は今年の8月にその存在が明らかになったものですので、対策はこれからのはずでした。New3DSのブラウザは未対策ですので最新バージョンの10.1.0-27でもこの脆弱性は存在します。yellows8氏はそれに早々と目をつけたようです。
MP4ファイルの解析がトリガーですので、ユーザーが何らかの操作をする必要はなくMP4ファイルを読み込むURL(ただし48文字以内のURLで、ブラウザのタブも3つ以上開いていると発動しないなどの条件はあります)へアクセスするだけで発動します。
インターネット上のサーバーに簡単にインストールできるようウェブサイトが用意されています。
まず
http://yls8.mtheall.com/3dsbrowserhax.php
へアクセスするとQRコードがあります。そのQRコードの中身は
http://yls8.mtheall.com/3dsbrowserhax_auto.php
のURLです。アクセスすることで旧型(3ds webkithax)と新型(browserhax fright)でそれぞれ自動的にexploitを用意してくれるようです。
ここで注意点ですがNew3DSでBrowserHaxをそのまま実行すると ヒープメモリの破損 (Heap corruption) が発生しメモリ割り当てに失敗してMP4の解析に進みません。
New3DSの場合は以下の作業を途中で行います。
1) Wi-Fiを無効化する.
2) HomeメニューからQRコードでURLを読み取り、ブラウザでアクセスしてみる
3) ブラウザを一旦終了して再度Wi-Fiを有効化する
4) ブラウザを起動すると先ほどアクセスしたURLへアクセスする
なお、libstagefrightはWii U バージョン 5.5.0Jのブラウザにも脆弱性として残っています。Wii Uでも今後何らかの動きがあるかもしれません。
ThemeHax(HomeMenuHax)
は今回の最も大きなトピックで、smea氏の言う通りゲームカードが不要でtubehaxのようにeショップからダウンロードすら不要という、本体だけでHomebrew Launcherを起動できるものです。
仕組みとしては、HOMEメニューが起動した時にSDカードのextdataフォルダにあるテーマデータを読み込んでexploitが発動します。液晶モニターのバックライトが点灯するのとほぼ同時に起動するため、まるで3DSの電源を入れたらHomebrew Launcherが普通に起動するように見えます。
ThemeHax(HomeMenuHax)が対応している3DSのバージョンはテーマを導入した9.0以降(日本版は9.1.0-20Jでテーマが導入されたので、日本リージョンの3DSは事実上9.1以降です)に限られますが、最新バージョンである10.1でも動作します。
インストール方法は簡単で、https://github.com/yellows8/3ds_homemenuhax/releases/から最新版のthemehax installer(現在はv1.2)をダウンロードして解凍し、”themehax_installer”フォルダをSDカードのルートにコピーすれば準備は完了で、themehax_installer appをHomebrew Launcherから起動し、画面の指示に従ってインストールをすれば完了です。
テーマをSDカードから読み込んでいますので、テーマを変更するとexploitは発動しなくなります。まだ電源OFF時にSDカードを取り外して3DSを起動した後にSDカードを取り付ければ『Cubic Ninja』等を使った方法でHomebrew Launcherを起動できます。