扱う事が出来る mincg v1.0 をリリースしていました。
ここ最近いろいろあって記事を書いてませんでしたが、流石にこのリリースは見過ごせないので記事にします。
記事執筆時点では一人でも多くの方の協力(mincgでダンプしたデータをSKGleba氏に提供)が必要です。
記事執筆時点でVitaの最新FWは3.73であり、3.73でもハックであるHENkakuを使用する事は可能です。
HENkakuは電源を切るまで有効な一時的なハックであり、電源を入れた時点でHENkakuが有効になるEnsoは
3.60/3.65でのみ使用可能です。つまり3.67以上のVitaの場合、Ensoを使用したいならダウングレードを行う
必要があります。ダウングレードはmodoruというHomebrewで実現可能です。
(ここでEnsoを挙げているのは、ダウングレードする目的として一番分かりやすい例であるためです。)
しかしながらダウングレードの限界点としてFactory firmwareが存在します。これはハードコードされており
かつ本体毎に固有の2つ鍵で暗号化されたバージョン情報です。仮にそれが3.67の場合、そのVitaではそこが
ダウングレードの限界です。しかし、ついにFactory firmwareを変更出来るHomebrew/ツールの登場です。
(SKGleba氏はFactory firmwareをminfwと書いているので以降私もそう書きます)
mincgはTeamMoleculeが発見したsecond_loaderのexploitであるmoth exploitの実装もとい実現です。
moth exploitの概要はwikiに掲載されています。
https://wiki.henkaku.xyz/vita/Vulnerabilities#moth_exploit
minfwを含むデータはVitaの本体毎に固有の情報があるIdStorageに存在します。それの復号に本体毎に固有の
2つの鍵(仮にAとB)が使用されます。second_loaderはまずIdStorageから取得したデータ(blob)をAで復号し、
RSAで検証します。その後、Bで復号される事でminfwのバージョン値が出てきます。
バージョン値は4バイトの値で、例えば3.60なら03600000、3.65なら03650000となります。
しかしどうもいずれの復号処理においてもパディングのチェックはしていないらしく、それが原因となり別の
本体のminfwを含むデータ(別の本体のAで復号された状態)を目的の本体のAで復号出来るように暗号化して
フラッシュする事で、データの移植が可能になるのだそうです。
しかし別の本体のデータですから、当然ながら目的の本体のBでは復号出来ず、復号しようとすると滅茶苦茶な
値が出てきます。ただし、稀に「その本体の元々のminfwよりも下がってしまう」という事も起こり得ます。
それを狙えばminfwを下げる事は実現出来る、というのがmoth exploitです。
(だから表現としては実装よりも実現の方が良いのかなと…)
mincgはHomeberwとPCのツールに分かれます。Homebrewはダンプとフラッシュに使用します。
ツールはダンプの検証とフラッシュ用データの作成に使用します。ダンプの検証は、別の本体のダンプを自身の
Aで復号出来るよう暗号化してAとBで復号した時に出てくる滅茶苦茶な値の検証です。
ツールの検証で狙うバージョン値は00996000~03650000(0.996~3.65)です。
Vitaのブートローダーは起動時に本体毎に固有のハードコードされたデータを復号してハンドシェイクに用いる
鍵を設定するそうですが、minfwが0.996未満の場合には通常とは異なる値が設定されてしまい、それが原因で
Vitaが起動しなくなるそうです。(つまりブリック。) 最低値が0.996なのはそれが理由です。
https://twitter.com/skgleba/status/1191826801535979520
(Darthsternie氏のVitaが犠牲となりこの問題が発覚した。Darthsternie氏に感謝)
3.65が最大値なのはEnsoを考慮してです。
出てくる滅茶苦茶な値は4バイトなので範囲は00000000~FFFFFFFFです。
そこから00996000~03650000を狙うわけなので、別の本体のダンプが多ければ多いほどヒットする確率は
高くなります。確率を上げるためにも一人でも多くの方のダンプ提供が必要です。提供しても良いという方は
ダンプ後にSKGleba氏にメールで送ってください。(skgleba@gmail.com)
本体のモデルやminfwに関わらず、全てのVitaのダンプが役に立ちます。
提供データは一定の数毎にGitHubにアップされると思われます。
●注意
- 自己責任で作業を行ってください。何が起きても私や開発者は責任を負いません。
- 元のminfwが3.61以上の場合、下げたとしても、3.60未満にはダウングレードしないでください。
これは、FWの動作に関わるハードウェアの変更が行われている事があるためです。
readmeにはそう書かれています。これは1000/1100と2000とTVのモデル間の変更だけはありません。
同じモデルでのハードウェアのマイナーチェンジも含んだ話です。
(3.60以上が良いのは、おそらく3.60リリース以降はそういう変更が確認されてないから……?) - 元のminfwが3.60以下の場合、下げたとしても、元のminfw未満にはダウングレードしないでください。
理由は上と同じです。つまりmincgでminfwを下げる意味があるのはminfwが3.61以上の場合のみです。 - 3.74以上がリリースされた場合、アップデートしないでください。
moth exploitが対策される可能性があります。
●用意するもの
- PSVita/PSVitaTV (HENkaku)
- mincg.vpk
- mincg-master.zip
- PC
master.zipは最新のソースコードです。ツールのファイルはソースコードと一緒にアップされています。
以下に書く手順はWindows環境向けです。ご了承ください。
(ダンプ・提供だけが目的の場合、作業は手順8で終了です)
●手順
- mincg.vpk をDLし、VitaShellでインストールする
- mincgを起動する
- ×ボタンを押してSMI(minfwの情報を含むデータ)をダンプする
(ダンプは一瞬で終わる。10秒後にmincgは自動で閉じる。自分で閉じても良い) - mincg-master.zip をDL、解凍する (必要なのはpctoolフォルダ内の物のみ)
- "/pctool/windows/" 内にあるファイルを "/pctool/" にコピー
- VitaShellを起動し、FTP或いはUSBでPCと接続
- "ux0:data/" にある以下の5つのSMIと付くファイルをPCのpctoolフォルダにコピー
(XXXXXXXXの部分は本体毎に異なります)- XXXXXXXX_SMI_DECRYPTED.SMI
- XXXXXXXX_SMI_HEADER.SMI_HDR
- XXXXXXXX_SMI_KEYS.SMI_KEY
- XXXXXXXX_SMI_NOUTER.SMI_e1
- XXXXXXXX_SMI_RAW.SMI_e2
- (任意)
5つのファイルをzipで圧縮して skgleba@gmail.com に送信 - コマンドプロンプトを起動する
- cdコマンドでpctoolフォルダに移動する
- 以下のように実行する (XXXXXXXX部分は自分のファイルに合わせる)
mincg.exe XXXXXXXX_SMI_KEYS.SMI_KEY
- 検証でヒットせず終了した場合は "END: no min fw lower than 03.6500.01 and higher than 00.9960.00"
と表示される。その場合は諦める (提供データが増えた時に再挑戦)
ヒットした場合(minfwを0.996~3.65に収められた場合)は以下のように表示される
(dataフォルダとkeyフォルダにあるのは提供データで、keyフォルダ内は検証処理のために連番になっている)
過去にダンプを提供した事がありかつそのminfwが3.65以下である場合、自分の物なので鍵が一致し正常な値が
出てヒット扱いになってしまうが、ツールは全提供データに対して検証を行い、次の作業ではヒットした中から
好きなminfwを選択させるため、自分の提供データがヒットしたとしても問題は無い(それを選ばなければ良い)
(自分の提供データのヒットは、表示されたメッセージのSMI_e1ファイルの名前とminfwから判別可能) - 結果としてヒットしたminfwが添字(左の数字)と共に表示される
ここで、自分のVitaのminfwが下がる物の添字を入力してEnter (複数ある場合はどれでも好きな物を)
(そうする事で、フラッシュ用のTSMI.SMIファイルが作成される)
- "ux0:data/" にTSMI.SMIファイルをコピー
- mincgを起動する
- (readmeには書かれていないが、念の為)
□ボタンを押してログを作成し、VitaShellで "ux0:data/mincg.log" を確認する
下の方の "FW_CHK:" の値が自分の選択したminfwならOK
(これはVitaにコピーしたTSMI.SMIファイルが破損したりしていないかを確認する作業)
(TSMI.SMIファイルが無い場合はファイルの代わりにVita側の情報が参照されログが作成される) - mincgを起動する
- ○ボタンを押してTSMI.SMIファイルをフラッシュ
完了すると5秒後に自動で再起動される - ダウングレードを試みる
(3.71~3.73の場合は必ずmodoru v2.1を使用する。3.70以下の場合はv1.0でも良い)
という事で、まだまだ提供されている数が少ないので確率は低いですが、minfwを下げる事が可能になりました。
かなり荒業ではあると思いますが、これはすごい事です。Vitaシーンの開発者に感謝!
時間が取れたら他にも記事を書きたいとは思っていますが、まだ少し厳しい感じです。
ではまたそのうち。