[Scena Switch] Rilasciato NSZ v2.1.1 [aggiornato x1]

NSZ è un utilissimo script python sviluppato dal developer Nico Bosshard che ci permetterà di comprimere e decomprimere i file .nsz da poter poi utilizzare su 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.

Questo nuovo aggiornamento, oltre alla correzione di bug e miglioramenti vari, aggiunge il supporto per la creazione di finestre standalone Nuitka, il compilatore permette di compilare uno script python in eseguibili C/C++.

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 v2.1.1

  • Corretta la compressione dei blocchi per pip e Nuitka (nsz_win64_portable) utilizzando sys.argv[0] invece di __main __.__ file__, pertanto non è più necessario impedire ai thread di inizializzare il proprio ambiente nut.
  • Rese le istruzioni di installazione più facili da vedere e comprendere.
  • Script per automatizzare test e pubblicazioni.

Changelog v2.1

  • Sono cambiati 98 commit dalla versione 2.0.
  • Aggiunto supporto pip.
  • Aggiunto supporto per la creazione di finestre standalone Nuitka.
  • Migliorato File Existing Check #20
    • Salta i file già compressi/decompressi per impostazione predefinita.
    • --overwrite
    • --rm-old-version
    • Estrazione dei TitleID e delle Versions dal nome del file, se possibile (#17#19).
      • Il controllo dei titleID ora è immensamente più veloce di quando si estrae da Cnmt.
    • --parseCnmt per ottenere TitleID/versione da Cnmt se non estraibile dal nome del file.
      • Altrimenti ricade sul semplice controllo del nome del file che è molto più veloce.
  • Gestione degli errori batch con traceback (#16).
    • Alcuni codici di debug per scoprire file errati.
    • Previene diversi errori di aumento del processo batch.
    • Gestione degli errori batch con traceback.
  • L’opzione --thread ora funziona anche per una compressione solida, tuttavia la barra di avanzamento presenta ancora alcuni problemi visivi.
  • La verifica dell’hash del file NSP/NSZ ora utilizza gli hash all’interno di Cnmt anziché il nome del file nca (#22).
  • Corretto il problema con la perdita di memoria con la decompressione (#21).
    • La perdita di memoria si verifica solo per dctx.stream_reader ed è stata corretta passando alla semplice API di decompressione che ha comunque più senso per la decompressione dei blocchi.
  • Migliorata la velocità di calcolo di pageReadSize utilizzando la matematica anziché un ciclo while.
  • Aggiunta opzione --remove-source che cancella il file sorgente dopo la compressione o decompressione (#24).
    • Per questo abbiamo finalmente chiuso correttamente anche i contenitori di file.
  • Correzione della perdita di memoria di compressione enorme (#13).
  • Corretto il problema con una directory di lavoro errata quando si avvia nut.py da una directory diversa (#18).
  • Migliorata la gestione delle eccezioni durante l’estrazione di TitleID/Version.
    • Aggiunto supporto per prod.keys.
  • Riorganizzata la struttura dei file.
  • Corretto il percorso keys.txt in modo che fosse sempre la cartella contenente nsz.py.
  • Corretto il numero di thread predefinito impostato su cpu_count().
  • Implementato il controllo della versione di Python per impedire a Python di mostrare agli utenti confuse eccezioni relative alla compatibilità.
    • Compatibile e testato con Python 3.6 e versioni successive.
  • Miglioramenti generali alla stabilità del sistema per migliorare l’esperienza dell’utente.

Download: NSZ v2.1.1 [Win64]

Download: Source code NSZ v2.1.1

Fonte: github.com

(Visited 1 times, 1 visits today)

Lascia un commento

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