[Hack] PS3にNPDRMで作成した自作アップデータを適用する

PKGとは

Wikipediaに詳細が書かれているのだが、英語版しか記事がないためそれを翻訳します。

.pkg (package) files are used to install software and other files onto a certain device, operating system, or filesystem, such as the macOS, iOS, PlayStation Vita, PlayStation 3, and PlayStation 4.

From Wikipedia, the free encyclopedia

.pkg ファイルはソフトウェアやその他のファイルを特定のデバイスやオペレーティング・システムやmacOS, iOS, Vita, PS3, PS4などのシステムファイルにインストールするために使用されています。

PlayStation Vita, Sony PlayStation 3, Sony PlayStation 4 — used for installation of PlayStation Vita, PlayStation 3 and PlayStation 4 software, applications, homebrew, and DLC from the PlayStation Store[1]

From Wikipedia, the free encyclopedia

Vita, PS3, PS4において、ソフトウェア・アプリケーション・HomebrewやDLCをPS Storeからインストールする際に利用されています。

かいつまんでいうと、PKGファイルはPS Storeから配布されたアプリケーションとしてPS3にソフトウェアをインストールするためのファイルということです。

これはNintendo SwitchでいうところのeShop形式ファイルであるNSPと共通するところがありますね。

より詳しいPKGについての情報は以下のwikiをご覧ください。

つまり、自分でPKGを作成することでさも公式のアップデータのように振る舞うことができるわけです。

公式のアップデータはゲーム内のデータの全てを置換することができるので(この辺りの考え方はLFSに近いかもしれません)、EBOOT.BINを含む全てのファイルを差し替えることができます。

LFSに関しては以下の記事でちょっと解説しています。

PKGについて

実際にアップデータを作成する上では必要ないのですが、PKGとはそもそもなんなのかということについて理解を深めたいと思います。

基礎知識

もうずっと昔のことなのでかなり忘れているし、理解が足りていないので間違っているところもあるかもしれない。

というか、PS3のシステムってめちゃくちゃ難しいですよね。

ゲームパッケージ

すべてのゲームパッケージはECDSA署名されています。

楕円曲線DSA(だえんきょくせんDSA、Elliptic Curve Digital Signature Algorithm、Elliptic Curve DSA、楕円DSA、ECDSA)は、Digital Signature Algorithm (DSA) について楕円曲線暗号を用いるようにした変種である。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ECDSA署名は今のところ手軽に実装できる署名の中では多分最強の暗号です。

正しく実装されていれば秘密鍵を見つけるには膨大な時間を必要としますが、FW3.55までのPS3では実装に不備があったためソフトウェア署名鍵が漏洩してしまいました。

公開鍵はdownload_plugin.prxまたはnas_plugin.prx(これはNPDRM SELFにも使われています)で見つけることができます。普通、ゲームパッケージは二種類の署名が施されており、一つはヘッダーでもう一方はエントリーテーブルに使われています。

というわけで、PS3にPKGインストールするためには何らかの署名を行わなければいけません。

でもCFWは署名をパスできる機能があるはずだから要らないのでは?という気もしてきました。

実際、どうなんでしょう?

必要なファイルとツール

PS3のPKG作成には以下のファイルとツールが必要です。

package.conf

コンテンツIDやDRMの種類について記述する設定ファイルです。

Config nameusagevalue
コンテンツID
必須
ライセンス必須
DRMタイプ必須Network/Free/Local
コンテンツタイプ必須*1
パッケージタイプ*2
パッケージバージョン必須XX.XX

[1] コンテンツタイプは以下のtype nameを参考に。

[2] パッケージタイプは以下のtype nameを参考に。

https://www.psdevwiki.com/ps3/PKG_files#ContentType
https://www.psdevwiki.com/ps3/PKG_files#PackageType
:: package.conf
Content-ID = EP0001-BLJM61192_00-0000111122223333
K_licensee = 0x00000000000000000000000000000000
DRM_Type = Free
Content_Type = GameData
PackageType = DiscGamePatch
PackageVersion = 01.00

書き方のテンプレートはこんな感じになります。

PackageTypeをDIscGamePatchにしているんですが、自分はHDDにバックアップしたゲームを起動することが多いのでHDDGamePatchと記述しなきゃいけないのかな?と思っていたりします。

PkgView

PKGを展開できるツール。

PS3 Game Updater

ぼくが使っているものとは違いますが、これでもちゃんとアップデータはダウンロードできるはずです。

psn_package_npdrm

もはやなかなか見つからないレアツールになってしまった。

でも、これが必要なんです。

実際にやってみた

今回はエスカ&ロジーのアトリエを対象にPKGインストールを試みました。

実は五年くらい前にも全く同じことをやっているのですが、再チャレンジする感じですね。

必要なツールやファイルはクラウドに保存されていたのでそれをダウンロードしてきました。

やり方覚えているといいんですけれど…

現在インストールされているバージョン

現在1.05なので1.06以上にしないとアップデータが適応されません、多分。

アップデータの入手

ゲームのアップデータが公式に配布されていないといろいろとめんどくさいので、まずはアップデータを手に入れましょう。

アップデータの入手にはPS3 Game Updaterが便利です。

亜種がいろいろあるのですが、個人的にはPS3 Game Updater 1.41が好みです。

PS4 Game Updater 1.41

エスカ&ロジーのアトリエのGameIDはBLJM61050なのでそれを打ち込んでアップデートを検索します。

もしすべてのパッチがあたっていないのであれば、全てダウンロードした上でインストールしましょう。

今回は最新のパッチを元に自作アップデータを作りたいだけなので、最新版の1.05だけダウンロードすればオッケーです。

PKGの展開

PkgView

ダウンロードしたPkgはPkgViewで展開できます。

今回必要なのはPARAM.SFOとICON0.PNGだけです。

PKGを展開したところ

ファイルの改変

エスカ&ロジーのアトリエまではパラメータが暗号化されず平文のままxmlで保存されているので簡単にパラメータをいじれます。

今回はショップのアイテムの売価を0にしてみました
元々は在庫数1で値段は10000です

ここはゲームによって何を変更するか変わってきます。

モデルを変えたりすることも可能だと思います。

PARAM.SFOの編集

今のままでは1.05のアップデータを上書きしたことになってしまうので、1.06のアップデータを自作します。

最悪、これはやらなくても問題ありません。

バイナリエディタでVERSIONを変更します。

編集したら保存して終了します。

package.confの編集

ここまでできたらあとはフォルダをPKGに再パッケージします。

package.confの記述例は以下の通り。

:: package.conf
Content-ID = EP0001-BLJM61050_00-0000111122223333
K_licensee = 0x00000000000000000000000000000000
DRM_Type = Free
Content_Type = GameData
PackageType = DiscGamePatch
PackageVersion = 01.06

Content-IDのところはGame IDさえあっていれば大丈夫なはずです。

psn_package_npdrm

コマンドを打ち込んでPKGファイルを作成します。

C:\Users\me\Desktop\PKG>psn_package_npdrm.exe package.conf BLJM61050

 PARAM.SFO: overwrite VERSION to 01.06. (from 01.00)
Package Configuration:

ContentID        = EP0001-BLJM61050_00-0000111122223333
Klicensee        = 0x00000000000000000000000000000000
DRMType          = Free
ContentType      = GameData
PackageType      = DiscGamePatch (without USRDIR/EBOOT.BIN)
PackageFlag      = RenameDirectory (during install for consistency)
PackageVersion   = 01.06
# TITLE_ID       : BLJM61050
# CATEGORY       : GD
# VERSION        : 01.06
# APP_VER        : 01.06
# TARGET_APP_VER : 01.05
# PS3_SYSTEM_VER : 04.3000
# QA_Digest      : 0xE5846AF839465F64BCE6F8BABBAD589E
# Packaged by    : MODDED V1.0 - Original Rev. 1732

Allocating disk space for the package: 781,632 bytes.
Generate Package : "EP0001-BLJM61050_00-0000111122223333-A0106-V0106.pkg"

 Entry list: [17 entries]
   raw data: PARAM.SFO
   raw data; ICON0.PNG
  directory: USRDIR
  directory: USRDIR/Saves
  directory: USRDIR/Saves/item
  directory: USRDIR/Saves/shop
   raw data: USRDIR/Saves/item/itemData.xml
   raw data: USRDIR/Saves/item/item_analyze.xml
   raw data: USRDIR/Saves/item/item_book.xml
   raw data: USRDIR/Saves/item/item_effect.xml
   raw data: USRDIR/Saves/item/item_give_eff.xml
   raw data: USRDIR/Saves/item/item_mat_pot.xml
   raw data: USRDIR/Saves/item/item_potential.xml
   raw data: USRDIR/Saves/item/item_status.xml
   raw data: USRDIR/Saves/shop/ShopCmd.xml
   raw data: USRDIR/Saves/shop/ShopData.xml
   raw data: USRDIR/Saves/shop/ShopList.xml

このようなログがズラーッと流れてきます。

PKG作成に成功

最後にPKGが作成できていることを確認すれば完了です。

PKGインストール

USBに作成したPKGを入れます。

自動で認識してくれるので別にPS3フォルダ内に入れる必要はありません。

Package Manager

XMBからPackage Managerをひらきます。

Standard Package Location

Standard Package Locationを選択します。

PKGインストール

インストールが完了したら上書きができているか調べましょう。

バージョン1.06に更新完了

無事に自作アップデータが適応されていることが確認できました。

ゲームの起動

バージョンが1.06に更新できたことを確認したらゲームを起動して、パラメータが反映されているか確認します。

価格は0にしたはずなのですが、どうもゲーム内の最低価格は1のようです。

在庫が1のまま変わっていなくて、これもゲーム内で定義されているのかな?と思ったのですがここでパラメータの持つ意味を再度考えてみました。

誰得なパラメータ表をおいておきます。

パラメータ意味
ItemTag
アイテムタグ
Stock在庫?
Refill補充数
RefillCnt一回の補充で増やされる在庫?
DayAdd補充されるまでの日数?
Cost価格(最低は1)
Quality品質
EvStart販売されるイベント

要するに、在庫数はどうもそのままでは直接弄れないようなので一度寝るなりして日数を経過させる必要があるみたいです。

Refill(アイテムの補充)をしてくれれば反映されるだろうと思って一日意味もなくすごした結果…

無事に在庫数カンストしました

このようにxmlを直接弄ることができるゲームはEBOOT.BINを編集しなくても内部データを変更することができてしまいます。

まとめ

以上、PKGを用いたPS3ゲームのパラメータ置換方法でした。

めんどくさそうな感じがしますが、一度アップデータをダウンロードしてPARAM.SFOとICON0.PNGがあればあとはファイルを編集してPKG化するだけなので簡単です。

実は同様の方法でDLCもインストールできたりするのですが、これはたとえ無料のDLCであってもPSNの認証が必要なのでそのままでは有効になりません。

かなりコアな内容の記事になりましたが、この内容が誰かの役に立つことを願っております。