--- stratosphere/loader/source/ldr_patcher.cpp @a672917 +++ stratosphere/loader/source/ldr_patcher.cpp @@ -15,11 +15,22 @@ */ #include #include "ldr_patcher.hpp" +#include "ldr_pcv_patch.hpp" namespace ams::ldr { namespace { + constexpr u8 PcvModuleId[2][20] = { + { 0x91, 0xD6, 0x1D, 0x59, 0xD7, 0x00, 0x23, 0x78, 0xE3, 0x55, 0x84, 0xFC, 0x0B, 0x38, 0xC7, 0x69, 0x3A, 0x3A, 0xBA, 0xB5, }, //11.0.0 + { 0xC5, 0x03, 0xE9, 0x65, 0x50, 0xF3, 0x02, 0xE1, 0x21, 0x87, 0x31, 0x36, 0xB8, 0x14, 0xA5, 0x29, 0x86, 0x3D, 0x94, 0x9B, }, //12.0.0-12.1.0 + }; + + constexpr u8 AmModuleId[2][20] = { + { 0x25, 0x50, 0x97, 0xEF, 0x11, 0xC0, 0x75, 0x9B, 0x1F, 0x36, 0x13, 0x2F, 0x73, 0xBD, 0xDB, 0x04, 0xC3, 0xEF, 0x9A, 0xBE, }, //11.0.0 + { 0x5E, 0x5F, 0x1C, 0xC2, 0x4D, 0x37, 0x45, 0x91, 0xAF, 0xC2, 0xA2, 0x33, 0x6C, 0x94, 0x53, 0xCC, 0xFA, 0x39, 0x61, 0xC1, }, //12.0.0-12.1.0 + }; + constexpr const char *NsoPatchesDirectory = "exefs_patches"; /* Exefs patches want to prevent modification of header, */ @@ -113,6 +124,17 @@ namespace ams::ldr { /* Apply IPS patches. */ void LocateAndApplyIpsPatchesToModule(const u8 *build_id, uintptr_t mapped_nso, size_t mapped_size) { + for(int i = 0; i < 2; i++) + { + if(memcmp(PcvModuleId[i], build_id, sizeof(PcvModuleId[i])) == 0) { + ApplyPcvPatch(reinterpret_cast(mapped_nso), mapped_size, i); + return; // Return here since pcv module loads before sd card can be mounted + } + else if(memcmp(AmModuleId[i], build_id, sizeof(AmModuleId[i])) == 0) { + ApplyCopyrightPatch(reinterpret_cast(mapped_nso), mapped_size, i); + } + } + if (!EnsureSdCardMounted()) { return; }