This commit is contained in:
parent
119b615797
commit
14479963d5
6 changed files with 45 additions and 45 deletions
|
@ -47,7 +47,7 @@ public class Converter {
|
||||||
return ByteBuffer.wrap(holder).order(ByteOrder.LITTLE_ENDIAN).getLong();
|
return ByteBuffer.wrap(holder).order(ByteOrder.LITTLE_ENDIAN).getLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String byteArrToHexString(byte[] bArr){
|
public static String byteArrToHexStringAsLE(byte[] bArr){
|
||||||
if (bArr == null)
|
if (bArr == null)
|
||||||
return "";
|
return "";
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
|
@ -33,7 +33,7 @@ import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import static libKonogonka.Converter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexStringAsLE;
|
||||||
import static libKonogonka.Converter.getLElong;
|
import static libKonogonka.Converter.getLElong;
|
||||||
|
|
||||||
// TODO: check file size
|
// TODO: check file size
|
||||||
|
@ -253,7 +253,7 @@ public class NCAProvider {
|
||||||
if (Arrays.equals(rightsId, new byte[0x10])) // If empty Rights ID
|
if (Arrays.equals(rightsId, new byte[0x10])) // If empty Rights ID
|
||||||
return decryptedKey2; // NOTE: Just remember this dumb hack
|
return decryptedKey2; // NOTE: Just remember this dumb hack
|
||||||
|
|
||||||
byte[] rightsIdKey = hexStrToByteArray(keys.get(byteArrToHexString(rightsId))); // throws NullPointerException
|
byte[] rightsIdKey = hexStrToByteArray(keys.get(byteArrToHexStringAsLE(rightsId))); // throws NullPointerException
|
||||||
|
|
||||||
SecretKeySpec skSpec = new SecretKeySpec(
|
SecretKeySpec skSpec = new SecretKeySpec(
|
||||||
hexStrToByteArray(keys.get(String.format("titlekek_%02x", cryptoTypeReal))
|
hexStrToByteArray(keys.get(String.format("titlekek_%02x", cryptoTypeReal))
|
||||||
|
@ -264,7 +264,7 @@ public class NCAProvider {
|
||||||
}
|
}
|
||||||
catch (Exception e){
|
catch (Exception e){
|
||||||
throw new Exception("No title.keys loaded for '"+
|
throw new Exception("No title.keys loaded for '"+
|
||||||
String.format("titlekek_%02x", cryptoTypeReal)+"' or '"+byteArrToHexString(rightsId)+"'? ("+e+")", e);
|
String.format("titlekek_%02x", cryptoTypeReal)+"' or '"+ byteArrToHexStringAsLE(rightsId)+"'? ("+e+")", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void setupNcaContentByNumber(int number, byte[] key){
|
private void setupNcaContentByNumber(int number, byte[] key){
|
||||||
|
@ -371,7 +371,7 @@ public class NCAProvider {
|
||||||
if (Arrays.equals(rightsId, new byte[0x10]))
|
if (Arrays.equals(rightsId, new byte[0x10]))
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
return keys.containsKey(byteArrToHexString(rightsId));
|
return keys.containsKey(byteArrToHexStringAsLE(rightsId));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Get content for the selected section
|
* Get content for the selected section
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import static libKonogonka.Converter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexStringAsLE;
|
||||||
import static libKonogonka.Converter.getLElong;
|
import static libKonogonka.Converter.getLElong;
|
||||||
|
|
||||||
public class NcaFsHeader {
|
public class NcaFsHeader {
|
||||||
|
@ -178,12 +178,12 @@ public class NcaFsHeader {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug("NCASectionBlock:\n" +
|
log.debug("NCASectionBlock:\n" +
|
||||||
"Version : " + byteArrToHexString(version) + "\n" +
|
"Version : " + byteArrToHexStringAsLE(version) + "\n" +
|
||||||
"FS Type : " + fsType +(fsType == 0?" (RomFS)":fsType == 1?" (PartitionFS)":" (Unknown)")+ "\n" +
|
"FS Type : " + fsType +(fsType == 0?" (RomFS)":fsType == 1?" (PartitionFS)":" (Unknown)")+ "\n" +
|
||||||
"Hash Type : " + hashType +" ("+ hashTypeDescription + ")\n" +
|
"Hash Type : " + hashType +" ("+ hashTypeDescription + ")\n" +
|
||||||
"Crypto Type : " + cryptoType + " (" + cryptoTypeDescription + ")\n" +
|
"Crypto Type : " + cryptoType + " (" + cryptoTypeDescription + ")\n" +
|
||||||
"Meta Data Hash Type : " + metaDataHashType + "\n" +
|
"Meta Data Hash Type : " + metaDataHashType + "\n" +
|
||||||
"Padding : " + byteArrToHexString(padding) + "\n" +
|
"Padding : " + byteArrToHexStringAsLE(padding) + "\n" +
|
||||||
"Super Block IVFC : " + (superBlockIVFC == null ? "-\n": "YES\n") +
|
"Super Block IVFC : " + (superBlockIVFC == null ? "-\n": "YES\n") +
|
||||||
"Super Block PFS0 : " + (superBlockPFS0 == null ? "-\n": "YES\n") +
|
"Super Block PFS0 : " + (superBlockPFS0 == null ? "-\n": "YES\n") +
|
||||||
"================================================================================================\n" +
|
"================================================================================================\n" +
|
||||||
|
@ -197,47 +197,47 @@ public class NcaFsHeader {
|
||||||
"| Level 1 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl1Offset()) + "\n" +
|
"| Level 1 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl1Offset()) + "\n" +
|
||||||
"| Level 1 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl1Size()) + "\n" +
|
"| Level 1 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl1Size()) + "\n" +
|
||||||
"| Level 1 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl1SBlockSize()) + "\n" +
|
"| Level 1 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl1SBlockSize()) + "\n" +
|
||||||
"| Level 1 reserved : " + byteArrToHexString(superBlockIVFC.getReserved1()) + "\n\n" +
|
"| Level 1 reserved : " + byteArrToHexStringAsLE(superBlockIVFC.getReserved1()) + "\n\n" +
|
||||||
|
|
||||||
"| Level 2 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl2Offset()) + "\n" +
|
"| Level 2 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl2Offset()) + "\n" +
|
||||||
"| Level 2 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl2Size()) + "\n" +
|
"| Level 2 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl2Size()) + "\n" +
|
||||||
"| Level 2 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl2SBlockSize()) + "\n" +
|
"| Level 2 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl2SBlockSize()) + "\n" +
|
||||||
"| Level 2 reserved : " + byteArrToHexString(superBlockIVFC.getReserved2()) + "\n\n" +
|
"| Level 2 reserved : " + byteArrToHexStringAsLE(superBlockIVFC.getReserved2()) + "\n\n" +
|
||||||
|
|
||||||
"| Level 3 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl3Offset()) + "\n" +
|
"| Level 3 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl3Offset()) + "\n" +
|
||||||
"| Level 3 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl3Size()) + "\n" +
|
"| Level 3 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl3Size()) + "\n" +
|
||||||
"| Level 3 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl3SBlockSize()) + "\n" +
|
"| Level 3 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl3SBlockSize()) + "\n" +
|
||||||
"| Level 3 reserved : " + byteArrToHexString(superBlockIVFC.getReserved3()) + "\n\n" +
|
"| Level 3 reserved : " + byteArrToHexStringAsLE(superBlockIVFC.getReserved3()) + "\n\n" +
|
||||||
|
|
||||||
"| Level 4 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl4Offset()) + "\n" +
|
"| Level 4 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl4Offset()) + "\n" +
|
||||||
"| Level 4 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl4Size()) + "\n" +
|
"| Level 4 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl4Size()) + "\n" +
|
||||||
"| Level 4 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl4SBlockSize()) + "\n" +
|
"| Level 4 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl4SBlockSize()) + "\n" +
|
||||||
"| Level 4 reserved : " + byteArrToHexString(superBlockIVFC.getReserved4()) + "\n\n" +
|
"| Level 4 reserved : " + byteArrToHexStringAsLE(superBlockIVFC.getReserved4()) + "\n\n" +
|
||||||
|
|
||||||
"| Level 5 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl5Offset()) + "\n" +
|
"| Level 5 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl5Offset()) + "\n" +
|
||||||
"| Level 5 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl5Size()) + "\n" +
|
"| Level 5 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl5Size()) + "\n" +
|
||||||
"| Level 5 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl5SBlockSize()) + "\n" +
|
"| Level 5 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl5SBlockSize()) + "\n" +
|
||||||
"| Level 5 reserved : " + byteArrToHexString(superBlockIVFC.getReserved5()) + "\n\n" +
|
"| Level 5 reserved : " + byteArrToHexStringAsLE(superBlockIVFC.getReserved5()) + "\n\n" +
|
||||||
|
|
||||||
"| Level 6 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl6Offset()) + "\n" +
|
"| Level 6 Offset : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl6Offset()) + "\n" +
|
||||||
"| Level 6 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl6Size()) + "\n" +
|
"| Level 6 Size : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl6Size()) + "\n" +
|
||||||
"| Level 6 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl6SBlockSize()) + "\n" +
|
"| Level 6 Block Size (log2) : " + RainbowDump.formatDecHexString(superBlockIVFC.getLvl6SBlockSize()) + "\n" +
|
||||||
"| Level 6 reserved : " + byteArrToHexString(superBlockIVFC.getReserved6()) + "\n\n" +
|
"| Level 6 reserved : " + byteArrToHexStringAsLE(superBlockIVFC.getReserved6()) + "\n\n" +
|
||||||
|
|
||||||
"| SignatureSalt : " + byteArrToHexString(superBlockIVFC.getSignatureSalt()) + "\n" +
|
"| SignatureSalt : " + byteArrToHexStringAsLE(superBlockIVFC.getSignatureSalt()) + "\n" +
|
||||||
"| Master Hash : " + byteArrToHexString(superBlockIVFC.getMasterHash()) + "\n" +
|
"| Master Hash : " + byteArrToHexStringAsLE(superBlockIVFC.getMasterHash()) + "\n" +
|
||||||
"| Reserved (tail) : " + byteArrToHexString(superBlockIVFC.getReservedTail()) + "\n"
|
"| Reserved (tail) : " + byteArrToHexStringAsLE(superBlockIVFC.getReservedTail()) + "\n"
|
||||||
)
|
)
|
||||||
:(((fsType == 0x1) && (hashType == 0x2))?
|
:(((fsType == 0x1) && (hashType == 0x2))?
|
||||||
("| Hash Data - PFS0\n" +
|
("| Hash Data - PFS0\n" +
|
||||||
"| SHA256 hash : " + byteArrToHexString(superBlockPFS0.getSHA256hash()) + "\n" +
|
"| SHA256 hash : " + byteArrToHexStringAsLE(superBlockPFS0.getSHA256hash()) + "\n" +
|
||||||
"| Block Size (bytes) : " + superBlockPFS0.getBlockSize() + "\n" +
|
"| Block Size (bytes) : " + superBlockPFS0.getBlockSize() + "\n" +
|
||||||
"| Layer Count (2) : " + superBlockPFS0.getLayerCount() + "\n" +
|
"| Layer Count (2) : " + superBlockPFS0.getLayerCount() + "\n" +
|
||||||
"| Hash table offset : " + RainbowDump.formatDecHexString(superBlockPFS0.getHashTableOffset()) + "\n" +
|
"| Hash table offset : " + RainbowDump.formatDecHexString(superBlockPFS0.getHashTableOffset()) + "\n" +
|
||||||
"| Hash table size : " + RainbowDump.formatDecHexString(superBlockPFS0.getHashTableSize()) + "\n" +
|
"| Hash table size : " + RainbowDump.formatDecHexString(superBlockPFS0.getHashTableSize()) + "\n" +
|
||||||
"| PFS0 header offset : " + RainbowDump.formatDecHexString(superBlockPFS0.getPfs0offset()) + "\n" +
|
"| PFS0 header offset : " + RainbowDump.formatDecHexString(superBlockPFS0.getPfs0offset()) + "\n" +
|
||||||
"| PFS0 header size : " + RainbowDump.formatDecHexString(superBlockPFS0.getPfs0size()) + "\n" +
|
"| PFS0 header size : " + RainbowDump.formatDecHexString(superBlockPFS0.getPfs0size()) + "\n" +
|
||||||
"| Unknown (reserved) : " + byteArrToHexString(superBlockPFS0.getZeroes()) + "\n"
|
"| Unknown (reserved) : " + byteArrToHexStringAsLE(superBlockPFS0.getZeroes()) + "\n"
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
" // Hash Data - EMPTY \\\\ \n"
|
" // Hash Data - EMPTY \\\\ \n"
|
||||||
|
@ -250,17 +250,17 @@ public class NcaFsHeader {
|
||||||
"Magic ('BKTR') : " + BktrSection1.getMagic() + "\n" +
|
"Magic ('BKTR') : " + BktrSection1.getMagic() + "\n" +
|
||||||
"Version : " + BktrSection1.getVersion() + "\n" +
|
"Version : " + BktrSection1.getVersion() + "\n" +
|
||||||
"EntryCount : " + BktrSection1.getEntryCount() + "\n" +
|
"EntryCount : " + BktrSection1.getEntryCount() + "\n" +
|
||||||
"Unknown (reserved) : " + byteArrToHexString(BktrSection1.getUnknown()) + "\n" +
|
"Unknown (reserved) : " + byteArrToHexStringAsLE(BktrSection1.getUnknown()) + "\n" +
|
||||||
"------------------------------------------------------------------------------------------------\n" +
|
"------------------------------------------------------------------------------------------------\n" +
|
||||||
"AesCtrEx Offset : " + PatchInfoOffsetSection2 + "\n" +
|
"AesCtrEx Offset : " + PatchInfoOffsetSection2 + "\n" +
|
||||||
"AesCtrEx Size : " + PatchInfoSizeSection2 + "\n" +
|
"AesCtrEx Size : " + PatchInfoSizeSection2 + "\n" +
|
||||||
"Magic ('BKTR') : " + BktrSection2.getMagic() + "\n" +
|
"Magic ('BKTR') : " + BktrSection2.getMagic() + "\n" +
|
||||||
"Version : " + BktrSection2.getVersion() + "\n" +
|
"Version : " + BktrSection2.getVersion() + "\n" +
|
||||||
"EntryCount : " + BktrSection2.getEntryCount() + "\n" +
|
"EntryCount : " + BktrSection2.getEntryCount() + "\n" +
|
||||||
"Unknown (reserved) : " + byteArrToHexString(BktrSection2.getUnknown()) + "\n" +
|
"Unknown (reserved) : " + byteArrToHexStringAsLE(BktrSection2.getUnknown()) + "\n" +
|
||||||
"================================================================================================\n" +
|
"================================================================================================\n" +
|
||||||
"Generation : " + byteArrToHexString(generation) + "\n" +
|
"Generation : " + byteArrToHexStringAsLE(generation) + "\n" +
|
||||||
"Section CTR : " + byteArrToHexString(sectionCTR) + "\n" +
|
"Section CTR : " + byteArrToHexStringAsLE(sectionCTR) + "\n" +
|
||||||
"================================================================================================\n" +
|
"================================================================================================\n" +
|
||||||
" Sparse Info\n" +
|
" Sparse Info\n" +
|
||||||
"Table Offset : " + sparseInfo.getOffset() + "\n" +
|
"Table Offset : " + sparseInfo.getOffset() + "\n" +
|
||||||
|
@ -268,10 +268,10 @@ public class NcaFsHeader {
|
||||||
"Magic ('BKTR') : " + sparseInfo.getBktrMagic() + "\n" +
|
"Magic ('BKTR') : " + sparseInfo.getBktrMagic() + "\n" +
|
||||||
"Version : " + sparseInfo.getBktrVersion() + "\n" +
|
"Version : " + sparseInfo.getBktrVersion() + "\n" +
|
||||||
"EntryCount : " + sparseInfo.getBktrEntryCount() + "\n" +
|
"EntryCount : " + sparseInfo.getBktrEntryCount() + "\n" +
|
||||||
"Unknown (BKTR) : " + byteArrToHexString(sparseInfo.getBktrUnknown()) + "\n" +
|
"Unknown (BKTR) : " + byteArrToHexStringAsLE(sparseInfo.getBktrUnknown()) + "\n" +
|
||||||
"PhysicalOffset : " + sparseInfo.getPhysicalOffset() + "\n" +
|
"PhysicalOffset : " + sparseInfo.getPhysicalOffset() + "\n" +
|
||||||
"Generation : " + byteArrToHexString(sparseInfo.getGeneration()) + "\n" +
|
"Generation : " + byteArrToHexStringAsLE(sparseInfo.getGeneration()) + "\n" +
|
||||||
"Unknown (reserved) : " + byteArrToHexString(sparseInfo.getUnknown()) + "\n" +
|
"Unknown (reserved) : " + byteArrToHexStringAsLE(sparseInfo.getUnknown()) + "\n" +
|
||||||
"================================================================================================\n" +
|
"================================================================================================\n" +
|
||||||
" Compression Info\n" +
|
" Compression Info\n" +
|
||||||
"Table Offset : " + compressionInfo.getOffset() + "\n" +
|
"Table Offset : " + compressionInfo.getOffset() + "\n" +
|
||||||
|
@ -279,15 +279,15 @@ public class NcaFsHeader {
|
||||||
"Magic ('BKTR') : " + compressionInfo.getBktrMagic() + "\n" +
|
"Magic ('BKTR') : " + compressionInfo.getBktrMagic() + "\n" +
|
||||||
"Version : " + compressionInfo.getBktrVersion() + "\n" +
|
"Version : " + compressionInfo.getBktrVersion() + "\n" +
|
||||||
"EntryCount : " + compressionInfo.getBktrEntryCount() + "\n" +
|
"EntryCount : " + compressionInfo.getBktrEntryCount() + "\n" +
|
||||||
"Unknown (reserved) : " + byteArrToHexString(compressionInfo.getBktrUnknown()) + "\n" +
|
"Unknown (reserved) : " + byteArrToHexStringAsLE(compressionInfo.getBktrUnknown()) + "\n" +
|
||||||
"Reserved : " + byteArrToHexString(compressionInfo.getUnknown()) + "\n" +
|
"Reserved : " + byteArrToHexStringAsLE(compressionInfo.getUnknown()) + "\n" +
|
||||||
"================================================================================================\n" +
|
"================================================================================================\n" +
|
||||||
" Meta Data Hash Data Info\n" +
|
" Meta Data Hash Data Info\n" +
|
||||||
"Table Offset : " + metaDataHashDataInfo.getOffset() + "\n" +
|
"Table Offset : " + metaDataHashDataInfo.getOffset() + "\n" +
|
||||||
"Table Size : " + metaDataHashDataInfo.getSize() + "\n" +
|
"Table Size : " + metaDataHashDataInfo.getSize() + "\n" +
|
||||||
"Unknown (reserved) : " + byteArrToHexString(metaDataHashDataInfo.getTableHash()) + "\n" +
|
"Unknown (reserved) : " + byteArrToHexStringAsLE(metaDataHashDataInfo.getTableHash()) + "\n" +
|
||||||
"================================================================================================\n" +
|
"================================================================================================\n" +
|
||||||
"Unknown End Padding : " + byteArrToHexString(unknownEndPadding) + "\n" +
|
"Unknown End Padding : " + byteArrToHexStringAsLE(unknownEndPadding) + "\n" +
|
||||||
"################################################################################################\n"
|
"################################################################################################\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,7 @@ public class NSO0Header {
|
||||||
" ============================================================= \n" +
|
" ============================================================= \n" +
|
||||||
"Magic \"NSO0\" " + magic + "\n" +
|
"Magic \"NSO0\" " + magic + "\n" +
|
||||||
"Version (always 0) " + version + "\n" +
|
"Version (always 0) " + version + "\n" +
|
||||||
"Reserved " + Converter.byteArrToHexString(upperReserved) + "\n" +
|
"Reserved " + Converter.byteArrToHexStringAsLE(upperReserved) + "\n" +
|
||||||
"Flags " + Converter.intToBinaryString(flags) + "\n" +
|
"Flags " + Converter.intToBinaryString(flags) + "\n" +
|
||||||
" |- 0. .text Compress " + isTextCompressFlag() + "\n" +
|
" |- 0. .text Compress " + isTextCompressFlag() + "\n" +
|
||||||
" |- 1. .rodata Compress " + isRoCompressFlag() + "\n" +
|
" |- 1. .rodata Compress " + isRoCompressFlag() + "\n" +
|
||||||
|
@ -147,11 +147,11 @@ public class NSO0Header {
|
||||||
" |- Memory Offset - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(dataSegmentHeader.getMemoryOffset()) + "\n" +
|
" |- Memory Offset - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(dataSegmentHeader.getMemoryOffset()) + "\n" +
|
||||||
" |- Size As Decompressed - - - - - - - - - " + RainbowDump.formatDecHexString(dataSegmentHeader.getSizeAsDecompressed()) + "\n" +
|
" |- Size As Decompressed - - - - - - - - - " + RainbowDump.formatDecHexString(dataSegmentHeader.getSizeAsDecompressed()) + "\n" +
|
||||||
" .bss Size " + RainbowDump.formatDecHexString(bssSize) + "\n" + // Block Started by Symbol
|
" .bss Size " + RainbowDump.formatDecHexString(bssSize) + "\n" + // Block Started by Symbol
|
||||||
"Module ID (aka Build ID) " + Converter.byteArrToHexString(moduleId) + "\n" +
|
"Module ID (aka Build ID) " + Converter.byteArrToHexStringAsLE(moduleId) + "\n" +
|
||||||
" .text Size (compressed) " + RainbowDump.formatDecHexString(textCompressedSize) + "\n" +
|
" .text Size (compressed) " + RainbowDump.formatDecHexString(textCompressedSize) + "\n" +
|
||||||
" .rodata Size (compressed) " + RainbowDump.formatDecHexString(rodataCompressedSize) + "\n" +
|
" .rodata Size (compressed) " + RainbowDump.formatDecHexString(rodataCompressedSize) + "\n" +
|
||||||
" .data Size (compressed) " + RainbowDump.formatDecHexString(dataCompressedSize) + "\n" +
|
" .data Size (compressed) " + RainbowDump.formatDecHexString(dataCompressedSize) + "\n" +
|
||||||
"Reserved " + Converter.byteArrToHexString(bottomReserved) + "\n" +
|
"Reserved " + Converter.byteArrToHexStringAsLE(bottomReserved) + "\n" +
|
||||||
" xxx\n"+
|
" xxx\n"+
|
||||||
"SegmentHeaderRelative for .api_info\n" +
|
"SegmentHeaderRelative for .api_info\n" +
|
||||||
" |- Offset - - - - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(_api_infoRelative.getOffset()) + "\n" +
|
" |- Offset - - - - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(_api_infoRelative.getOffset()) + "\n" +
|
||||||
|
@ -165,9 +165,9 @@ public class NSO0Header {
|
||||||
" |- Offset - - - - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(_dynsymRelative.getOffset()) + "\n" +
|
" |- Offset - - - - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(_dynsymRelative.getOffset()) + "\n" +
|
||||||
" |- Size - - - - - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(_dynsymRelative.getSize()) + "\n" +
|
" |- Size - - - - - - - - - - - - - - - - - " + RainbowDump.formatDecHexString(_dynsymRelative.getSize()) + "\n" +
|
||||||
" xxx\n"+
|
" xxx\n"+
|
||||||
".text decompressed' SHA-256 hash " + Converter.byteArrToHexString(textHash) + "\n" +
|
".text decompressed' SHA-256 hash " + Converter.byteArrToHexStringAsLE(textHash) + "\n" +
|
||||||
".rodata decompressed' SHA-256 hash " + Converter.byteArrToHexString(rodataHash) + "\n" +
|
".rodata decompressed' SHA-256 hash " + Converter.byteArrToHexStringAsLE(rodataHash) + "\n" +
|
||||||
".data decompressed' SHA-256 hash " + Converter.byteArrToHexString(dataHash) + "\n" +
|
".data decompressed' SHA-256 hash " + Converter.byteArrToHexStringAsLE(dataHash) + "\n" +
|
||||||
" ============================================================= "
|
" ============================================================= "
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,13 +111,13 @@ public class PFS0Header {
|
||||||
"Magic " + magic + "\n" +
|
"Magic " + magic + "\n" +
|
||||||
"Files count " + RainbowDump.formatDecHexString(filesCount) + "\n" +
|
"Files count " + RainbowDump.formatDecHexString(filesCount) + "\n" +
|
||||||
"String Table Size " + RainbowDump.formatDecHexString(stringTableSize) + "\n" +
|
"String Table Size " + RainbowDump.formatDecHexString(stringTableSize) + "\n" +
|
||||||
"Padding " + Converter.byteArrToHexString(padding) + "\n\n"
|
"Padding " + Converter.byteArrToHexStringAsLE(padding) + "\n\n"
|
||||||
);
|
);
|
||||||
for (PFS0subFile subFile : pfs0subFiles){
|
for (PFS0subFile subFile : pfs0subFiles){
|
||||||
log.debug("\nName: " + subFile.getName() + "\n" +
|
log.debug("\nName: " + subFile.getName() + "\n" +
|
||||||
"Offset " + RainbowDump.formatDecHexString(subFile.getOffset()) + "\n" +
|
"Offset " + RainbowDump.formatDecHexString(subFile.getOffset()) + "\n" +
|
||||||
"Size " + RainbowDump.formatDecHexString(subFile.getSize()) + "\n" +
|
"Size " + RainbowDump.formatDecHexString(subFile.getSize()) + "\n" +
|
||||||
"Zeroes " + Converter.byteArrToHexString(subFile.getZeroes()) + "\n" +
|
"Zeroes " + Converter.byteArrToHexStringAsLE(subFile.getZeroes()) + "\n" +
|
||||||
"----------------------------------------------------------------"
|
"----------------------------------------------------------------"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,14 +63,14 @@ public class XCIGamecardCert {
|
||||||
|
|
||||||
public void printDebug(){
|
public void printDebug(){
|
||||||
log.debug("== XCIGamecardCert ==\n" +
|
log.debug("== XCIGamecardCert ==\n" +
|
||||||
"rsa2048PKCS1sig " + Converter.byteArrToHexString(rsa2048PKCS1sig) + "\n" +
|
"rsa2048PKCS1sig " + Converter.byteArrToHexStringAsLE(rsa2048PKCS1sig) + "\n" +
|
||||||
"magicCert " + Converter.byteArrToHexString(magicCert) + "\n" +
|
"magicCert " + Converter.byteArrToHexStringAsLE(magicCert) + "\n" +
|
||||||
"unknown1 " + Converter.byteArrToHexString(unknown1) + "\n" +
|
"unknown1 " + Converter.byteArrToHexStringAsLE(unknown1) + "\n" +
|
||||||
"kekIndex " + kekIndex + "\n" +
|
"kekIndex " + kekIndex + "\n" +
|
||||||
"unknown2 " + Converter.byteArrToHexString(unknown2) + "\n" +
|
"unknown2 " + Converter.byteArrToHexStringAsLE(unknown2) + "\n" +
|
||||||
"deviceID " + Converter.byteArrToHexString(deviceID) + "\n" +
|
"deviceID " + Converter.byteArrToHexStringAsLE(deviceID) + "\n" +
|
||||||
"unknown3 " + Converter.byteArrToHexString(unknown3) + "\n" +
|
"unknown3 " + Converter.byteArrToHexStringAsLE(unknown3) + "\n" +
|
||||||
"encryptedData " + Converter.byteArrToHexString(encryptedData) + "\n"
|
"encryptedData " + Converter.byteArrToHexStringAsLE(encryptedData) + "\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue