Home News Rilasciato NSZ v2.1.1

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

774
0

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

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

🔥 Prodotti in promozione e articoli più venduti: Nintendo Switch

Vedi altri prodotti Nintendo Switch

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

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.