Package2: Difference between revisions
 what the fuck  | 
				|||
| (17 intermediate revisions by 6 users not shown) | |||
| Line 40: | Line 40: | ||
| 0x0  | | 0x0  | ||
| 0x10  | | 0x10  | ||
| Header's CTR  | | Header's CTR, official code copies the pre-decryption CTR over the decrypted result. Also used as metadata.  | ||
|-  | |-  | ||
| 0x10  | | 0x10  | ||
| Line 129: | Line 129: | ||
Each section follows each other immediately and is encrypted with the same key used for encrypting the header.  | Each section follows each other immediately and is encrypted with the same key used for encrypting the header.  | ||
The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.  | The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.  | ||
Before being decrypted, the encrypted header's CTR additionally encodes metadata used to validate package2's contents as follows:  | |||
* Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0  | |||
* Metadata version field = ((ctr_word1 ^ (ctr_word1 >> 16)) & 0xFF) ^ (ctr_word1 >> 24)  | |||
In [4.0.0], the metadata version field must be less or equal to 4.  | |||
== Section 0 ==  | == Section 0 ==  | ||
| Line 135: | Line 141: | ||
== Section 1 ==  | == Section 1 ==  | ||
When decrypted, this section contains the built-in system modules encapsulated in a custom format.  | When decrypted, this section contains the built-in system modules encapsulated in a custom format.  | ||
Note: On firmware [[8.0.0]] INI1 is contained within the Kernel and section 1 is empty with NULL SHA256 to match.  | |||
=== INI1 ===  | === INI1 ===  | ||
| Line 153: | Line 161: | ||
| 0x8  | | 0x8  | ||
| u32  | | u32  | ||
| NumberProcesses  | | NumberProcesses (Must be <0x51)  | ||
|-  | |-  | ||
| 0xC  | | 0xC  | ||
| Line 161: | Line 169: | ||
==== KIP1 ====  | ==== KIP1 ====  | ||
Kernel   | Kernel Initial Process.  | ||
{| class="wikitable" border="1"  | {| class="wikitable" border="1"  | ||
| Line 199: | Line 207: | ||
| 0x1F  | | 0x1F  | ||
| u8  | | u8  | ||
| Flags: bit0-2: compression-enable for each section, when set. Bit3: Is64Bit. Bit4: IsAddrSpace36Bit. Bit5: [2.0.0+]   | | Flags: bit0-2: compression-enable for each section, when set. Bit3: Is64Bit. Bit4: IsAddrSpace36Bit. Bit5: [2.0.0+] UseSystemPoolPartition (1: System, 0: Application). Bit6, Bit7: reserved (unused)  | ||
|-  | |-  | ||
| 0x20  | | 0x20  | ||
| Line 277: | Line 285: | ||
| 0x7  | | 0x7  | ||
| 0x0508  | | 0x0508  | ||
|-  | |||
| [[5.0.0]]  | |||
| 0x7  | |||
| 0x8  | |||
| 0x0609  | |||
|-  | |||
| [[6.0.0]]  | |||
| 0x8  | |||
| 0x9  | |||
| 0x070A  | |||
|-  | |||
| [[6.2.0]]  | |||
| 0x9  | |||
| 0xA  | |||
| 0x080B  | |||
|-  | |||
| [[7.0.0]]  | |||
| 0xA  | |||
| 0xB  | |||
| 0x090C  | |||
|-  | |||
| [[8.1.0]]  | |||
| 0xB  | |||
| 0xC  | |||
| 0x0A0D  | |||
|-  | |||
| [[9.0.0]]  | |||
| 0xC  | |||
| 0xD  | |||
| 0x0B0E  | |||
|-  | |||
| [[9.1.0]]  | |||
| 0xD  | |||
| 0xE  | |||
| 0x0C0F  | |||
|}  | |}  | ||