From 5ec2c64eda9618e47f2d0d29c7bff29663fcc7c1 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 9 Dec 2021 14:13:54 -0800 Subject: [PATCH] patterns: Added Nintendo Switch PRODINFO pattern --- README.md | 1 + patterns/prodinfo.hexpat | 205 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 patterns/prodinfo.hexpat diff --git a/README.md b/README.md index d61535f..eaaee44 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Hex patterns, include patterns and magic files for the use with the ImHex Hex Ed | AR | `application/x-archive` | `patterns/ar.hexpat` | Static library archive files | | NACP | | `patterns/nacp.hexpat` | Nintendo Switch NACP files | | NRO | | `patterns/nro.hexpat` | Nintendo Switch NRO files | +| PRODINFO | | `patterns/prodinfo.hexpat` | Nintendo Switch PRODINFO | | Java Class | `application/x-java-applet` | `patterns/java_class.hexpat` | Java Class files | | ARM VTOR | | `patterns/arm_cm_vtor.hexpat` | ARM Cortex M Vector Table Layout | | ICO | | `patterns/ico.hexpat` | Icon (.ico) or Cursor (.cur) files | diff --git a/patterns/prodinfo.hexpat b/patterns/prodinfo.hexpat new file mode 100644 index 0000000..356c783 --- /dev/null +++ b/patterns/prodinfo.hexpat @@ -0,0 +1,205 @@ +enum Model : u16 { + NX = 1 +}; + +struct WlanCountryCode { + char code[3]; +} [[static]]; + +struct Cert { + u8 DeviceKey[0x30]; + padding[0x10]; + u8 DeviceCertificate[0x180]; + padding[0x10]; +} [[static]]; + +enum RegionCode : u32 { + JPN = 0, + USA = 1, + EUR = 2, + AUS = 3, + CHN = 4, + KOR = 5, + HKG = 6 +}; + +enum ProductModel : u32 { + Invalid = 0, + NX = 1, + Copper = 2, + Iowa = 3, + Hoag = 4, + Calcio = 5, + Aula = 6 +}; + +struct PRODINFO { + char MagicNumber[4]; + u32 Version; + u32 BodySize; + Model Model; + u16 UpdateCount; + + padding[0x10]; + + u8 BodyHash[0x20]; + char ConfigurationId1[0x1E]; + + padding[0x02]; + padding[0x20]; + + u32 WlanCountryCodesNum; + u32 WlanCountryCodesLastIndex; + WlanCountryCode WlanCountryCodes[WlanCountryCodesNum]; + padding[0x180 - sizeof(WlanCountryCodes)]; + padding[0x08]; + u8 WlanMacAddress[6]; + padding[0x10 - 6]; + u8 BdAddress[6]; + + padding[0x10 - 6]; + + u8 AccelerometerOffset[6]; + padding[2]; + u8 AccelerometerScale[6]; + padding[2]; + u8 GyroscopeOffset[6]; + padding[2]; + u8 GyroscopeScale[6]; + padding[2]; + + char SerialNumber[0x18]; + + padding[8]; + + Cert EccP256Certificate; + Cert EccB233Certificate; + + Cert Ecc256ETicket; + Cert Ecc233ETicket; + + u8 SslKey[0x110]; + padding[0x10]; + u32 SslCertificateSize; + padding[0x0C]; + u8 SslCertificate[0x800]; + u8 SslCertificateHash[0x20]; + + u8 RandomNumber[0x1000]; + u8 RandomNumberHash[0x20]; + + u8 GameCardKey[0x110]; + u8 GameCardCertificate[0x400]; + padding[0x10]; + u8 GameCardCertificateHash[0x20]; + + u8 Rsa2048ETicketKey[0x220]; + padding[0x10]; + u8 Rsa2048ETicketCertificate[0x240]; + + padding[0x10]; + + char BatteryLot[0x18]; + + padding[0x08]; + + u8 SpeakerCalibrationValue[0x800]; + + padding[0x10]; + + RegionCode RegionCode; + + padding[0x0C]; + + u8 AmiiboKey[0x50]; + padding[0x10]; + u8 AmiiboEcqvCertificate[0x14]; + padding[0x0C]; + u8 AmiiboEcdsaCertificate[0x70]; + padding[0x10]; + u8 AmiiboEcqvBlsKey[0x40]; + padding[0x10]; + u8 AmiiboEcqvBlsCertificate[0x20]; + padding[0x10]; + u8 AmiiboEcqvBlsRootCertificate[0x90]; + + padding[0x10]; + + ProductModel ProductModel; + + padding[0x0C]; + + u8 ColorVariation[6]; + + padding[0x0A]; + + u8 LcdBacklightBrightnessMapping[0x0C]; + + padding[0x04]; + + u8 ExtendedEccB233DeviceKey[0x50]; + padding[0x10]; + u8 ExtendedEccP256ETicketKey[0x50]; + padding[0x10]; + u8 ExtendedEccB233ETicketKey[0x50]; + padding[0x10]; + u8 ExtendedRsa2048ETicketKey[0x240]; + padding[0x10]; + u8 ExtendedSslKey[0x130]; + padding[0x10]; + u8 ExtendedGameCardKey[0x130]; + padding[0x10]; + u32 LcdVendorId; + + padding[0x0C]; + + u8 ExtendedRsa2048DeviceKey[0x240]; + padding[0x10]; + u8 Rsa2048DeviceCertificate[0x240]; + + padding[0x10]; + + u8 UsbTypeCPowerSourceCircuitVersion; + + padding[0x0F]; + + u32 HousingSubColor; + padding[0x0C]; + u32 HousingBezelColor; + padding[0x0C]; + u32 HousingMainColor1; + padding[0x0C]; + u32 HousingMainColor2; + padding[0x0C]; + u32 HousingMainColor3; + + padding[0x0C]; + + u8 AnalogStickModuleTypeL; + padding[0x0F]; + u8 AnalogStickModelParameterL[0x12]; + padding[0x0E]; + u8 AnalogStickFactoryCalibrationL[0x09]; + padding[0x07]; + u8 AnalogStickModuleTypeR; + padding[0x0F]; + u8 AnalogStickModelParameterR[0x12]; + padding[0x0E]; + u8 AnalogStickFactoryCalibrationR[0x09]; + + padding[0x07]; + + u8 ConsoleSixAxisSensorModuleType; + padding[0x0F]; + u8 ConsoleSixAxisSensorHorizontalOffset[6]; + padding[0x0A]; + u8 BatteryVersion; + padding[0x0F]; + u8 TouchIcVendorId; + padding[0x0F]; + u32 ColorModel; + padding[0x0C]; + u8 ConsoleSixAxisSensorMountType; +}; + +PRODINFO PRODINFO @ 0x00; \ No newline at end of file