Pubblicato un nuovo aggiornamento per MakeROM, lo strumento a riga di comando può essere utilizzato per creare file NCCH, CCI e CIA per console Nintendo 3DS.
Il formato nativo che memorizza i binari del codice e gli archivi di dati per la console 3DS è NCCH. I file NCCH sono composti da:
- codice/exheader/plainregion (usato per l’esecuzione del codice) (plainregion elenca solo i componenti aggiuntivi della libreria SDK inclusi).
- icona (testo del titolo dell’app, icona, impostazioni del menu home, vedi qui.
- banner (cbmd + cwav, ovvero il banner/suono dello schermo superiore mostrato nell’homemenu).
- logo (la schermata iniziale visualizzata dopo l’avvio di un’applicazione dal menu principale).
- romfs (filesystem di sola lettura utilizzato per memorizzare le risorse).
Gli usi tipici dei file NCCH includono:
- Immagine eseguibile (codice+exheader+icona+banner+logo+romfs).
- Archivio e-Manual (accessibile da homemenu) (romfs).
- Archivio CIA figlio DLP (accessibile dall’applicazione) (romfs).
- Aggiorna Archivio dati (rom).
- Archivio dati autonomo (roms).
- Archivio indice DLC (icon+romfs).
- Archivio DLC (rom).
Il formato nativo per le immagini delle schede di gioco è invece CCI ed è un formato contenitore NCCH. I file CCI sono limitati a contenere 8 file NCCH e possono contenere file NCCH solo per i titoli delle applicazioni.
Configurazione NCCH per CCI
NCCH | Necessario | Index |
Immagine eseguibile | Si | 0 |
Archivio e-Manual | No | 1 |
Archivio DLP child CIA | No | 2 |
Aggiorna Archivio data | No | 7 |
CIA
Il formato nativo per il confezionamento dei file NCCH per l’installazione è CIA, che è anche un formato contenitore NCCH. I file CIA sono limitati a contenere 65535 file NCCH e possono essere utilizzati per contenere file NCCH per qualsiasi tipo di titolo.
I file CIA contengono anche dati firmati utilizzati dal 3DS per la gestione generale del titolo e DRM. Installare file CIA personalizzati su un 3DS che utilizza anche eShop/SysUpdates non è saggio poiché è probabile che si verifichino conflitti.
Configurazioni NCCH per CIA
Applicazioni (Applicazione/DlpChild/Demo/Patch/Applicazione di sistema):
NCCH | Necessario | Index |
Immagine eseguibile | Si | 0 |
Archivio e-Manual | No | 1 |
Archivio DLP child CIA | No | 2 |
System Applet/Module:
NCCH | Necessario | Index |
Immagine eseguibile | Si | 0 |
Archivi System Data:
NCCH | Necessario | Index |
Data archive | Si | 0 |
DLC:
Il numero di archivi data DLC nel DLC varia per ciascun DLC.
NCCH | Necessario | Index |
DLC index archive | Si | 0 |
DLC data archive | Si | Varia |
Utilizzo Makerom
Riga di comando
makerom [general args] [rsf args] [crypto args] [ncch 0 build args] [cci args] [cia args]
Argomenti generali
Argomento | Valori accettabili | Note |
-f | 'ncch'/'cxi'/'cfa'/'cci'/'cia' | Specifica il formato del file di output. 'nnch'/'cxi'/'cfa' non ha alcun effetto, probabilmente analizzato senza errori per il supporto legacy. |
-o | Percorso file valido. | Specifica nome/percorso per il file di output. Makerom deciderà un nome se questo non è specificato. |
-v | Non richiesto | Abilita output dettagliato. |
Argomenti RSF
Argomento | Valori accettabili | Note |
-rsf | Percorso file valido | Specifica il percorso di Rom Specification File (RSF). Vedi sotto per la creazione di RSF. |
-D | Viene utilizzato per sostituire dove esiste "$( |
Argomenti crittografici
Argomento | Valori accettabili | Note |
-target | 't'/'d'/'p' | Specifica la key-chain. Ciò influisce sulla crittografia, sulla firma e sulla disponibilità del modello "-desc". t =test, adatto per homebrew. d =devkit(incompleto), adatto per devkit. p =retail(inutilizzabile), adatto per la firma di software di vendita al dettaglio? |
-ckeyid | Qualsiasi valore compreso tra 0 e 255 (incluso). | Sostituisce la chiave comune predefinita utilizzata per crittografare le chiavi del titolo CIA. |
-showkeys | Nessuno | Scarica la key-chain caricato su stdout. |
Argomenti NCCH Build
Argomento | Valori accettabili | Note |
-elf | Percorso file valido | Specificare ELF. Vedere sotto per la creazione di ELF. |
-icon | Percorso file valido | Specifica l'icona. |
-banner | Percorso file valido | Specifica banner. |
-desc | | Usa un modello per exheader/accessdesc. Questi sono hardcoded, quindi non tutti i firmware hanno un modello, è possibile utilizzare un valore compreso tra 1 e 7 al posto di "versione kernel minore". Un modello non dovrebbe essere utilizzato se il titolo necessita di autorizzazioni "speciali", l'RSF deve essere completamente configurato. |
-exefslogo | Nessuno | Includi il logo in ExeFS. Necessario per l'utilizzo su sistemi <5.0. |
Argomenti utili per ricostruire un file NCCH:
Argomento | Valori accettabili | Note |
-code | Percorso file valido | Specifica il codice binario decompresso/in chiaro exefs. |
-exheader | Percorso file valido | Specifica il binario di intestazione in testo normale. |
-logo | Percorso file valido | Specifica il logo. |
-plainrgn | Percorso file valido | Specificare la regione normale NCCH. |
-romfs | Percorso file valido | Specificare un binario RomFS non crittografato. |
Argomenti CCI
Argomento | Valori accettabili | Note |
-content | =Percorso file valido. =Qualsiasi valore compreso tra 0-7 (incluso) | Includere un file NCCH creato nel contenitore CCI. "-i" può essere utilizzato al posto di "-content". |
-devcci | Nessuno | Crea una CCI di debug? |
-nomodtid | Nessuno | Non modifica i TitleId dei file NCCH inclusi in modo che corrispondano a NCCH0 |
-alignwr | Nessuno | Allinea l'offset per la regione scrivibile Card2 alla fine dell'ultimo NCCH nel CCI. |
Argomenti CIA
Argomenti | Valori accettabili | Note |
-content | =Percorso file valido. =Qualsiasi valore compreso tra 0x0-0xFFFF (incluso). =Qualsiasi valore compreso tra 0x0-0xFFFFFFFF (incluso) | Includere un file NCCH creato nel contenitore CIA. Se non è specificato, verrà generato in modo casuale. "-i" può essere utilizzato al posto di "-content". |
-major | Qualsiasi valore compreso tra 0-63 (incluso) | Specificare la versione principale per il titolo. Non può essere utilizzato con "-dver". |
-minor | Qualsiasi valore compreso tra 0-63 (incluso) | Specificare la versione minore per il titolo. Non può essere utilizzato con "-dver". |
-micro | Qualsiasi valore compreso tra 0-15 (incluso) | Specificare la versione micro per il titolo. |
-dver | Qualsiasi valore compreso tra 0-4095 (incluso) | Specificare la versione del titolo dati per il titolo. Non può essere utilizzato con "-major" o "-minor". |
-dlc | Nessuno | Specifica questo flag durante la creazione di un DLC CIA. |
-rand | Nessuno | Usa una chiave del titolo casuale per crittografare il contenuto del file CIA. |
Esempi
Esempi generali:
Crea CXI
makerom -o sample.cxi -rsf sample.rsf -target t -elf sample.elf -icon sample.icn -banner sample.bnr -desc app:4
Crea CFA
makerom -o sample.cfa -rsf sample.rsf -target t
Crea CCI
makerom -f cci -o sample.cci -target t -i sample.cxi:0 -i sample.cfa:1
Crea CIA
makerom -f cia -o sample.cia -target t -i sample.cxi:0:0 -i sample.cfa:1:1
Makerom supporta la creazione di un file NCCH e includerlo automaticamente (come index 0) in un contenitore NCCH:
Crea CCI e CXI contemporaneamente e includi un CFA
makerom -f cci -o sample.cci -rsf sample.rsf -target t -elf sample.elf -icon sample.icn -banner sample.bnr -desc app:4 -i sample.cfa:1
Crea CIA e CXI contemporaneamente e includi un CFA
makerom -f cia -o sample.cia -rsf sample.rsf -target t -elf sample.elf -icon sample.icn -banner sample.bnr -desc app:4 -i sample.cfa:1:1
Ricostruzione CXI:
makerom -o rebuild.cxi -rsf rebuild.rsf -target t -code rebuild/code.bin -exheader rebuild/exheader.bin -icon rebuild/icon.bin -banner rebuild/banner.bin -romfs rebuild/romfs.bin
Creazione di file RSF
Ispirato al formato Nintendo per la loro MakeROM, è necessario un file di configurazione yaml per creare file NCCH, è possibile creare CIA/CCI senza utilizzare un file RSF, ma verranno utilizzate le impostazioni predefinite.
Per CXI, i file RSF possono essere utilizzati per specificare le autorizzazioni e le impostazioni di controllo dell’accesso. Makerom può utilizzare le impostazioni predefinite utilizzando l’opzione “-desc”, che rimuove il requisito per specificarle nel file RSF.
Esempio di RSF da utilizzare con “-desc”: download (link interrotto)
Esempio di RSF da utilizzare senza “-desc”: download
Creazione di file ELF
L’ultimo devkitARM utilizzato insieme a ctrulib può creare file ELF compatibili con MakeROM. Anche i file ELF creati utilizzando l’SDK ufficiale sono supportati da MakeROM.
Changelog v0.18.3
- [BuildSystem]
makefile
per makerom e libyaml aggiornato per definire-D_GNU_SOURCE
per build linux.- Questo corregge il problema #122 in cui alcune funzioni sono state definite implicitamente causando segfault su Linux.
Changelog v0.18.2
- [BugFix] Inizializza correttamente prod InitialData KeyX.
- [BugFix] Seleziona correttamente CCI CryptoType quando non specificato manualmente.
Changelog v0.18.1
- [BugFix] Corretto un bug in cui i dati iniziali non venivano generati correttamente (#107).
- [Modifica] Gli errori nella generazione delle firme RSA ora sono un avviso, non un errore.
- [Modifica] MakeROM ora fornirà maggiori informazioni sugli errori irreversibili. Questo dovrebbe aiutare a diagnosticare errori confusi.
- [Modifica] MakeROM avviserà gli utenti se il tipo di crittografia CCI non è supportato dalla destinazione.
Download: MakeROM v0.18.3 [MacOS ARM64]
Download: MakeROM v0.18.3 [MacOS x86_64]
Download: MakeROM v0.18.3 [Ubuntu x86_64]
Download: MakeROM v0.18.3 [Win x86_64]
Download: Source code MakeROM v0.18.3
Fonte: github.com