[PSP] iso_toolを使わずPC上でISOにアップデートを適用させる手順

2022/09/21 23:45 PSP 0
PSPのバイナリやアップデータ(PSAR)をPC上で復号出来る pspdecrypt というツールが存在しますが、2022年9月21日時点ではGitHub上のコードだとゲームのアップデートの復号をサポートしていません。
今回、5ちゃんのPPSSPPスレにてpspdecryptはコードを書き換える事でゲームのアップデートに対応させられるという昨年3月時点の情報を見かけたのでそれを試し、またPC上でのISOのアップデート適用も試してみたので、アップデート適用の手順を記事にする事にしました。


●目次


●前置き

PSPのゲームのISOを扱う場合、アップデートを適用させるにはPBOOT.PBP(アップデート)内のDATA.PSP(実行ファイルを含むファイル)を復号してELFファイルを取得し、それをEBOOT.BINとしてISO内の物と置き換えるという事を行う必要があります。この復号と置き換えを自動でやってくれるのがiso_toolです。

PSPのゲームを実機やVitaでしか遊ばないという人やいつでもそれらのハードが使えるならiso_toolで良いのですが、アップデート未適用のISOを所持するPPSSPPユーザーにとってはPC上で作業を完結させたいものです。
記事執筆時点でPPSSPPはゲームのアップデートの復号をサポートしていないため、PPSSPPで起動させたiso_toolでの適用は無理です。

PC上でのISOへのアップデートの適用は、簡単に説明すると以下のような流れになります。
  1. アップデートのpkgをダウンロード
  2. pkgを展開 (PBOOT.PBPや、それ以外のアップデートのファイルを取り出す)
  3. PBOOT.PBPを展開 (PARAM.SFOを取り出す)
  4. pspdecryptでPBOOT.PBP(内のDATA.PSP)を復号
  5. ISOを展開
  6. PARAM.SFOとEBOOT.BINを置き換える
  7. UMDGenかmkisofsでISOを作成

1と2は、手元にPSPでダウンロードしたファイルがあるならそれを使えば良いのでスキップ可能です。
PARAM.SFOは面倒なら置き換えなくても良いはずですが、iso_toolはやっているので置き換えた方が無難です。
7は、一般的にはUMDGenが推奨されますが、私が調べた限りではmkisofsでもいけそうだったのでmkisofsも挙げています。mkisofsはコマンドラインで使用するツールなので、そういう需要があると思います。

アップデートのpkgには、PBOOT.PBP以外にもアップデートのファイルが含まれている場合があります。
PBOOT.PBP以外はメモステの "/PSP/GAME/タイトルID/" に配置する必要があります。
VitaやPPSSPPの場合はメモステに相当する場所に配置します。

この記事では上記の流れをベースに解説項目を分けています。人によってはやらなくても良い作業があったり別のツールが使える場合があったりするので、自分に必要な作業を判断して進めてください。
ISOの展開は7-ZipやWinRAR等を使用すれば良いため、この記事では項目を設けていません。
また、pspdecryptに関しては改変したソースコードは同梱しますが、私がビルドしたpspdecryptはWindows用の物のみです。 この記事はWindows環境を前提として書いています。ご了承ください。

主にpkgのダウンロード作業において、事前にゲームのタイトルIDを把握しておく必要があります。確認方法はいろいろありますが、例えばWindows上でISOをPPSSPPで起動させるとタイトルバーにタイトルIDが表示されます。
また、ISO内の "/PSP_GAME/PARAM.SFO" を SFOEditorWeb-SFO-Editor 等で確認するのも手です。

→[目次]


●アップデートのpkgのダウンロード/展開

ソニーのゲーム機であればPSPに限った話ではありませんが、アップデートやDL版のpkgはURLさえ分かれば誰でもダウンロード可能です。アップデートのpkgのURLを取得する方法として、この記事では PlayStation Title Info Checker と PSN PKG Decryptor & Extractor を紹介します。
前者はブラウザ上で使用可能です。後者はアップデートのpkgのダウンロードと展開を1つのツール上で行えます。
PSPのpkgの展開はpkg2zipやPS3P_PKG_Ripper等でも可能です。前者はCLIのみ、後者はCLI/GUIの両方があります。 この記事ではpkgの展開ツールとしては PSN PKG Decryptor & Extractor と pkg2zip の2つを紹介します。

PSN PKG Decryptor & Extractor や pkg2zip で展開するとタイトルIDフォルダが取得出来ます。
PBOOT.PBPはタイトルIDフォルダにあります。PBOOT.PBP以外が存在する場合は以下に配置してください。
PSPなら → "メモステ:PSP/GAME/タイトルID/"
Vitaなら → "ux0:pspemu/PSP/GAME/タイトルID/"
PPSSPPなら → "/memstick/PSP/GAME/タイトルID/"
Vitaの場合はAdrenalineの設定によってはパーティションが変わります。
PBOOT.PBPに関しては、PPSSPPユーザーの場合は上記の場所に配置する必要はありません。(無意味なので)
PSP/Vita(Adrenaline)の場合、XMB上ではPBOOT.PBPのPARAM.SFOが参照されるため、PBOOT.PBPが無いとアップデートの項目が「破損データ」になります。ISOへのアップデート適用後であればそれでも問題ありませんが、破損データ扱いは気持ち悪いので、PSP/Vitaの場合はPBOOT.PBPも配置する方が無難です。

アップデートのpkgが複数ある場合は全てダウンロード/展開してください。
展開後、古いバージョンの物をベースに、新しいバージョンの物で上書きしていってください。
古いバージョンの物で上書きしないように注意してください。



●PlayStation Title Info Checkerでpkgをダウンロード

●用意するもの
  • PC

●手順
  1. https://kood.info/pstic/ にアクセスする。
  2. タイトルIDを入力する。
  3. アップデートが存在するかどうかのチェックが行われ、存在する場合はリンクが表示されます。
    存在する場合はダウンロードしてください。アップデートが存在しない場合は404と表示されます。

ブラウザはChrome推奨です。
何か問題が発生した場合はページを再読み込みし、Update以外のチェックを外してからやってみてください。
アップデートのpkgが複数ある場合は全てダウンロードしてください。



●PSN PKG Decryptor & Extractorでpkgをダウンロード/展開

●用意するもの
●手順
  1. PSN.PKG.Decryptor.&.Extractor.v1.85-LMAN.rar をダウンロードして解凍する。
  2. PSNPKGDecryptor&Extractor.exe を起動する。
  3. "PSN Update" ボタンをクリックする。
    PSN Update Checker というウィンドウが開きます。
  4. タイトルIDを入力して "Search" をクリックする。
    アップデートが存在する場合はウィンドウ中央のテーブルに情報が表示されます。
    存在しない場合は左下に "Nothing Found!" と表示されます。
  5. テーブルの項目を右クリックし、"Copy Selected Link" をクリックする。
  6. PSN Update Checker ウィンドウを閉じる。
  7. ウィンドウ上部のテキストボックスにURLを貼り付ける。
  8. "Extract" ボタンを押すとpkgの保存(ダウンロード)場所を問われるので選択する。
    ダウンロード後、自動的に展開が行われます。
    pkgがある場所に以下のディレクトリ構造で展開されます。
    "/コンテンツID/タイトルID/"



●PSN PKG Decryptor & Extractorでpkgを展開

●用意するもの
●手順
  1. PSN.PKG.Decryptor.&.Extractor.v1.85-LMAN.rar をダウンロードして解凍する。
  2. PSNPKGDecryptor&Extractor.exe を起動する。
  3. pkgをテキストボックスにドラッグアンドドロップする。
    或いはテキストボックス右の+ボタンをクリックしてpkgを選択する。
  4. "Extact" ボタンを押すと展開が行われます。
    pkgがある場所に以下のディレクトリ構造で展開されます。
    "/コンテンツID/タイトルID/"



●pkg2zipでpkgを展開

●用意するもの
  • PC
  • pkg2zip (lusid1 / Yoti)
  • PSPのゲームのアップデートpkg

pkg2zipは記事執筆時点ではlusid1氏のフォークがv2.3、Yoti氏のフォークがv2.4です。PSPのアップデートpkgを扱うだけならどちらでも良いはずですが、他の種類のpkgも扱う場合、記事執筆時点ではv2.4の方が良さそうです。

●手順
  1. pkg2zip をダウンロードする。
  2. コマンドプロンプトを開いて以下のように実行する。
    pkg2zip.exe -p -x pkgのパス

pkg2zip.exeにpkgをドラッグアンドドロップする事でもpkg2zipは機能しますが、EDATを含むPSPのアップデート/DLCのpkgの場合は以下のようなエラーが発生して正常に展開されない事があります。
"ERROR: unsupported EDAT file, key/drm type is wrong!"
-pオプションは本来はPSPのゲームのpkgをISOとして出力するのではなくEBOOT.PBPとして出力するオプションですが、v2.3からPSPのアップデート/DLCを正常に展開するオプションとして機能するようになりました。
-xオプションは展開した物をzipでまとめないオプションです。こちらのオプションは有効でなくても構いません。

zip内或いは-xオプションで展開した場合、"/pspemu/PSP/GAME/タイトルID/" のようなディレクトリ構造になっていると思います。pkg2zipはVitaユーザー向けに開発された物なのでこのような構造で展開されるようになっています。

→[目次]


●PBOOT.PBPの展開 (PARAM.SFOの取得)

PBPの展開は PBPViewer や PBP Unpacker/Packer 等で可能です。

PBOOT.PBPを展開して取得するのはPARAM.SFOのみで構いません。
DATA.PSPに関しては、PBOOT.PBPに対してpspdecryptを使用する際に中のDATA.PSPのみを処理させる事が可能であるため、DATA.PSPそのものを用意する必要はありません。



●PBPViewerで展開

●用意するもの
●手順
  1. PBPViewer-LMAN.rar をダウンロードして解凍する。
  2. PBPViewer.exe を起動する。
  3. PBPファイルをPBPViewer上にドラッグアンドドロップする。
  4. PARAM.SFOの項目を右クリックし、Extractを選択し、保存先を決定する。



●PBP Unpacker/Packerで展開

●用意するもの
●手順
  1. PBP Unpacker/Packer 用のフォルダを作成しておく。
    (exeと同じ場所にPBP内の全ファイルが出力されるため)
  2. PBP_Unpacker.rar をダウンロードして作業フォルダに解凍する。
  3. 作業フォルダにPBOOT.PBPをコピーする。
  4. PBOOT.PBPをEBOOT.PBPにリネームする。
  5. "PBP Unpacker - ReaperX.exe" を起動する。
  6. 1を入力してEnterを押す。(Unpack EBOOT.PBPモードに入る)
  7. "続行するには何かキーを押してください" と出るので何かキーを押す。
    展開が終了したらもう一度同じメッセージが表示される。

PBP Unpacker/Packer は実行時に同じディレクトリにunpack.exeとpack.exeを出力し、展開とパックにはそれが使用されます。コマンドライン上でPBPの展開作業をしたい等、何か理由がある場合は今後はunpack.exeを使うと良いかもしれません。
("PBP Unpacker - ReaperX.exe" のウィンドウを閉じるとunpack.exeとpack.exeは削除されてしまいます。)
unpack.exe自体にはPBPのファイル名の制限が無いので、PBOOT.PBPをリネームする必要はありません。

→[目次]


●pspdecryptでPBOOT.PBP(DATA.PSP)を復号

●用意するもの
●手順
  1. pspdecrypt-win.zip を解凍する。
  2. 以下のように実行する。(括弧は不要です。)
    pspdecrypt.exe -P <PBOOT.PBPのパス> -o <出力するEBOOT.BINのパス>

-Pオプションは大文字のPで、-oオプションは小文字のoである事に注意してください。
小文字の-pオプションやら大文字の-Oオプションも存在するので…
なお、-PオプションはPBP内のDATA.PSPのみを処理するオプションです。
-Pオプションを使用しない場合はPBOOT.PBPではなくDATA.PSP自体を使用する必要があります。

→[目次]


●PARAM.SFOとEBOOT.BINの置き換え

事前にISOを展開しておいてください。

●用意するもの
  • PC
  • PARAM.SFO(PBOOT.PBPを展開して取得した物)
  • EBOOT.BIN(PBOOT.PBP内のDATA.PSPをpspdecryptで復号した物)
  • ISOを展開した状態の物 (PSP_GAMEフォルダとUMD_DATA.BIN)

●手順
  1. "/PSP_GAME/PARAM.SFO" を上書きする。
  2. "/PSP_GAME/SYSDIR/EBOOT.BIN" を上書きする。
→[目次]


●ISOを作成

UMDGenは古くからPSPのISOの再構築に使用されているツールです。
一般的にはそちらが推奨されるため、特に理由が無ければUMDGenを使用してください。
mkisofsを使う理由は何かと言えば、UMDGenがコマンドラインで操作出来ない所にあります。
PSPのISOの再構築について調べてみると、少ないながらもUMDGenでの作業の自動化について嘆く声を見かけました。そのような理由から、人によってはmkisofsの方が適している可能性があるため、この記事で紹介する事にしました。

なお、mkisofsで作成したISOで起動出来ないとなった場合はUMDGenを使用してみてください。
それがアップデート適用後の話でかつPPSSPP上での話であれば、PPSSPPの互換性も疑ってください。
PPSSPPにおいて特定のタイトルでアップデート適用後に起動しなくなるというのはたまに聞きます。



●UMDGenでISOを作成

●用意するもの
  • PC (Windows)
  • UMDGen
  • ISOを展開した状態の物 (PSP_GAMEフォルダとUMD_DATA.BIN)

●手順
  1. UMDGen_v4.rar を解凍する。
  2. UMDGen.exe を起動する。
  3. UMDGenの右側のエリアにPSP_GAMEフォルダとUMD_DATA.BINをドラッグアンドドロップする。
  4. "Save" ボタンをクリックする。
  5. 形式を選択する。 (ISO/CSO/DAX)
  6. 保存場所を設定し、ISO/CSO/DAXを作成する。



●mkisofsでISOを作成

●用意するもの
ポータブル版のexeは自己解凍型アーカイブです。zip版はポータブル版の中身です。
どちらをダウンロードしても構いません。

●手順
  1. cdrtfe-1.5.9.zip を解凍する。
  2. 作業用のフォルダを作成する。
  3. 1で解凍した物の中から以下を作業用フォルダにコピーする。
    "/tools/cdrtools/mkisofs.exe" "/tools/cygwin/cygwin1.dll"
  4. 作業用フォルダにgameフォルダを作成し、その中にPSP_GAMEフォルダとUMD_DATA.BINをコピーする。
    (ここでは分かりやすいようにgameフォルダとしているだけです。)
  5. コマンドプロンプトで以下のように実行する。
    mkisofs.exe -iso-level 4 -xa -A "PSP GAME" -sysid "PSP GAME" -V "" -o game.iso game
    game.isoの部分と最後のフォルダ指定の部分以外は変更しないでください。

-iso-level はどの程度ISO 9660に準拠するかを決めるオプションで、4にする必要があります。
-xa はISO内にCD-ROM XAの識別子である CD-XA001 を含めるというオプションで、PSPのISOにも含まれているので、これは有効にします。
-A はApplication idを設定するオプションで、-sysid はSystem idを設定するオプションです。この2つはPSPのISOでは "PSP GAME" になっているのでそのように設定します。
-V はVolume idを設定するオプションで、PSPのISOでは空ですが、mkisofsは-Vオプションで空だと明示してやらないと "CDROM" というのを設定してしまうので、空である事を明示します。
他にVolume set idを設定する-volsetオプションやData preparer idを設定する-pオプションもありますが、そちらはPSPのISOでは空で、かつ明示してやらなくても空になるのでコマンドには含めません。
なお、このidの情報はcdrtoolsに含まれるisoinfoで以下のようにして確認可能です。
isoinfo.exe -d -i <ISOのパス>

→[目次]

kood

▼コメント




▼コメントを投稿












※「英数字90%以上」のコメントを規制中です。コメントを投稿する際は日本語でお願いします。
※確認ボタンを押すと投稿確認フォームに移ります。投稿確認フォームの送信ボタンを押してください。
※確認フォームにある「メールアドレス」に入力された内容は管理人のみ確認可能です。空欄で構いません。
※確認フォームにある「タイトル」「パスワード」は当ブログでは使用していません。空欄で構いません。
※確認フォームにある「URL」は名前のリンクとして機能します。空欄で構いません。
※確認フォームには非公開コメントのチェック項目がありますが、非公開コメントは受け付けていません。
メールフォームより連絡頂ければメールにてお返事致します。