PlayStation 2 Independence Day


2003.09.07 初稿

概要

PS2Independence(PS1DRV Exploit)は、起動BIOSの中のバッファオーバーフローのバグを利用して、
ソニーからライセンスを受けていないコードをmodchip等のハードウェア改造なしでも動かす手法です。
具体的には、PS2メモリカードのシステム設定ファイル内に仕掛けがあります。
PS1用のソフトを起動しようとする際に情報を mc0:/BIDATA-SYSTEM/TABLE.DB から読み取るわけですが、
このファイルの読み込みにバッファオーバーフローのバグがあるらしいです。
TABLE.DBに「mc0:/BIDATA-SYSTEM/BOOT.ELFを実行する」というコードを混ぜておいて、起動を乗っ取るという仕組みです。
mc0はメモリカードのスロットで、指す位置により mc1 にもなりますが、これにも対応しています。
BIDATA-SYSTEMは日本向けPS2の場合です。欧州はBEDATA-SYSTEM、北米はBADATA-SYSTEMです。

ここで注意しておきたいのは、CD-RやDVD-Rにコピーしたゲームを起動できるようになるわけじゃないという事です。
メディアチェックをごまかしたり無効化できるわけではありません。
あくまでも自作PS2用アプリの起動が可能というだけです。

2003/8/15が記念日ですが、SCEIもバグを放置しておくとは思えないので、そのうち使えなくなる可能性があります。
SCPH-50000が出ていましたので、この機種の特定ロット以降または、これより後の機種では対策されている事でしょう。


インストール

■必要なもの(ハードウェア)
・PS2本体
・PS1のゲームCD(正規品ならなんでも)
・PS2用メモリカード8MB
・PS2用メモリカード内にアクセスする手段(USB接続のやつとか。PS2Linuxがあればソフトウェアのみでも可能)

■必要なもの(ソフトウェア) 全てリンクの公式ページおよびそこからのリンクからダウンロード可能です。
・nPort内に含まれるnpo-x.exe(不要とも言える)
 http://wire.napalm-x.com/downloads/releases/nPort_beta01.zip
・BIDATA-SYSTEM.npo(不要とも言える)
 http://www.0xd6.org/BIDATA-SYSTEM.npo
・titleman.exe
 http://www.0xd6.org/exploitguide/titleman-win32.zip

■作業
(1) BIDATA-SYSTEM.npo を展開する。
 BIDATA-SYSTEM.npoとnpo-x.exeを同じディレクトリに置いて、コマンドプロンプトから
   npo-x x BIDATA-SYSTEM.npo
 ディレクトリ BIDATA-SYSTEM が作られて、関連ファイルが解凍されます。
(2) PCにPS1のCDROMを入れて、メモ帳などで SYSTEM.CNF ファイルを開く。
 先頭の BOOT=cdrom:\XXXX_MMM.NN;1 を見て、太字部分を覚えるかコピーしておく。
(3) BIDATA-SYSTEM 内に titleman.exe を置いて、コマンドプロンプトから
   titleman -c
   titleman -a XXXX_MMM.NN
 これでTITLE.DB内に今使ったPS1のCD-ROMが記録されました。
(4) PS2 メモリカード内の BIDATA-SYSTEM ディレクトリに転送する。
 BIDATA-SYSTEM内のファイル history、icon.sys、TITLE.DB、BOOT.ELF、PS2IP.IRX、PS2LINK.IRX、PS2SMAP.IRX IPCONFIG.DAT
 方法はいろいろあるでしょう。
 メモリカードにアクセスするハードも出ているので、それを使ってもできるかと思います。
 PS2Linuxを持っているなら、こんな方法でも行けます。
 (3)の作業で書き換わったのはTITLE.DBのみです。
 historyとicon.sysは転送しなくても最初から入っているかとおもいます。
 BOOT.ELFとそれ以降はps2link用のファイルなので別のものを起動するなら不要です。
 というわけで、本当に必要なのは TITLE.DB と、起動したいアプリを BOOT.ELF にリネームしたものとなります。
 したがって、実は(1)の作業は不要ですが、最初の動作確認に適しているかなと。


実行

準備が出来たら早速実験です。
用意したPS2のメモリカードをさして、登録したPS1のCD-ROMをドライブに入れて起動してみます。
通常だとPSマークが画面に出てゲームが起動するわけです。
ところがこれが出ずに、一瞬白くなった後に ps2link の画面が出ると思います。
これで成功です。
オリジナルのBOOT.ELFはps2linkというPCとのやり取り用のソフトになっていますので、
このままでは何が出来るというわけではありませんが、任意のプログラムが起動したという事が確認できます。
BOOT.ELFの代わりにPS2Reality Mediaplayerなどを起動できるようにすると良いでしょう。

起動時の白い画面ですが実は意味があって、
・白:BOOT.ELFの起動に成功=普通はその後 BOOT.ELF内で画面初期化があるので、一瞬白くフラッシュして見える。
・赤:BOOT.ELFが無い・失敗=真っ赤な画面になったらBOOT.ELFがおかしいです。Exploit自体は成功しています。

で、私のSCPH-10000の環境では、ps2linkの画面が一瞬出た後に
「Exception handler: TLB load/inst fetch exception」とか出てハングアップします。
この画面自体はps2linkのBOOT.ELFのエラートラップで出しているものです。なぜエラーか理由は不明です。
SCPH-10000など外付けタイプの機種に対応していないのかもしれませんが未確認です。
BOOT.ELFを別のものにすると、白画面のまま固まってしまいます。たまたま全部SCPH-10000非対応なELFだったのか?謎です。
というわけで、最終的に私はここに書いた方法で動作するところまで到達していません。
BOOT.ELFに制御が移っているだろうというところの確認までです。このページのやり方が悪いのかもしれません。


PS2Linuxを使ったメモリカードアクセス

PS2Linuxからメモリカードをマウントすることは出来ますが、標準状態だとPS2Linux専用として扱われます。
しかし実際には /BWLINUX/ というディレクトリが仮想ルートになっていて、そこしかアクセスできないだけです。
特殊な作業をすることで、仮想ルートを本来のルートにすることが出来ます。
こうすることで、通常はアクセスできないゲームデータなどのディレクトリにもアクセスすることができます。
作業にはカーネルの再構築・モジュールの再構築が必要となりますので、それなりに技術が必要です。

(1)パッチを宛てたカーネル・モジュールの用意
以下にパッチがあります。カーネルのバージョンを確かめて、必要なほうを宛ててください。
 http://www.0xd6.org/no-bwlinux-check-2.2.1.diff
 http://www.0xd6.org/no-bwlinux-check-2.2.21-pre1-xr7.diff
カーネルの作り方は2.2.12.2.21などを参考にしてください。

これらのパッチは RTE 1.0β、RTE 1.0正式版からの起動に対応しています。日本版でもOKなはずです。

これから説明するやり方は非常に回りくどいです。BB NaviからakmemでPS2Linuxを起動するとかなり楽に出来るのですが、
上記パッチは対応していませんので、仕方なく、回りくどい方法を取っています。
BBNavi対応・モジュール側のみで対応というパッチを独自に作ってはあるのですが、公開はまずそうなので控えておきます。

起動してPS2Linuxのメモリカードをマウントして BWLINUX が見えていれば成功です。

(2)システム設定ディレクトリの削除
PS2のブラウザからメモリカード管理に入って、メモリカードの「あなたのシステム設定ファイル」を削除してください。
これが BIDATA-SYSTEM ディレクトリの正体です。
できればPS2Linux用メモリカードとは別のメモリカードの方が良いです。

(3)PS2Linux起動
PS2Linuxを起動します。
このとき注意なのが、先ほど(2)で用意したメモリカードとは”別の”メモリカードで起動してください。
無い場合は、メモリカード無しでDVDからカーネルを読み込んで起動してください。
(環境によってはDVDのカーネルからは起動できない場合がありますが)
別のメモリカードなのは、起動の時点で BIDATA-SYSTEM ディレクトリがシステム用として作られてしまうためです。
カーネルにパッチを宛てても、BIDATA-SYSTEM などのシステム用ディレクトリはアクセスすることができないので問題となります。
(BBNaviからakmemで起動するとアクセスできるのですが。。。)

(4)ディレクトリ作成
作業(2)で準備したメモリカードをマウントします。
そしてルートに BIDATA-SYSTEM というディレクトリを作成します。
mkdir BIDATA-SYSTEM とすると
 mkdir: cannot create directory `BIDATA-SYSTEM': Operation not permitted
とかエラーになる場合があります。理由は良くわかりませんが。
mkdir aa とか短いと成功したりしますので、まずそっちで作ってからmv aa BIDATA-SYSTEM とすると成功します。
 mv: cannot move `aa' to a subdirectory of itself, `BIDATA-SYSTEM'
と出てしまったら、既にBIDATA-SYSTEMが見えない状態で作られていることになり、失敗です。(2)からやりなおしてください。

(5)ファイルコピー
必要なファイルをBIDATA-SYSTEMにコピーしてください。
 history、icon.sys、TITLE.DB、BOOT.ELF、PS2IP.IRX、PS2LINK.IRX、PS2SMAP.IRX、IPCONFIG.DAT等

マウントを解除して完了です。


リンクs

http://www.0xd6.org/ps2-independence.html
 PS2 Independence(PS1DRV Exploit)の手法・関連ツール
http://www.geocities.com/james7780/PS2/ps2prog.html
 汎用メニューとかPS2用Atariエミュレータとかが公開されています。


戻る