Line 17:
Line 17:
== Encryption ==
== Encryption ==
−
−
The icon database is encrypted with AES-128-CBC. There's a two byte header:
−
−
byte 0: always zero.
−
byte 1: aes key index
−
−
followed by encrypted data.
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.
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 OSv12 (000500101000400A), the keys are located at $.rodata+0x4c of nn_idbe.rpl.
+
In OSv10 (000500101000400A), the keys are located at $.rodata+0x4c of nn_idbe.rpl.
−
Here are the keys: (no copyright issue as OSv12 is a free title Kappa)
+
Here are the keys:
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
Line 134:
Line 127:
'''Note 2:'''
'''Note 2:'''
−
Each of the 16 0x200-length groups has 3 UTF-16 text blocks. There is always 3 blocks, even if the string does not take up the entire (or any of the) block. Some games have plain-text strings starting here, where others have empty null bytes or seemingly garbage text (sometimes a mix of all 3).
+
Each of the 16 0x200-length groups has 3 UTF-16-BE text blocks. There is always 3 blocks, even if the string does not take up the entire (or any of the) block. Each group is for a different language/region. The first group is for Japanese, the order of the other languages is unknown.
'''Examples:'''
'''Examples:'''