summaryrefslogtreecommitdiff
path: root/src/core/loader/ncch.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2015-10-20 10:17:31 -0400
committerGravatar bunnei2015-10-20 10:17:31 -0400
commitc717d1551da213c9ad2a80dcf198ebe5a1345627 (patch)
treef89e6c7f0b19a370a69710c0e3327fb337f643cc /src/core/loader/ncch.cpp
parentMerge pull request #1194 from linkmauve/no-newline (diff)
parentLoader: Change NCCH header types to be explicitly little-endian (diff)
downloadyuzu-c717d1551da213c9ad2a80dcf198ebe5a1345627.tar.gz
yuzu-c717d1551da213c9ad2a80dcf198ebe5a1345627.tar.xz
yuzu-c717d1551da213c9ad2a80dcf198ebe5a1345627.zip
Merge pull request #1199 from Gareth422/encryption-check
Loader: Implement NCCH encryption check
Diffstat (limited to 'src/core/loader/ncch.cpp')
-rw-r--r--src/core/loader/ncch.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index 094d74100..68b3f546e 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -128,9 +128,8 @@ ResultStatus AppLoader_NCCH::LoadExec() {
128 if (ResultStatus::Success == ReadCode(code)) { 128 if (ResultStatus::Success == ReadCode(code)) {
129 std::string process_name = Common::StringFromFixedZeroTerminatedBuffer( 129 std::string process_name = Common::StringFromFixedZeroTerminatedBuffer(
130 (const char*)exheader_header.codeset_info.name, 8); 130 (const char*)exheader_header.codeset_info.name, 8);
131 u64 program_id = *reinterpret_cast<u64_le const*>(&ncch_header.program_id[0]);
132 131
133 SharedPtr<CodeSet> codeset = CodeSet::Create(process_name, program_id); 132 SharedPtr<CodeSet> codeset = CodeSet::Create(process_name, ncch_header.program_id);
134 133
135 codeset->code.offset = 0; 134 codeset->code.offset = 0;
136 codeset->code.addr = exheader_header.codeset_info.text.address; 135 codeset->code.addr = exheader_header.codeset_info.text.address;
@@ -266,6 +265,11 @@ ResultStatus AppLoader_NCCH::Load() {
266 LOG_DEBUG(Loader, "Thread priority: 0x%X" , priority); 265 LOG_DEBUG(Loader, "Thread priority: 0x%X" , priority);
267 LOG_DEBUG(Loader, "Resource limit category: %d" , resource_limit_category); 266 LOG_DEBUG(Loader, "Resource limit category: %d" , resource_limit_category);
268 267
268 if (exheader_header.arm11_system_local_caps.program_id != ncch_header.program_id) {
269 LOG_ERROR(Loader, "ExHeader Program ID mismatch: the ROM is probably encrypted.");
270 return ResultStatus::ErrorEncrypted;
271 }
272
269 // Read ExeFS... 273 // Read ExeFS...
270 274
271 exefs_offset = ncch_header.exefs_offset * kBlockSize; 275 exefs_offset = ncch_header.exefs_offset * kBlockSize;