GBATempで、GerbilSoft氏がNintendo Wii Uで任意のコードをSDカードから読み込んで実行することができるコールドブートexploit paid the beakをリリースしていました。
コールドブートはデバイスが最初に起動するブートローダーの代わりに別のプログラムを起動させる方法です。脆弱性を利用することでその仕組みでシステム自体が起動する前(コールド状態時)にハックします。その時利用するのかコールドブートexploitです。
このコールドブートexploit “paid the beak”を今回発表したのはGerbilSoft氏ですが、開発に携わったのはWiiCurious氏、Kelly氏、Rairii氏、SDIO氏、Gary氏、DeadlyFoez氏です。
paid the beakによってWii UのブートROM(boot0)の代わりにSDカードからブートさせてbrickしたWii Uを復旧させることができます。
そもそもboot0にはRTCフラグ”UNSTBL_PWR”というものがあり、それがセットされているとSDカードからブートするという機能があります。
UNSTBL_PWRフラグをセットできればSDブートができることになりますが、今回その方法が発見されました。
開発チームは最近任天堂の「ファクトリーGCNメモリーカード」「SDカード」「バッテリージグ」をとある販売ルートから入手することに成功。その「バッテリージグ」というのが鍵で、Wii Uのクロックバッテリースロットというところに差し込んでTP73(wiiubrewによると、RTC Battery 3v3と書かれているのでバッテリーのことで、CR2032ボタン電池の代わりにバッテリージグを使用することになります)に信号を流し込むことでUNSTBL_PWRフラグをセットできることが判明しました。任天堂へ修理に出したときにはこのバッテリージグを使っていたのです。
ただ、UNSTBL_PWRフラグをセットするだけでSDカードからブートできるわけではなく、バッテリージグと同じ動作をするハードウェアが必要です。それがpaid the beakです。
バッテリージグは二つのマイコン(Raspberry Pi PicoとPICAXE 08M2)を使い作成します。対応マイコンは今後増えていく見込みです。
paid the beakで利用しているexploitはSEEPROMが正常動作するコンソールのみ有効です。SEEPROMはシリアルEEPROM(データの消去や書き換えが可能な不揮発性メモリの一種)のことで暗号鍵の情報などが含まれています。SEEPROMが破損しているとboot0が起動できないので利用できません。
またboot0は SDHCをサポートしていないため、2GB以下のSDカードを使う必要があります。
技術的な詳細についてはhttps://consolebytes.com/wii-u-sdboot1-exploit-paid-the-beak/で、ソースコードはhttps://github.com/Wack0/paid-the-beakで公開されています。