CTurt氏が、無改造のPlatStation 2で内蔵DVDプレーヤーに存在する脆弱性を利用して焼いたDVDからHomebrewを起動したりバックアップ起動を行うことができるFreeDVDBootをリリースしていました。
FreeDVDBoot: an exploit for the PlayStation 2 DVD player which allows burning your own homebrew games and running them on an unmodified console as though they were official discs: https://t.co/MaPC6urUJQ
Demo: https://t.co/eAdFesyvV3
— CTurt (@CTurtE) June 27, 2020
FreeDVDBoot: ユーザーがHomebrewゲームを焼いたDVDを無改造PS2本体で純正ディスクと同様に実行することができるようになるPlayStation 2 DVDのexploitです。https://cturt.github.io/freedvdboot.html
PlayStation 5が発売間近という今のご時世にPlayStation 2のexploitです。
PS2と言えばメモリーカードを使ったFreeMcBootやディスク入れ替えを偽装するSwapMagic、HDLoader使ってHDDにインストールして拡張ベイに付けるなどの方法が過去には存在していましたが、最近主流のソフトウェアハック(コールドブートハック)など、特段アクセサリー類を使わないハックはありませんでした。FreeDVDBootはDVDを焼くという作業は必要ですがPS2本体はノーマルのまま、そのDVDを本体に挿入するだけというソフトウェアハックの一種になっています。
公開されたデモ動画では、焼いたDVDからELFファイルになっているエミュレータを起動し、スーパーマリオなどのゲームを実行したりバックアップゲームを起動したりしています。要するに、本来なら不可能なELFフォーマットのHomebrewアプリケーションをDVDディスクから直接起動したりバックアップゲームをノーマルPS2本体で起動していることになります。
通常ELFファイルをDVDに焼いただけではPS2のDVDから起動できません。ただしPS2ではDVDビデオディスクであればそのまま読み込んで再生できるところに着眼しました。
FreeDVDBootはDVD Playerのファームウェアのバージョン3.10E(EU版。US版の3.10Uでも動作確認できたそうなのでリージョンが関係なさそうだとしています)のexploitとなっています。PS2はファームウェアをアップデートできる仕組みではないのでモデル毎にファームウェアがバラバラです。細かく検証するにはPS2のモデルを集めてくるしかないため現状では事実上そのあたりの検証はPS2シーン任せになります。DVDプレーヤーの最終版は3.11J(日本版)らしく、その1バージョン古いだけの3.10E/Uで脆弱性が存在しているため、かなりの確率で数多くのPS2モデルがその対象となっていそうです。
FreeDVDBootを簡単に説明すると、DVDディスク読み込みの際の脆弱性(最初にVIDEO_TS.IFOを読み込んで引き起こすバッファーオーバーフロー)を利用してメモリを確保してペイロードを実行し、DVDの構造に含まれるELFファイルを読み込むという仕組みです。
既存のHomebrewのELFファイルは実はそのままではFreeDVDBootで起動しません。CTurt氏のリクエストに応えたuyjulian氏がFreeDVDBootに対応したPS2SDKを作ってくれ、そのPS2SDKで再コンパイルされたHomebrewであればDVDに焼いてPS2で起動させることができます。
実際ELFファイルをDVDビデオにしてしまうとおかしなことになるので、ゲームをDVDビデオに偽装するESR patcherというものが存在しているのでそれを使い偽装DVDディスクを作成し、exploitとESRパッチしたディスクを読み込むESRローダーを連携させることでELFを焼いたDVDがDVDビデオとして認識され読み込まれます。
そのそも日本版のPS2 DVDプレーヤーにも脆弱性が存在するのかどうかが明確ではありませんし、今後このexploitを使って簡単にディスクを作成できるツールなども出てくると思うので、まだPS2を現役で使っているよというユーザー(ほぼ絶滅していると思いますが…)は楽しみにして待っていてもいいかもしれません、
FreeDVDBootのソースコードはGitHubにて公開されています。
[追記]
CTurt氏は、DVD Playerの最新ファームウェアである3.11に対応して欲しいという声に応え、まずは3.11に
FreeDVDBoot のexploitを移植しました。
Attention owners of PS2 with DVD player version 3.11, your cries were the loudest so I ported the exploit to your firmare first! Code just pushed to the repro, including my notes on the porting process incase it's useful (took about 2 hours to do…): https://t.co/zAyvxei8aE
— CTurt (@CTurtE) June 29, 2020
DVD playerのバージョンが3.11をお持ちのみなさまへ、3.11に対応して欲しいという声が大きいのでまずは3.11にexploitを移植しました。コードはリポジトリにプッシュしてあります。移植のプロセスも書いておきました(2時間くらいかかりましたけど)。
https://github.com/CTurt/FreeDVDBoot
I haven’t tested this on hardware, so someone please confirm if it works. I tested on 3.11J in emulator only, so E/U may be less likely to work…
— CTurt (@CTurtE) June 29, 2020
実機でテストしていないので動いたら教えてください。エミュレータ上の3.11Jではテストしました。E/Uだと動かないかも。
実際ユーザーがテストしてみたところ3.11Uだと動かなかったようで、CTurt氏は明日アップデートしてみると言っているのでそのうち治るかもしれませんが、日本版の3.11Jはどうも大丈夫そうです。
また、記事内で出てくるツール類を探しました。
FreeDVDBootのリリースに伴い今回新たに公開されたものも含めてお伝えしておきます。
・PS2向けのファミコンエミュレータFCEUとスーパーファミコンエミュレータSNES StationをFreeDVDBootで起動できるよう調整したlibcdvdを使って再コンパイルしたFCEU-HWCとHWC – SNES Station 0.2.0 MOD with updated libcdvd
FreeDVDBootのデモ動画で使われたエミュレータです。
・ゲームディスクのISOイメージにパッチを当ててDVD-VIDEOに偽装したディスクを起動するためのESR r9c
FreeDVDBootで使いやすくなるよう起動時にESRのロゴを表示しないようにして速やかに起動するようになっています。
・ゲームディスクのISOイメージにパッチを当ててDVD-VIDEOに偽装するためのESR Disc Patcher
LinuxとWindowsのコマンドライン版やJava版などもあります。ESRPatcher Proというバージョンもあります。
[追記2]
DVDのファームウェア毎の調整は必要ですが、最終的にはファームウェアごとにISOファイルを作成して焼くと要った作業をしなくても1つのISOファイルに統合することができるっぽいです。日本リージョンだけ別、ということもなさそうです。
現時点でPS2最終版DVDファームウェアの3.11に対応していることからそのうち全PS2向けのディスクが作成できるようになりそうです。
Decided to try to merge support for 3.10 and 3.11 (all regions) into a single hybrid ISO and managed to get it to work! Looks like it _might_ be possible to make a single unified disc for all firmwares after all :)https://t.co/RhOoSplGLJ
— CTurt (@CTurtE) June 29, 2020
3.10と3.11(全リージョン対応)を1つのハイブリッドISOファイルにして動作するようにしました。最終的にはすべてのファームウェア用が同じ1枚のディスクで作れるようにできると思います。
GitHubのPREBUILT ISOsに、言語は英語表記だけになりますがhybrid 3.10 and 3.11 – all regionとしてISOファイルが公開されています。
[追記3]
DVDファームウェアの3.04がサポートされました。
3.04 was a pretty popular ask, so just added support for that. Only tested in emulator on 3.04M, so please confirm if it works on hardware and I'll update the README.https://t.co/TlJxWSUEU6
— CTurt (@CTurtE) June 30, 2020
3.04は問い合わせが多いので、サポートを追加しました。エミュレータでのテストしかしていませんので、実機で動作したら報告して下さい。そのうちREADMEを更新します。