Line 18:
Line 18:
== Encryption ==
== Encryption ==
−
The icon database is encrypted with AES128 CBC. There's a two byte header:
+
The icon database is encrypted with AES-128-CBC. There's a two byte header:
−
0: (unknown, usually zero?)
+
byte 0: always zero.
−
1: key index
+
byte 1: aes key index
followed by encrypted data.
followed by encrypted data.
−
nn_idbe contains hardcoded keys in one 0x50 sized block, consisting of the 16-byte hardcoded IV, and 4 hardcoded 16-byte AES128 keys.
+
nn_idbe contains hardcoded keys in one 0x50 sized block (0x10 * 5), consisting of the 16-byte hardcoded IV, and 4 hardcoded 16-byte AES-128 keys.
−
In version 11464 of OSv11 (000500101000400A), the keys are located at $DATA+0x4c of nn_idbe.rpl.
+
In OSv12 (000500101000400A), the keys are located at $.rodata+0x4c of nn_idbe.rpl.
+
+
IV = "A46987AE47D82BB4FA8ABC0450285FA4"
+
+
K0 = "4AB9A40E146975A84BB1B4F3ECEFC47B"
+
K1 = "90A0BB1E0E864AE87D13A6A03D28C9B8"
+
K2 = "FFBB57C14E98EC6975B384FCF40786B5"
+
K3 = "80923799B41F36A6A75FB8B48C95F66F"
+
+
AES_KEYS = [K0, K1, K2, K3]
== Decrypted icon format ==
== Decrypted icon format ==