えぬえす工房
  • Search results
avatar えぬえす工房
2018/12/06

PlayStation ClassicでDOOMを動かすまで

2018/12/03に発売されたSIEの「PlayStation Classic」についてです。

以降は製品名を「PSミニ」と略します。

お約束ですが

ここに書いてある情報の利用は自己責任でお願いします。

基本スペック

ニンテンドークラシックミニシリーズとは違い、MediaTek製SoCを採用しています。

  • SoC: MediaTek MT8167A (4-core ARMv8)
  • RAM: Samsung K4B4G1646D-BYMA x2 (合計1GB)
  • eMMC: Samsung KLMAG1JETD-B041 (16GB)
  • PMIC: MediaTek MT6392A
  • USB Hub?: Realtek RTS5482

分解

SONY系ハードおなじみの「剥がすと保証は無効」のシールはなく、プラスドライバーのみで簡単に分解できます。

まぁ、保証とか投げ捨てる前提なので軽く動作確認した後に分解しました。

関係ありそうな箇所の説明

UART

いかにもそれっぽいパッドがUARTです。

HDMI端子がある側から、3.3V、TxD、RxD、GNDとなっています。

ロジックレベルは1.8Vです。3.3Vが出ているので勘違いしがちですが要注意です。

eMMC

以下に、eMMCの主要なピンの場所を示します。

eMMCの主要なピンの場所

ここで注意することは、D0ピンがビアを一切使わずに接続されています。 そのため、配線を保護しているレジストを削って接続するしかありません。

eMMCをPCに接続して読み書きしたい方は、以下のページをおすすめします。

【番外編】PlayStation Classic の eMMC をダンプする

fastboot

基板の右下の方にある、大きなパッド同士をショートさせながらPCへ接続することでfastbootに入れます。

しかし、fastbootでできることは現時点で分かっている限りではほぼ無いに等しいです。

fastboot入る直前に一瞬USB-シリアル変換(CDC-ACM)で認識しますが、これはMediaTek製SoCで用意されているファーム焼きモードに関係するようです。

この件については、以下のページが詳しいです。

I have not read Playstation classic firmware yet but…

饒舌 (verbose) モード

裏面(SIDE B)にある特定のパッド同士をショートさせると、饒舌モード(と勝手に呼んでいます)に入ります。

このモードでは、通常表示されることのないsystemdの起動ログやログインプロンプトを見ることができます。

詳しい情報については、以下のページを参照してください。

Playstation Classic alternate startup log and realtime message

システムの構成

カーネルはAndroidカーネル(カスタム版Linux)、ユーザーランドはYoctoです。 SoC自体は64bitですが、システムとしては32bitで動いています。

eMMCのパーティション構成は以下の通りです。TEE(Trusted Execution Environment)があることに注目です。

Disk /dev/loop0: 30535680 sectors, 14.6 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C907B807-D79F-48E2-9743-A7288A4540BA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30535646
Partitions will be aligned on 1024-sector boundaries
Total free space is 1085 sectors (542.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            1024           17407   8.0 MiB     8300  BOOTIMG1
   2           17408           33791   8.0 MiB     8300  BOOTIMG2
   3           33792           34815   512.0 KiB   8300  SEC_RO
   4           34816           35839   512.0 KiB   8300  MISC
   5           35840           39935   2.0 MiB     8300  TEE1
   6           39936           44031   2.0 MiB     8300  TEE2
   7           44032          453631   200.0 MiB   8300  ROOTFS1
   8          453632          535551   40.0 MiB    8300  ROOTFS2
   9          535552        29895679   14.0 GiB    8300  GAADATA
  10        29895680        30535551   312.4 MiB   8300  USRDATA

ルートファイルシステムはdm-verityのような正当性検証が行われていないため、書き換えし放題です。

ログイン可能にしたPSミニで、psコマンドやmountコマンド等を実行した結果Gistにアップしています(容量が大きいので閲覧注意)

PlayStation Classic various logs

ちなみにゲームデータはきちんと暗号化されており、鍵の一部はTrustZoneで保護されているようです。

USBメモリを使ったアップデート機能

軽くeMMC内を調べていたときに存在自体は確認していたのですが、その後madmonkey氏が掘り下げて詳しい情報を出しています。

要約すると

  • 接続されたUSBメモリの特定のボリュームラベル(SONY)とディレクトリをトリガーに、アップデートを試みる
  • 対称鍵暗号で暗号化されているが、パスワードはeMMC内にある
  • 任意のシェルスクリプトを動作させることができる

ということです。

詳しい情報はここには記載しませんが、調べれば出てきます。

DOOMを動かす

PSミニではディスプレイサーバとしてWaylandが使われています。

PrBoom+のSVN版がWaylandをサポートしているSDL 2.0に対応しているため、これを使うことにしました。

SDL 2.0のライブラリはPSミニに入っているため、PrBoom+をARM向けにビルドすることで動くはずです。

実際にやってみたところ、きちんと動きました。

最後に

今回は

  • BGA153のICのリボールとリワーク
  • 顕微鏡下でのはんだ付け

など、勉強になったことも多かったです。

また、ハックに関する情報を公開している以下の方々へ感謝します。

あと、カーネルのソース公開してくれませんかね・・・(なぜかここには無い)

Author

avatar
NV

気づいたら組み込みセキュリティをやっているエンジニア

Comments