Home Homebrew LibProsperoPKG si aggiorna alla versione 2.0: converter backup, homebrew packager, merger PKG,...

LibProsperoPKG si aggiorna alla versione 2.0: converter backup, homebrew packager, merger PKG, supporto NAPS, PNG DDS e nuove API PS5

208
0

Il developer SvenGDK ha aggiornato LibProsperoPKG, la libreria open source sviluppata in C# 14 per .NET 10 dedicata alla creazione e gestione dei pacchetti PlayStation 5, introducendo numerose novità che ne ampliano le funzionalità e migliorano l’affidabilità.

Questa nuova versione introduce numerose funzionalità che ampliano sensibilmente le possibilità offerte, migliorando al tempo stesso l’architettura del progetto, la documentazione e gli strumenti di ispezione dei file.

Tra le novità più significative spicca l’introduzione di nuovi workflow dedicati alla gestione dei pacchetti PlayStation 5.

La libreria integra ora ProsperoBackupConverter, uno strumento progettato per convertire i backup provenienti da dischi ottici o pacchetti digitali, facilitando la gestione dei dati durante le fasi di sviluppo e analisi.

Debutta inoltre ProsperoHomebrewPackager, un sistema pensato per creare pacchetti dedicati alle applicazioni homebrew.

Per semplificare lo studio del funzionamento della libreria è stato incluso anche un progetto dimostrativo all’interno della cartella HomebrewTest, che permette agli sviluppatori di prendere rapidamente confidenza con il processo di creazione dei pacchetti.

L’aggiornamento introduce anche ProsperoPkgMerger, un nuovo strumento capace di unire automaticamente i pacchetti suddivisi in più parti, e ProsperoLaunchReadiness, un sistema di verifica che controlla se un pacchetto dispone di tutti i requisiti necessari per poter essere avviato correttamente.

Una parte importante del lavoro si è concentrata anche sulla gestione delle immagini interne ai pacchetti. LibProsperoPKG ora supporta il nuovo percorso “nwonly” data-first per la costruzione delle immagini interne di PlayStation 5, includendo strumenti dedicati alla creazione, all’assemblaggio, alla lettura e alla gestione dei metadati e delle tabelle dei percorsi.

Sul fronte dei metadati arrivano nuovi modelli come ProsperoManifest e ProsperoParam, accompagnati da nuove enumerazioni che rendono più semplice la gestione delle informazioni contenute nei pacchetti. È stato inoltre aggiunto il supporto al parsing dell’header ProsperoElfHeader, insieme a un nuovo strumento dedicato all’analisi delle licenze di debug.

L’aggiornamento migliora anche la gestione del formato NAPS, introducendo un nuovo generatore per il layout “nwonly” e strumenti specifici per la costruzione delle relative strutture dati.

Anche la gestione delle immagini riceve un’importante novità grazie all’introduzione di ProsperoPngDecoder, un decoder che consente la conversione delle immagini PNG nel formato DDS, utilizzato frequentemente durante la creazione dei contenuti destinati ai pacchetti PlayStation 5.

Dal punto di vista tecnico, SvenGDK ha ampliato in maniera significativa anche l’interfaccia C ABI nativa della libreria, aggiungendo numerose nuove funzioni esportate che migliorano l’integrazione con software sviluppati in altri linguaggi.

Parallelamente sono stati estesi gli strumenti di analisi dedicati ai file PKG, ELF e PFS, coinvolgendo diversi componenti della libreria come l’estrattore, il generatore dei pacchetti, il builder FIH e la gestione degli archivi SI.

Tra le ottimizzazioni interne trovano spazio anche una revisione del sistema di compressione Oodle/Kraken, miglioramenti al writer PFS e numerosi affinamenti dell’architettura complessiva, con l’obiettivo di incrementare affidabilità e prestazioni.

Non meno importante il lavoro svolto sulla documentazione. Sono stati aggiornati il README, la guida introduttiva, la panoramica delle API, la documentazione dedicata al formato PKG di PlayStation 5 e il documento che descrive lo stato di implementazione del progetto.

Anche le procedure di compilazione nativa per Linux e macOS sono state riviste per semplificare lo sviluppo multipiattaforma.

Nonostante i numerosi progressi, il progetto non ha ancora raggiunto un traguardo fondamentale. SvenGDK precisa infatti che i pacchetti generati dalla libreria non possono ancora essere installati correttamente su PlayStation 5.

Durante la procedura di installazione vengono infatti restituiti diversi messaggi di errore, tra cui l’assenza del file PlayGoScenario, la mancanza della firma digitale richiesta e altri problemi legati al sistema PlayGo, impedendo così il completamento dell’installazione.

Caratteristiche principali

  • Pipeline integrata in tempo reale. Cartella → layout PFS interno → crittografia AES-XTS → PFS esterno → contenitore di metadati \x7FCNT → immagine di debug \x7FFIH finale, con un processo completo dall’inizio alla fine.
  • Completamente autonomo. Il modello del progetto GP5, il generatore di immagini PFS, la crittografia AES-XTS, la firma dei metadati con RSA-3072 e la creazione dell’immagine di debug finale vengono gestiti interamente dalla libreria.
  • Lettura e scrittura dei pacchetti. Consente di analizzare e ispezionare pacchetti PS5 esistenti (\x7FCNT / \x7FFIH) e di crearne di nuovi.
  • Estrazione dei contenuti. Permette di estrarre il file system dell’applicazione da un’immagine di debug o con chiave tramite ProsperoPackageExtractor, oppure da qualsiasi immagine per cui sia disponibile la chiave immagine a 32 byte.
  • Supporto ai pacchetti di backup da disco. Apre backup suddivisi (app_0.pkg + app_sc.pkg) utilizzando il file app.json, li ricompone dinamicamente e verifica sia il digest del pacchetto sia i CRC dei blocchi da 64 KiB.
  • Gestione delle licenze (RIF). Consente di leggere, modificare e creare i record di licenza specifici per ciascun titolo, inclusi i file contenenti più licenze, tramite LibProsperoPkg.License.
  • Controlli di validazione. Verifica che un pacchetto soddisfi tutti i requisiti strutturali richiesti dal percorso di montaggio della console attraverso ProsperoPkgValidator.
  • Supporto ai pacchetti con firma falsa (fPKG). È possibile convertire facoltativamente i moduli ELF grezzi (eboot.bin, *.elf, *.prx, *.sprx) nel formato fake-self prima del packaging, generando un fPKG installabile. L’operazione non è distruttiva: i file originali vengono ripristinati al termine della procedura.
  • Conversione dei backup. ProsperoBackupConverter riconfeziona un backup applicativo decrittografato in un fPKG di debug, sostituendo ogni eseguibile con la relativa versione ELF decrittografata e applicando la firma falsa, permettendo l’avvio tramite Content ID e passcode senza richiedere un file RIF.
  • Verifica della compatibilità all’avvio. ProsperoLaunchReadiness analizza una cartella applicativa assemblata e controlla che soddisfi tutte le condizioni necessarie all’esecuzione in modalità debug: tutti i moduli eseguibili devono essere in formato plaintext supportato dal loader, eboot.bin deve essere presente e i metadati devono utilizzare param.json anziché il file param.sfo di PS4.
  • Packaging delle applicazioni homebrew. ProsperoHomebrewPackager trasforma una cartella contenente un homebrew compilato in un fPKG di debug installabile. Il processo crea una struttura pulita, genera un’immagine di debug priva di licenza con chiave di montaggio derivata da Content ID e passcode e verifica automaticamente la compatibilità all’avvio. Un esempio pratico è disponibile nella cartella src/HomebrewTest.
  • Selezione del tipo di applicazione. ProsperoApplicationType permette di definire il valore applicationDrmType all’interno del file param.json, supportando applicazioni gratuite, standard, freemium, demo e aggiornabili.
  • Generazione delle texture. Il ricodificatore delle immagini DDS (BC7) utilizzate da sce_sys per icone e immagini decodifica il file PNG originale e lo comprime direttamente nel formato DX10 BC7 durante il processo di creazione del pacchetto.

Requisiti

Componente Requisito
Toolchain .NET 10 SDK o versione successiva
Linguaggio C# 14

Compilazione

bash

cd LibProsperoPKG/src/LibProsperoPkg
dotnet build -c Release

Questo comando genera il file LibProsperoPkg.dll

Guida rapida

Aggiungere un riferimento al progetto (oppure al file LibProsperoPkg.dll compilato o al pacchetto NuGet) e creare un pacchetto partendo da una cartella dell’applicazione già preparata:

C#

using LibProsperoPkg;

var options = new ProsperoBuildOptions
{
    Mode         = ProsperoPackageMode.Application,
    OutputFormat = ProsperoOutputFormat.DebugImage,   // Installabile su console in modalità debug
    SourceFolder = @"/path/to/prepared/app",          // Deve contenere la cartella sce_sys/
    OutputFolder = @"/path/to/output",
    ContentId    = "UP9000-PPSA00000_00-PROSPERO00000000",
    TitleId      = "PPSA00000",
    Title        = "My PS5 Application",
    Version      = "01.00",
};

ProsperoBuildResult result = ProsperoPackageBuilder.Build(options, Console.WriteLine);

Console.WriteLine($"Pacchetto creato in: {result.OutputPath}");
foreach (var warning in result.Warnings)
    Console.WriteLine($"Avviso: {warning}");

Fake-signing modules (fPKG)

Impostare FakeSignSelfModules permette di convertire i moduli ELF grezzi presenti nella cartella sorgente nel formato fake-self prima della fase di creazione del pacchetto. Utilizzare ApplicationType per controllare il valore applicationDrmType generato all’interno del file param.json.

ini

var options = new ProsperoBuildOptions
{
    Mode                = ProsperoPackageMode.Application,
    OutputFormat        = ProsperoOutputFormat.DebugImage,
    SourceFolder        = @"/path/to/prepared/app",
    OutputFolder        = @"/path/to/output",
    ContentId           = "UP9000-PPSA00000_00-PROSPERO00000000",
    TitleId             = "PPSA00000",
    Title               = "My PS5 Application",
    Version             = "01.00",
    ApplicationType     = ProsperoApplicationType.FreemiumApp,
    FakeSignSelfModules = true,
};

I file che sono già nel formato SELF vengono lasciati invariati e i byte originali dei moduli vengono ripristinati automaticamente al termine della creazione del pacchetto.

Per creare in un solo passaggio un pacchetto senza DRM e senza licenza, è sufficiente impostare LicenseFree. Questa opzione applica la firma falsa ai moduli e genera la chiave di montaggio di debug utilizzando il Content ID e il passcode, evitando così la scrittura di un file RIF.

La proprietà ProsperoBuildResult.DebugLicense mostra l’autorizzazione generata, mentre ProsperoBuildResult.LicenseFree riporta lo stato dell’opzione selezionata. Il risultato finale è un’immagine di debug finalizzata, destinata a una console abilitata alla modalità debug.

Per riconfezionare un backup applicativo decrittografato in un fPKG di debug, è necessario utilizzare ProsperoBackupConverter.Convert.

Lo strumento sostituisce ogni eseguibile firmato con il relativo file ELF grezzo decrittografato, applica la firma falsa ai moduli e crea un’immagine di debug che può essere montata utilizzando il Content ID e il passcode.

Il backup originale rimane completamente invariato; il convertitore opera infatti su una copia temporanea di lavoro.

bash

var result = ProsperoBackupConverter.Convert(new ProsperoBackupConversionOptions
{
    BackupFolder = @"/path/to/backup/PPSA00000-app0",
    OutputFolder = @"/path/to/output",
});

Packaging di un modulo homebrew

Per creare un fPKG di debug installabile a partire da una cartella homebrew compilata (contenente un file eboot.bin in formato ELF grezzo e un’eventuale struttura sce_sys/), è possibile utilizzare ProsperoHomebrewPackager.Package.

Durante il processo il modulo viene convertito tramite firma falsa (fake-sign) e la chiave di montaggio viene generata automaticamente utilizzando il Content ID e il passcode. Successivamente viene eseguito un controllo per verificare la compatibilità con l’avvio (launch-readiness).

Un esempio completo di utilizzo è disponibile nella cartella src/HomebrewTest.

bash

var result = ProsperoHomebrewPackager.Package(new ProsperoHomebrewPackageOptions
{
    HomebrewFolder = @"/path/to/HomebrewTest",
    OutputFolder   = @"/path/to/output",
    ContentId      = "UP9000-PPSA99099_00-PROSPERO00000000",
    Title          = "LibProsperoPKG",
});
Console.WriteLine($"Launch ready: {result.LaunchReadiness.IsLaunchReady}");

Analisi di un pacchetto esistente

C#

using LibProsperoPkg.PKG;

ProsperoPkg pkg = ProsperoPkgReader.Read(@"/path/to/some.pkg");
Console.WriteLine($"Tipo:       {pkg.Type}");
Console.WriteLine($"Content ID: {pkg.Header.ContentId}");
Console.WriteLine($"Elementi:   {pkg.Entries.Count}");

API pubbliche in sintesi

Namespace Tipi principali
LibProsperoPkg ProsperoPkgBuilder, ProsperoPkgReader, ProsperoCntWriter, ProsperoFihBuilder, ProsperoPkgSigner, ProsperoDdsEncoder, ProsperoPackageExtractor, ProsperoExtractionKey, ProsperoPkgValidator, ProsperoPkg, ProsperoPkgHeader
LibProsperoPkg.PFS ProsperoPfsLayout, ProsperoPfsImage, ProsperoPfsc, ProsperoPfsExtractor
LibProsperoPkg.License ProsperoRif, ProsperoRifSet, ProsperoEntitlementKey
LibProsperoPkg.NpDrm ProsperoNpDrmContentInfo
LibProsperoPkg.DiscBackup ProsperoDiscBackup, ProsperoDiscBackupManifest, ProsperoPlaygoChunkCrc
LibProsperoPkg.GP5 Gp5Creator, Gp5Project e il relativo modello degli elementi
LibProsperoPkg.Keys ProsperoKeys
LibProsperoPkg.PlayGo ProsperoPlayGo
LibProsperoPkg.Content ProsperoUcpProsperoFselfProsperoSelfAuthInfoProsperoElfHeaderProsperoLaunchReadiness

Consultare la sezione docs/ per lo stato completo delle funzionalità e la descrizione tecnica del pacchetto PS5.

Documentazione

Limitazioni

LibProsperoPkg genera un pacchetto completo e coerente, la cui struttura e il contenitore dei metadati possono essere letti e ricostruiti correttamente tramite il lettore integrato.

Tuttavia, due componenti dell’immagine finale dipendono da informazioni generate direttamente dalla console e vengono quindi ricreate con un approccio best effort anziché essere riprodotte in modo identico: la tabella dei digest dell’immagine finale e l’archivio dei metadati di installazione presente nella parte conclusiva del pacchetto.

La libreria è pensata principalmente per console in modalità debug, dove i controlli sull’immagine finale risultano meno restrittivi. L’accettazione del pacchetto sulla console rimane comunque vincolata all’hardware.

Per maggiori dettagli è possibile consultare docs/implementation-status.md.

Changelog

Nuove funzionalità

Nuovi flussi di lavoro per i pacchetti

  • Conversione dei backup – Aggiunto ProsperoBackupConverter per convertire backup di dischi e pacchetti.
  • Packaging homebrew – Introdotto ProsperoHomebrewPackager per creare pacchetti contenenti contenuti homebrew, con l’aggiunta di un pacchetto di esempio disponibile nella cartella src/HomebrewTest/.
  • Unione dei pacchetti suddivisi – Aggiunto ProsperoPkgMerger per combinare pacchetti composti da più parti.
  • Controlli di compatibilità all’avvio – Integrato ProsperoLaunchReadiness per verificare se un pacchetto è pronto per essere eseguito.

Immagine interna e metadati

  • Aggiunto il nuovo percorso interno “nwonly” basato sui dati, con un sistema completo per la creazione dell’immagine interna PS5, comprendente builder, assembler, lettore e strumenti di gestione dei metadati e delle tabelle dei percorsi flat.
  • Introdotti nuovi modelli per i metadati: ProsperoManifest, ProsperoParam e relativi enumeratori.
  • Aggiunto il supporto al parsing del nuovo ProsperoElfHeader e un helper per la gestione delle licenze di debug.
  • Implementato il builder per il layout NAPS e il generatore nwonly NAPS.

Gestione delle immagini

  • Aggiunto ProsperoPngDecoder, che permette la decodifica da formato PNG a DDS.

Miglioramenti e correzioni

  • Ampliamento dell’ABI C nativa – Estesa l’interfaccia C nativa (NativeExports.cs, exports.txt, libprosperopkg.h) con numerose nuove funzioni esportate.
  • Ispezione più completa di pacchetti, ELF e PFS – Migliorati gli strumenti di analisi per pacchetti, file ELF e strutture PFS all’interno dell’estrattore, del builder PKG, del builder FIH e dell’archivio SI.
  • Ottimizzazione della compressione e del sistema PFS – Riscritti i componenti interni della compressione Oodle/Kraken e migliorato il writer PFS con diverse ottimizzazioni e correzioni.

Documentazione e compilazione

  • Aggiornamento della documentazione – Aggiornati il file README, la guida getting-started, la panoramica delle API, la documentazione sul formato PS5 PKG e il documento sullo stato dell’implementazione per riflettere le nuove funzionalità disponibili.
  • Aggiornamento dei processi di compilazione nativa – Aggiornati i workflow di compilazione nativa per Linux e macOS.

Note

I file PKG non sono ancora installabili e attualmente generano i seguenti messaggi di errore:

bash

[PlayGoCore][DbgInstall] begin (UP9000-PPSA99099_00-PROSPERO00000000)
[PlayGoCore][DbgInstall] not found PlayGoScenario json
[PlayGoCore][DbgInstall] Staring Pre-allocation transfer on NativeApplicationActor
[PlayGoCore][DbgInstall] crc validation disabled
[PlayGoCore][DbgInstall] BfsContainerCreate : fd=35 container_id=1 name=FIH/SC capacity_reserved=393216 # ret=0x0
[PlayGoCore][DbgInstall] BfsContainerBind : fd=35 container_id=1 length=65536 offset=0 # ret=0x0
[PlayGoCore][DbgInstall] BfsContainerBind : fd=35 container_id=1 length=327680 offset=720896 # ret=0x0
[PlayGoCore][DbgInstall] supplemental info transfer started
[PlayGoCore][DbgInstall] supplemental info transfer ended (0x00000000)
[PlayGoCore][DbgInstall] not found PlayGoScenario json
[PlayGoCore][DbgInstall][ERROR] not support signature.(0x00000000)
[PlayGoCore][DbgInstall][WARNING] playgo-chunk.crc not found
[PlayGoCore][DbgInstall] BfsContainerCreate : fd=35 container_id=2 name=PlayGo Chunk capacity_reserved=655360 # ret=0x0
[PlayGoCore][DbgInstall] BfsContainerBind : fd=35 container_id=2 length=655360 offset=65536 # ret=0x0
[PlayGoCore][DbgInstall] end (UP9000-PPSA99099_00-PROSPERO00000000, 0x80b21185)

Download: LibProsperoPKG v2.0 (Windows x64)

Download: LibProsperoPKG v2.0 (Windows arm64)

Download: LibProsperoPKG v2.0 (MacOS arm64)

Download: LibProsperoPKG v2.0 (Linux x64)

Download: LibProsperoPKG v2.0 (Linux arm64)

Download: Source code LibProsperoPKG v2.0

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS5

Vedi altri prodotti PS5

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

Ultimo aggiornamento 2026-08-15 / Link di affiliazione / Immagini da Amazon Product Advertising API

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.