diff --git a/Core/ELF/PrxDecrypter.cpp b/Core/ELF/PrxDecrypter.cpp index 1dc445b9fc..7e7451f171 100644 --- a/Core/ELF/PrxDecrypter.cpp +++ b/Core/ELF/PrxDecrypter.cpp @@ -320,6 +320,11 @@ static const u8 keys_9DC14891_3[] = {0x11, 0x0D, 0x1A, 0x4C, 0x8A, 0x19, 0x17, 0 // screen. Names are _. // 3.0x and 3.5x predate the per-model split and have a single flash0:/vsh/etc/index.dat. static const u8 keys_9DC14891_31x[] = {0x27, 0xE1, 0x31, 0xF5, 0xF7, 0x9B, 0xE7, 0x88, 0xD6, 0x8D, 0x7C, 0x0D, 0x99, 0x73, 0xA1, 0x8F}; +static const u8 keys_9DC14891_28x[] = {0xC3, 0x1A, 0x78, 0xC5, 0xF5, 0xBE, 0xC6, 0x92, 0xF9, 0xEF, 0x94, 0xEA, 0x51, 0xE5, 0x57, 0x11}; +// 2.6x and 2.7x tag their index.dat 0x495BE403 rather than with the 0x0B2Bxxx0 the rest of this +// family uses. The scramble code makes no difference to this file - every value tried decrypts it +// to the same plaintext - so it keeps the 0x5C the neighbouring entries have. +static const u8 keys_9DC14891_26x[] = {0xE4, 0x98, 0x8E, 0x93, 0x5B, 0x94, 0xAF, 0x19, 0xEA, 0x30, 0x6C, 0xEA, 0x6F, 0x1F, 0x11, 0x59}; static const u8 keys_9DC14891_30x[] = {0x96, 0x86, 0xDD, 0x78, 0x87, 0xA7, 0x2B, 0xD9, 0xDD, 0xC6, 0x6C, 0x4F, 0x89, 0xFB, 0xD4, 0xD7}; static const u8 keys_9DC14891_35x[] = {0x6B, 0x3F, 0x91, 0x58, 0xED, 0x40, 0x68, 0x54, 0x93, 0xD6, 0x45, 0x3F, 0x2C, 0xD4, 0x23, 0x43}; static const u8 keys_9DC14891_50x_01g[] = {0xF8, 0x15, 0xCC, 0x79, 0x10, 0x89, 0x16, 0xD6, 0x25, 0x11, 0x00, 0xEB, 0x6B, 0xB1, 0x13, 0xE2}; @@ -388,6 +393,8 @@ static const TAG_INFO2 g_tagInfo2[] = { 0x0B2B90F0, keys_9DC14891_1, 0x5C }, { 0x0B2B91F0, keys_9DC14891_2, 0x5C }, { 0x0B2B92F0, keys_9DC14891_3, 0x5C }, + { 0x495BE403, keys_9DC14891_26x, 0x5C }, + { 0x0B2B05F0, keys_9DC14891_28x, 0x5C }, { 0x0B2B06F0, keys_9DC14891_30x, 0x5C }, { 0x0B2B08F0, keys_9DC14891_31x, 0x5C }, { 0x0B2B0AF0, keys_9DC14891_35x, 0x5C },