Disponibile un nuovo e interessantissimo aggiornamento per NSZ, lo strumento sviluppato dal developer Nico Bosshard ci permette di comprimere e decomprimere le ROM della console Switch, e senza subire alcuna perdita grazie all’algoritmo di compressione zstd.
I file compressi sono sostanzialmente identici alla controparte, questo significa che non sono realmente un nuovo formato. Il loro unico scopo è quello di avvisare l’utente che contiene file compressi.
Installazione
Per poter utilizzare correttamente lo script, dovrete fornire nella stessa directory del programma il file delle chiavi prod.keys
oppure keys.txt
. Le stesse chiavi si rendono compatibili con l’utility hactool. Se non avete a disposizione queste chiavi potrete scaricarle con Lockpick_RCM.
Build Windows
L’eseguibile per PC Windows non necessita di alcuna libreria, basta caricare le chiavi e cliccare sul file nsz.exe
. Chi preferisce può comunque continuare ad utilizzare gli script Python.
[stextbox id=’info’]Nota: I metodi elencati di seguito richiedono l’installazione di Python 3.6+.[/stextbox]
PIP Package
Il modo più semplice per installare lo script sarebbe quello di utilizzare il seguente comando in un terminale o un prompt dei comandi. Funziona su tutti i sistemi operativi con Python 3.6 e versioni successive.
pip3 install --upgrade nsz
Se sei interessato a installare la GUI per lo script, puoi farlo eseguendo uno dei seguenti comandi. Su Linux si consiglia vivamente di seguire invece i passaggi ‘In esecuzione dal source su Linux’.
Se avete installato Python 3.6 o Python 3.7 digitare:
pip3 install --upgrade nsz[gui]
Se invece avete installato Python 3.8 o una versione successiva, scaricare il file requirements-gui.txt
e digitare:
pip3 install -r requirements-gui.txt
In esecuzione dal source su Linux
Su Linux basta clonare ed eseguire pip3 install -r requirements.txt
per la versione senza GUI e ./install_linux.sh
se si desidera la GUI.
In esecuzione dal source su Windows
Lo script può essere eseguito anche clonando localmente la repository, è necessario installare le dipendenze eseguendo il seguente comando:
pip3 install -r requirements.txt
La GUI è opzionale e richiede moduli aggiuntivi per essere eseguita. Per installare i moduli necessari per eseguire la GUI, eseguire il seguente comando su Python 3.6 e Python 3.7 su Windows:
pip3 install -r requirements-gui.txt
Pochi esempi di utilizzo
- Per comprimere tutti i file in una cartella:
nsz -C /path/to/folder/with/roms/
- Per comprimere tutti i file in una cartella e verificare l’integrità dei file compressi:
nsz --verify -C /path/to/folder/with/roms/
- Per comprimere tutti i file in una cartella con 8 thread e inviare i file risultanti in una nuova directory:
nsz --threads 8 --output /path/to/out/dir/ -C /path/to/folder/with/roms/
- Per comprimere tutti i file in una cartella con livello di compressione di livello 22:
nsz --level 22 -C /path/to/folder/with/roms/
- Per decomprimere tutti i file in una cartella:
nsz -D /path/to/folder/with/roms/
[stextbox id=’info’]Nota: Per visualizzare tutti i possibili flag e una descrizione su cosa fa ogni flag, digitare nsz --help
.[/stextbox]
NSZ
I file NSZ sono sostanzialmente identici ai file NSP. Il loro unico scopo è avvisare l’utente che contiene file NCZ compressi. I file NCZ possono essere combinati con file NCA nello stesso contenitore.
In alternativa a questo strumento, NSC_Builder supporta anche la compressione di NSP in NSZ e la decompressione di NSZ in NSP. NSC_Builder può essere scaricato da: https://github.com/julesontheroad/NSC_BUILDER
XCZ
I file XCZ sono sostanzialmente identici ai file XCI. Il loro unico scopo è avvisare l’utente che contiene file NCZ compressi. I file NCZ possono essere combinati con file NCA nello stesso contenitore.
NCZ
Questi sono file NCA compressi. I file NCA vengono decodificati e quindi compressi mediante zstandard. I primi 0x4000 byte
di un file NCZ sono esattamente gli stessi del file NCA originale (è ancora crittografati). Ciò si applica anche se la prima sezione non inizia con 0x4000
.
A 0x4000
, ci sarà una struttura di intestazione NCZ di dimensioni variabili. Questa intestazione contiene un elenco di sezioni che indicano al decompressore come crittografare nuovamente i dati NCA dopo la decompressione. Può contenere anche un’intestazione di compressione del blocco opzionale che consente l’accesso in lettura casuale.
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 eseguire l’offset 0x4000
. Se viene utilizzata la compressione a blocchi, il flusso viene suddiviso in blocchi indipendenti e può essere decompresso come mostrato in https://github.com/nicoboss/nsz/blob/master/nsz/BlockDecompressorReader.py
Riferimenti
- Pacchetto pip NSZ: https://pypi.org/project/nsz/
- Thread del forum: https://gbatemp.net/threads/nsz-homebrew-compatible-nsp-xci-compressor-decompressor.550556/
Changelog
- Implementato il supporto Drag & Drop come richiesto in #51
- Implementata validazione chiave CRC32 e aggiunto il supporto per le future chiavi master.
- Corretto il problema del mancato riconoscimento della
master_key_0a
. - Aggiunto CRC32 per
master_key_0a
.
- Corretto il problema del mancato riconoscimento della
- Supporto di Windows 7 per build di Windows.
- Migliorato il ridimensionamento della dimensione del carattere nella GUI.
- Imposta la finestra della GUI di NSZ su TopMost (sempre in primo piano) su Windows in modo che il Drag & Drop diventi molto più conveniente.
- Aggiunta un’impostazione per specificare se la finestra di Kivy deve essere sempre in primo piano o meno.
- XCI/XCZ infine estrae in cartelle contenenti i file NCA/NCZ invece dei dump della partizione HFS0.
- Corretto un grave bug di compatibilità XCI implementando il supporto di compressione/decompressione per i file NCA con la prima sezione con un offset più piccolo o più grande di 0x4000. Questo corregge #49
- Aggiunto il supporto per l’estrazione NSPZ (formato di file legacy nsZip).
- Resa la GUI un’installazione opzionale.
- Corretto il problema #59 con la decompressione ncz non funzionante.
- Importazioni pulite per il pacchetto nsz.
- Ferma la barra per evitare shell rotte.
- Aggiunto pywin32 come dipendenza GUI per Windows. Questo corregge #56
- Corretto
BlockDecompressorReader.seek
conwhence = 2
(ricerca relativa alla fine del file). Questo corregge #64 - L’avvio di
nsz.py
da una diversa directory di lavoro finalmente funziona.- Corretto il problema corrente di Azure Pipeline.
- Aggiunti test di decompressione solida, decompressione a blocchi, compressione solida e compressione a blocchi a
azure-pipelines.yml
. - Reso NSZ nuovo di ritorno con codice di errore 1 se ci sono eccezioni.
- Corretto deadlock in
BlockCompressor.py
. - Velocità di decompressione dei blocchi notevolmente migliorata memorizzando nella cache il blocco corrente.
- Aggiunto progetto Python di Visual Studio 2019.
- Aggiunti titleId e version all’elenco dei file e migliorato notevolmente il suo design.
- Gli elementi SelectableLabel all’interno dell’elenco dei giochi ora ridimensionano correttamente la propria altezza in base alla larghezza disponibile e alla lunghezza del testo del percorso del file. Questo corregge #50
- Aggiunto un font open source di supporto multilingue per #61
- Implementata cartella di input come cartella di output per impostazione predefinita per #61
- In attesa di Invio prima dell’uscita all’avvio tramite GUI in modo che gli errori e l’output della console possano essere visualizzati prima che si chiuda per #74
- Corretto il problema con l’installazione fallita su Kubuntu 20.04 e molte altre distribuzioni Linux moderne migliorando
install_linux.sh
per #75 - Rimosso il codice che manipolava la dimensione dell’intestazione XCI per nessun motivo che corregge il problema #77
- Migliorata la velocità di decompressione del 400% riducendo notevolmente la quantità di chiamate di aggiornamento della barra di stato ad alta intensità di prestazioni.
- La decisione se l’ultimo blocco debba essere decompresso o copiato ora corrisponde alle specifiche del formato del file confrontando la dimensione del blocco decompresso di quel blocco specifico con la sua dimensione compressa. Questo problema è stato causato dalla mancanza del caso limite (improbabile) in cui l’ultimo blocco può essere più grande quando viene compresso senza superare la dimensione generale del blocco. Questo corregge #79
- Migliorate le prestazioni di BlockCompression e l’utilizzo complessivo della CPU riducendo la quantità di chiamate di aggiornamento della barra di stato ad alta intensità di prestazioni.
- Assicurarsi che la riga a destra del cursore sia pulita quando l’applicazione termina.
- Implementate versioni undupe, undupe-dryrun, undupe-prioritylist, undupe-whitelist e undupe-old-version per rimuovere i giochi duplicati.
- Migliorato di molto il messaggio di errore
prod.keys
/keys.txt
mancante non mostrando la traccia dello stack e attendendo un input dell’utente prima di uscire. README.md
altamente migliorato.- Miglioramenti generali della stabilità del sistema per migliorare l’esperienza dell’utente.
Download: NSZ v4.0 [Win64]
Download: Source code NSZ v4.0
Fonte: github.com