[Scena Switch] Rilasciato NSZ v3.0

NSZ è un utilissimo script python sviluppato dal developer Nico Bosshard che ci permette di comprimere e decomprimere i file .nsz da poter poi utilizzare sulla console Switch.

I file NSZ sono sostanzialmente identici ai file NSP, questo significa che non sono realmente un nuovo formato. Il loro unico scopo è quello di avvisare l’utente che contiene file NCZ compressi. I file NCZ possono essere miscelati con file NCA nello stesso contenitore.

NSC_Builder supporta la compressione di file NSP in NSZ e la decompressione di file NSZ in NSP. Gli script di esempio che si trovano qui sono solo esempi di come funziona il formato. NSC_Builder può essere scaricato da questo link.

XCZ

I file XCZ, come per i file NSZ sono sostanzialmente identici ai file XCI, questo significa che anche loro non sono realmente un nuovo formato. Il loro unico scopo è quello di avvisare l’utente che contiene file NCZ compressi. I file NCZ possono essere miscelati con file NCA nello stesso contenitore.

NCZ

Questi sono file NCA compressi. I file ANC vengono decodificati e quindi compressi mediante zstandard. Sono supportate solo le ANC con un’intestazione di 0x4000 byte (le CNNT non sono supportate).

I primi 0x4000 byte di un file NCZ sono esattamente gli stessi del file NCA originale (anche questa è ancora crittografata).

A 0x4000, ci sarà una struttura di intestazione NCZ di dimensioni variabili. Questa intestazione contiene un elenco di sezioni che indicano al decompressore come ri-crittografare i dati NCA dopo la decompressione.

Tutte le informazioni nell’intestazione possono essere derivate dal Ticket NCA + originale, tuttavia vengono fornite pre-preparate per rendere la decompressione il più semplice possibile per terze parti.

Immediatamente dopo l’intestazione NCZ, il flusso zstandard inizia e termina in EOF. Il flusso viene decompresso per compensare 0x4000.

class NczHeader
{
public:
       class Section
       {
       public:
              u64 offset;
              u64 size;
              u8 cryptoType;
              u8 padding1[7];
              u64 padding2;
              integer<128> cryptoKey;
              integer<128> cryptoCounter;
       } PACKED;
       const bool isValid()
       {
              return m_magic == MAGIC && m_sectionCount < 0xFFFF;
       }

       const u64 size() const
       {
              return sizeof(m_magic) + sizeof(m_sectionCount) + sizeof(Section) * m_sectionCount;
       }

       const Section& section(u64 i) const
       {
              return m_sections[i];
       }

protected:
       u64 m_magic;
       u64 m_sectionCount;
       Section m_sections[1];

       static const u64 MAGIC = 0x4E544345535A434E;
} PACKED;

Installazione

  • Inserire il file prod.keys scaricato in %userprofile%/.switch, installare python, eseguire il comando pip install nsz e utilizzare nsz come qualsiasi altro comando cmd.
    • Volendo è possibile utilizzare semplicemente la build portatile di Windows.
  • Per installare manualmente le dipendenze utilizzare invece il comando: pip install -r requirements.txt

Script del compressore

Lo script necessita delle chiavi keys.txt compatibile con hactool che deve essere presente nella stessa directory del file nsz.py. Attualmente funziona solo con giochi base, aggiornamenti e DLC.

Esempio di utilizzo: nsz.py --level 17 -C title1.nsp title2.nsp title3.nsp

Questo genererà i file title1.nsz, title2.nsz, title3.nsz

Requisiti Python

py -3 -m pip install -r requirements.txt

Guida

nsz.py --help
usage: nsz.py [-h] [-i INFO] [--depth DEPTH] [-N VERIFY_NCAS]
              [-x EXTRACT [EXTRACT ...]] [-c CREATE] [-C] [-D] [-l LEVEL]
              [-b BLOCK] [-s BS] [-t THREADS] [-o OUTPUT]
              [file [file ...]]

positional arguments:
   file

optional arguments:
  -h, --help       show this help message and exit
  -i INFO, --info  INFO show info about title or file
  --depth DEPTH    max depth for file info and extraction
  -N VERIFY_NCAS, --verify-ncas VERIFY_NCAS
                   Verify NCAs in container
  -x EXTRACT [EXTRACT ...], --extract EXTRACT [EXTRACT ...]
                   extract / unpack a NSP
  -c CREATE, --create CREATE
                   create / pack a NSP
  -C               Compress NSP
  -D               Decompress NSZ
  -l LEVEL, --level LEVEL
                   Compression Level
  -b BLOCK, --block BLOCK
                   Uses highly multithreaded block compression with
                   random read access allowing compressed games to be
                   played without decompression in the future however
                   this comes with a low compression ratio cost. Current
                   title installers do not support this yet.
  -s BS, --bs BS Block Size for random read access 2^x while x between
                   14 and 32. Default is 19 => 512 KB. Current title
                   installers do not support this yet.
  -t THREADS, --threads THREADS
                   Number of threads to compress with. Usless without
                   enabeling block compression using -b. Negative
                   corresponds to the number of logical CPU cores.
  -o OUTPUT, --output OUTPUT
                   Directory to save the output NSZ files

## Credits

SciresM for his hardware crypto functions; the blazing install speeds (50 MB/sec +) achieved here would not be possible without this.

Nicoboss for the original awesome idea. https://github.com/nicoboss/nsZip/

Changelog

  • GUI:
    • Contiene tutte le funzioni disponibili utilizzando gli argomenti della riga di comando.
  • Supporto XCZ:
    • Blocco compresso (impostazione predefinita).
    • Compressione solida.
    • Decompressione da XCZ a XCI.
  • Implementata la compressione parallela solida. Vedi --multi
  • Implementata l’estrazione della chiave titlekey con titlekeys.txt e supporto titledb. Vedi --titlekeys
  • Aggiunto supporto regex all’opzione di estrazione per consentire all’utente di specificare esattamente quali file devono essere estratti dal contenitore. Vedi --extractregex
  • Decompressione NCZ direttamente in nsz #38
  • Aggiornato IndependentNczDecompressor all’ultima versione in nsz.
  • Pienamente sostituito tqdm con enlighten.
    • Implementato il sistema di comunicazione multithread con barre di processo multiple per una solida compressione e verifica evitando condizioni di gara stdout.
  • Decompressione/verifica senza fine su alcuni giochi compressi a blocchi #25
  • Corretto un bug che causava il riempimento dello spazio tra i file NCZ compressi a blocchi con 0x00 per adattarsi alle loro dimensioni non compresse.
  • Pulizia degli script principali.
  • Corretto il problema con l’indicatore di stato TQDM Decompressor NSZ.
  • Corretto --rm-old-version.
  • Corretto un bug del percorso con decompressione.
  • Rimossa la restrizione pycryptodome v3.9.0 poiché l’ultima v3.9.3 funziona correttamente.
  • Migliorata la guida all’installazione.
  • Corretto un problema che poteva verificarsi durante il tentativo di ricevere chiavi in ​​circostanze speciali durante il debug.
  • Risolto un bug importante all’interno del controllo esistente del file avanzato che portava alla sovrascrittura di file con lo stesso nome di un file già esistente nella directory di output senza specificare questo comportamento usando l’argomento della riga di comando –overwrite. Questo errore è stato causato confrontando il percorso del file di output anziché il nome del file di output con i nomi file esistenti.
  • Realizzato il pacchetto pip nsz con Kivy compatibile.
  • Passato da Nuitka a PyInstaller grazie alla compatibilità Kivy.
  • Modificato il modo in cui gli argomenti --extract e --verify sono gestiti internamente.
  • Configura l’elemento della configurazione con pipeline di Azure utilizzando un server self-hosted.
  • Passa completamente a pathlib. Questo corregge il bug #41 e molti altri problemi relativi al percorso del file.
  • Corretto il controllo esistente del file avanzato. Adattandosi a pathlib e infine risolvendo --overwrite e --rm-old-version.
  • Migliorata la gestione delle eccezioni relativa a keys.txt obsoleto che corregge i problemi #29#40.
  • Miglioramenti generali della stabilità del sistema per migliorare l’esperienza dell’utente.

Download: NSZ v3.0.0 [Win64]

Download: Source code NSZ v3.0.0

Fonte: github.com

(Visited 1 times, 1 visits today)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *