FW5.05/5.07は、公開されているカーネルexploitがターゲットとするFWの中でも一番新しいFWです。
通常、PS4でセーブデータのバックアップ/リストアを行おうと思うと、PSNにサインインしておく必要があります。
(サインインしていない場合、[USBストレージ機器にコピーする] という項目でサインインを求められます)
しかし今現在FW5.05/5.07でPSNにサインインする事は出来ません。
FW5.05/5.07にて正規の手順(USBストレージ)でセーブデータをバックアップ/リストアしようと思うと、そのPS4の
FWが最新だった時期にサインインしていた、というのが条件となります。
PS4のバックアップ機能でサインイン済みのユーザーデータをバックアップし、目的のPS4にてそのユーザーデータを
リストアする事でも正規の手順は使えるようになりますが、リストア時にPS4が初期化されるのでオススメはしません。
(そのユーザーデータはググれば簡単に見つかります。見つかりますが、オススメはしません)
この記事で紹介するのは、非正規の手順です。
セーブデータをバックアップ/リストアしたい方の助けになれば幸いです。
誤っている情報があればコメントなりメールなりTwitterなりで指摘してください。
記事を書くに当たってのテストはGE2RB、GER、アキバズトリップ2、レイジングループで行いました。
●目次
・セーブデータをバックアップするに当たって知っておくべき事
・共通(PS4-Xplorerの用意)
・セーブデータを復号してバックアップする手順
・復号されたセーブデータをリストアする手順
・暗号化されたセーブデータをバックアップする手順
・暗号化されたセーブデータをリストアする手順(keystoneが一致する場合)
・暗号化されたセーブデータをリストアする手順(keystoneが一致しない場合)
セーブデータを復号してバックアップする手順は「Playstation 4 Save Mounterの使用手順」の紹介も兼ねています。
他の手順にそれを含めると冗長だと感じたためです。
●セーブデータをバックアップするに当たって知っておくべき事
バックアップ/リストア作業に移る前に、最低限これだけは知っておくべき、という事を書いておきます。
多分、セーブデータの共有や改造目的の人も、知っておくべきです。
PS4のセーブデータに関わるパスは以下の3つです。
▼ "/user/home/ユーザーID/savedata/タイトルID/"
"sdimg_*"ファイル と "*.bin"ファイル が存在。(*は各セーブデータのID)
(各セーブデータのIDは "SAVEDATAx" や "SLOTx" や "AUTOSAVE" が代表的。ゲームによって異なる)
sdimgと.binでペアになっている。例えば "sdimg_SAVEDATA1", "SAEVDATA1.bin" という感じ。
sdimgはセーブデータのイメージファイルであり、PS4はセーブデータを扱う際にsdimgをマウントする。
.binはセーブデータ(sdimg)の暗号化/復号の際に参照されるファイル。
正規の手段でUSBストレージにセーブデータをバックアップする場合、この2つのファイルがバックアップされる。
(なぜか正規の手段ではファイル名からsdimgが省かれる)
▼ "/user/home/ユーザーID/savedata_meta/user/タイトルID/"
セーブデータのアイコンが存在する。これはバックアップ/リストアしなくても問題無し。
(少なくとも私が試したゲームでは問題無かった)
ただしこの記事では、一応、バックアップする事にしている。
▼ "/system_data/savedata/ユーザーID/db/user/savedata.db"
セーブデータのデータベースファイル。PS4はセーブデータの情報をこのファイルで管理している。
ロード画面等でセーブデータの一覧を表示する際、PS4はsavedata.dbを見てそのゲームのセーブデータを検出する。
セーブ時、savedata.dbにそのセーブデータの情報が存在しない場合は情報を登録する。
(セーブデータによってはメタデータとしてsub_title及びdetailも登録される。空の場合もある)
(detailは基本的には、セーブ日時/プレイ時間/所持金額、のようなロード画面に表示される情報)
(セーブ時、savedata.dbに情報が既に存在する場合、detailがあるセーブデータではdetailが更新される)
PS4の仕組み上savedata.dbは非常に重要なファイルであり、もし消したり破損したりすると、セーブデータ(sdimg
と.bin)が存在していたとしても、ゲーム上でそのセーブデータが認識されない。
とは言ってもバックアップは不要。(ただしこの記事では、一応、バックアップする事にしている。)
SQLiteのデータベースなのでDB Browser for SQLite等で閲覧/編集可能。
(※この記事ではセーブデータのIDという表現をしますが、savedata.dbはそのIDをdir_nameとしています)
PS4のゲーム内にはkeystoneというファイルが存在します。これも非常に重要なファイルです。
PS4にはセーブデータ作成時、そのセーブデータ内にゲームのkeystoneをコピーするという処理が存在します。
(そのため、Fake PKG Tools v1.5.1でkeystoneの無いfpkgを作成してしまうと、セーブ時にエラーが発生します)
ディスクのゲームもDL版のゲームも、同じタイトルならkeystoneは同じはずですが、pkg作成処理中にkeystoneの
作成処理が存在するため、fpkgのkeystoneはディスク/DL版のゲームの物とは異なります。
[Fake PKG Tools v1.5.1]或いは[Fake PKG Generator 3.38とLMAN氏のorbis-loader.exe]でディスクのkeystone
を含める事は可能です。それをやらない限り、fpkg作成時にkeystoneは新規に作成されます。
sdimg(セーブデータ)の中には、セーブデータの実体と、sce_sysフォルダが収められています。
もちろんこの実体は復号されているため、これを弄る事でセーブデータの改造は実現します。
sdimgのsce_sysフォルダにはゲームからコピーされたkeystoneが存在します。もちろんparam.sfoも存在します。
PS4のゲームはセーブデータをロードする際にゲーム側のkeystoneとsdimg側のkeystoneを比較します。
keystoneが一致すると正常にロードされます。一致しない場合、セーブデータは破損データとして扱われます。
セーブデータのリストアを行う上でkeystoneが一致するか否かは、手順に関わるので非常に重要です。
sdimgのsce_sysフォルダ内のparam.sfoで気にすべき項目は、ACCOUNT_ID と DETAIL です。
ACCOUNT_IDはPSNアカウント毎に固有の16文字の英数字です。(VitaシーンではAIDとして知られている)
(PSNにサインインしていないユーザーのセーブデータの場合、ACCOUNT_ID は 0000000000000000)
param.sfoのACCOUNT_IDは、正規の手段でセーブデータをリストアする際に参照されます。私が試した限りでは
そこ以外では参照されません。仮にACCOUNT_IDが違ってもPS3のようにお前のセーブデータじゃねーよと怒られる
事も無ければ、Vitaのようにトロフィーやらねーよと怒られる事もありません。(PS3の場合はゲームによる)
ACCOUNT_IDが違ってもセーブデータは問題無く使用可能ですし、トロフィーは問題無く獲得出来ます。
(よって私は、セーブエディターの再署名は、param.sfoだけを書き換えて暗号化しているのだと予想します)
(少なくとも私が試したゲームでは、ゲーム内でセーブデータのACCOUNT_IDを検証していません)
DETAILはsavedata.dbに登録されるdetailと同じ内容ですが、ゲームによってロード画面でどちらを参照して表示
するのかが異なります。DETAILは正直そこまで重要ではないので触れなくても良かったんですが、まあ一応…。
FW5.05/5.07のPS4に対して使えるツールとして、Playstation 4 Save Mounter が存在します。
これはセーブデータ(sdimg)を書込可能な状態でマウント(復号)し、かつアンマウント(暗号化)出来るツールです。
セーブデータのバックアップに役立つツールであり、セーブデータの改造やセーブデータの共有も実現可能です。
他人のセーブデータは、sdimgと.binの両方があれば、自分のPS4でマウントし、セーブデータの実体を取り出す
事が可能です。その実体を自分のセーブデータに移してやれば、セーブデータの共有は実現します。
ゲーム内ではACCOUNT_IDを見ていないと思われるので、keystoneが同じなら暗号化されたセーブデータを単純に
上書きするだけでも良いかもしれません。
しかしSave Mounterも万能ではありません。PS4はセーブデータの暗号化に、FWに存在する鍵を利用するようで、
つまりFW5.05/5.07のPS4ではそれ以下のFWで作成されたセーブデータしかマウント(復号)出来ません。
上でセーブデータを単純に上書きなんて書きましたが、それが有効なのもFW5.05/5.07以下で作成されたセーブデータ
だけです。FW5.50以上で作成されたセーブデータをFW5.05/5.07で使いたい場合、現時点ではセーブエディターを
用いて復号されたもの(セーブデータの実体)を用意する必要があります。
(セーブエディターのアドバンスモードでは、復号されたものが一時的なファイルとしてクライアント側に置かれる)
●共通(PS4-Xplorerの用意)
1,Lapy氏のツイートを漁って最新のPS4-Xplorerのpkgを手に入れる
(PS4-Xplorer BETA v1.11)
2,HENのペイロードを実行し、Debug SettingsからPS4-Xplorerのpkgをインストールする
PS4-Xplorerを用意する理由は、FTPの機能がFTPのペイロードに比べ安定していると感じるからです。(私の体感)
まあ、FTPのペイロードはブラウザで動作しますから、そのタブを閉じていなければゲーム中でもFTPサーバ状態な
所はFTPのペイロードのメリットだと思いますけど。
FTPでの接続にFTPのペイロードを利用するという方にはPS4-Xplorerは不要です。
個人的にはFTPでの転送が楽だと思いますが、PS4-XplorerはUSBストレージも扱えるので、FTPでの転送が嫌いな人や
FTPで接続出来ない人はバックアップ/リストアにUSBストレージを使うと良いのかなと…
この記事では、バックアップ/リストアの際のファイル転送手段をFTPで統一します。ご了承ください。
PS4-XplorerではL2+△で開くオプションからFTPサーバモードにする事が可能です。
PS4のBDドライブに近い方のUSBポートのマウントポイントは "/mnt/usb0"、遠い方は "/mnt/usb1" です。
PS4-Xplorerでは十字左がusb0のショートカットに、十字右がusb1のショートカットになっています。
●セーブデータを復号してバックアップする手順
この手順は「Playstation 4 Save Mounterの使用手順」の紹介も兼ねています。
他の手順にもそれを含めると冗長だと感じたためです。
そのため、他の手順でPlaystation 4 Save Mounterを使用する場面ではこの手順に飛ぶようにしています。
他の手順からここに飛んできた場合、手順12では目的の作業を行ってください。
他の手順からここに飛んできた場合、手順14と15は不要です。
●用意するもの
・PS4 (5.05)
・PC(Windows)
・FTPクライアントソフト
・Playstation 4 Save Mounter
●手順
1,Release.zip をDL/解凍し、Playstation 4 Save Mounter.exe を起動する
2,PS4のブラウザからBin Loader(Originalとも言う)を実行し、ペイロード待機状態にする
(どういう事か分からないならPS4で以下にアクセスしてBin Loaderを実行してください)
https://nitocris.exploit.menu/
https://darthsternie.net/datafiles/ps4/xproject_505/index.html
3,MounterにPS4のIPアドレスを入力し、"Send Payload" をクリックする
ps4debugをPS4に送信しています。成功するとPS4の画面左上に通知が表示されます。
4,"Connect" をクリックする
ps4debugを利用してPS4に接続しています。
接続に成功するとウィンドウ左下に "Connected" と表示されます。
5,"Setup" をクリックする
PS4のユーザー情報を取得しています。
取得に成功するとウィンドウ左下に "Setup Done" と表示されます。
6,"Setup"横のドロップダウンリストでユーザー名を選択する
7,"Get Games" をクリックする
セーブデータが存在するゲームのタイトルIDを取得しています。
8,"Get Games"横のドロップダウンリストでタイトルIDを選択する
9,"Search" をクリックする
そのタイトルIDの各セーブデータのIDを取得しています。
10,"Search"横のドロップダウンリストでセーブデータのIDを選択する
11,"Mount" をクリックする
マウントに成功するとウィンドウ左下に "Save Mounted in /savedata" と表示されます。
12,PCとPS4をFTPで接続し、"/mnt/pfs/セーブデータ/" にアクセスし、目的の作業を行う
セーブデータは [savedata_ユーザーID_タイトルID_セーブデータのID] フォルダとしてマウントされています。
(ここでは各々目的の作業を行ってください。書き込み操作も可能です)
中にはセーブデータの実体ファイル及びsce_sysフォルダが存在します。
その実体ファイルこそ復号されたセーブデータです。それが目的の場合はそれをバックアップしてください。
(sce_sysフォルダのバックアップは不要ですが、したい方はしてください)
13,"Unmount" をクリックする
アンマウントに成功するとウィンドウ左下に "Save Unmounted" と表示されます。
14,(不要だが念の為) "/user/home/ユーザーID/savedata_meta/user/タイトルID" をバックアップする
15,(不要だが念の為) "/system_data/savedata/ユーザーID/db/user/savedata.db" をバックアップする
●復号されたセーブデータをリストアする手順
●用意するもの
・PS4 (5.05)
・PC(Windows)
・FTPクライアントソフト
・Playstation 4 Save Mounter
・復号されたセーブデータ(セーブデータの実体)(バックアップ手順)
●手順
1,ゲームを起動し、バックアップしたセーブデータと同じIDのセーブデータを作成する
(既に存在する場合は不要。手順2へ。)
(sdimg_*、*.bin ← *部分がセーブデータのID)
つまり、スロット1をバックアップしたならスロット1のセーブデータを作成しろという事。
オートセーブのデータをバックアップしたならオートセーブを発生させろという事。
2,Playstation 4 Save Mounter で手順1で作成したセーブデータをマウントする
(Mounterの使用手順はセーブデータを復号してバックアップする手順より)
3,"/mnt/pfs/セーブデータ/セーブデータの実体" をバックアップしていた物で上書きする
4,セーブデータをアンマウントする
5, ゲームを起動し、ロードしてリストアが成功したかを確認
(ロード画面では手順1で作成したセーブデータの情報が表示されます)
6,(任意) セーブする (savedata.dbを更新するために)
●暗号化されたセーブデータをバックアップする手順
●用意するもの
・PS4 (5.05)
・PC
・FTPクライアントソフト
●手順
1,PCとPS4をFTPで接続する
2,"/user/home/ユーザーID/savedata/タイトルID" をバックアップする
(特定のセーブデータだけをバックアップする場合、必ずsdimgと.binの両方をバックアップしてください)
3,(不要だが念の為) "/user/home/ユーザーID/savedata_meta/user/タイトルID" をバックアップする
4,(不要だが念の為) "/system_data/savedata/ユーザーID/db/user/savedata.db" をバックアップする
●暗号化されたセーブデータをリストアする手順(keystoneが一致する場合)
keystoneが一致しているか分からない場合はもう片方の手順でリストアを試みてください。
>>暗号化されたセーブデータをリストアする手順(keystoneが一致しない場合)
●用意するもの
・PS4 (5.05)
・PC
・FTPクライアントソフト
・暗号化されたセーブデータ(バックアップ手順)
●手順
1,ゲームを起動し、バックアップしたセーブデータと同じIDのセーブデータを作成する
(既に存在する場合は不要。手順2へ。)
(sdimg_*、*.bin ← *部分がセーブデータのID)
つまり、スロット1をバックアップしたならスロット1のセーブデータを作成しろという事。
オートセーブのデータをバックアップしたならオートセーブを発生させろという事。
2,PCとPS4をFTPで接続する
3,"/user/home/ユーザーID/savedata/タイトルID/" の、目的のセーブデータ(sdimgと.bin)を上書き
4,ゲームを起動し、ロードしてリストアが成功したかを確認
(keystoneが一致しない場合、破損データ扱いになります)
ゲームによってはロード画面でparam.sfoではなくsavedata.dbのdetailが参照されます。
そのようなゲームの場合、ロード画面では手順1で作成したセーブデータの情報が表示されます。
4,(任意) セーブする (savedata.dbを更新するために)
●暗号化されたセーブデータをリストアする手順(keystoneが一致しない場合)
●用意するもの
・PS4 (5.05)
・PC(Windows)
・FTPクライアントソフト
・Playstation 4 Save Mounter
・暗号化されたセーブデータ(バックアップ手順)
●手順
1,ゲームを起動し、バックアップしたセーブデータと同じIDのセーブデータを作成する
(既に存在する場合は不要。手順2へ。)
(sdimg_*、*.bin ← *部分がセーブデータのID)
つまり、スロット1をバックアップしたならスロット1のセーブデータを作成しろという事。
オートセーブのデータをバックアップしたならオートセーブを発生させろという事。
2,Playstation 4 Save Mounter で手順1で作成したセーブデータをマウントする
(Mounterの使用手順はセーブデータを復号してバックアップする手順より)
3,PCとPS4をFTPで接続する
4,(不要だが念の為) "/user/home/ユーザーID/savedata/タイトルID" をバックアップする
(リストアに成功したらこのバックアップは削除して良い)
5,"/mnt/pfs/セーブデータ/sce_sys/keystone" をバックアップする
6, セーブデータをアンマウントする
7,"/user/home/ユーザーID/savedata/タイトルID/" の、目的のセーブデータ(sdimgと.bin)を上書き
8,Playstation 4 Save Mounter でそのセーブデータをマウントする
9,"/mnt/pfs/セーブデータ/sce_sys/keystone" を手順5でバックアップしたkeystoneで上書き
10,セーブデータをアンマウントする
11,ゲームを起動し、ロードしてリストアが成功したかを確認
ゲームによってはロード画面でparam.sfoではなくsavedata.dbのdetailが参照されます。
そのようなゲームの場合、ロード画面では手順1で作成したセーブデータの情報が表示されます。
12,(任意) セーブする (savedata.dbを更新するために)