diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index b3db6b78..66e87f85 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -822,6 +822,9 @@ static void GenVA_VB_VD(void) MATHRandContext32 rnd; // 乱数を初期化 VBlankカウンタ値を種とする。 + // [TODO] プログラムがV周期に同期しているためVカウンタでは固定値になりやすい + // (特にダイレクトブート)。 + // 起動する度に変化するパラメータと組み合わせるべき。 MATH_InitRand32(&rnd, (u64)OS_GetVBlankCount()); s_cbData.vae = MATH_Rand32(&rnd, 0); diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index ab5335bc..dd73cf97 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -773,6 +773,18 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle ) } } OS_TPrintf("Authenticate : total %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) ); + + // 製品or開発実機ではNANDアプリはNAND、カードアプリはカードからのみブート許可 + if ( ! SYSM_IsRunOnDebugger() ) + { + if ( ( (pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_NAND || + pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_TEMP) && !(head->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ) || + (pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM && (head->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ) ) + { + return AUTH_RESULT_AUTHENTICATE_FAILED; + } + } + return AUTH_RESULT_SUCCEEDED; }