diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 877427b5..73feb88e 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -701,6 +701,10 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle ) { OS_TPrintf("Authenticate : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev)); } + + // TWL以降のアプリはモジュールの特定領域がAES暗号化されているので、ハッシュチェック前にデクリプトする必要がある。 + // ヘッダのデータを使うので、署名チェック後が望ましい。よってこのタイミング。 + SYSM_StartDecryptAESRegion( &(head->s) ); // それぞれARM9,7のFLXおよびLTDについてハッシュを計算してヘッダに格納されているハッシュと比較 module_addr[ARM9_STATIC] = head->s.main_ram_address; @@ -887,10 +891,6 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle) if( hs->platform_code & PLATFORM_CODE_FLAG_TWL ) { // TWLアプリ - - // TWLアプリの場合はAES暗号化されている部分をデクリプトする - SYSM_StartDecryptAESRegion( hs ); - // 認証処理 switch( pBootTitle->flags.bootType ) { diff --git a/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c b/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c index fda02e23..1f7dd484 100644 --- a/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c +++ b/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c @@ -85,8 +85,9 @@ void SYSM_StartDecryptAESRegion( ROM_Header_Short *hs ) } for( l=0; l<4; l++ ) { + // モジュール配置先の領域(サイズは32バイト単位に補正)に、復号指定領域が含まれているか? if( module_offset[l] <= region_offset[m] && - region_offset[m] < module_offset[l] + module_size[l] ) + region_offset[m] + region_size[m] <= module_offset[l] + MATH_ROUNDUP( module_size[l], SYSM_ALIGNMENT_LOAD_MODULE ) ) { region_addr[m] = (void *)( (u32)module_addr[l] + (region_offset[m] - module_offset[l]) ); break;