mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
NTRカード起動時、タイトルプロパティのタイトルIDと、カードから読み込んだヘッダのゲームコードから作成できる擬似タイトルIDが食い違っていたらFATAL発生するよう変更
カード起動時、最後にstateのchangeを検出してから、タイトルロード開始までの一瞬の間にカード抜き差しが発生した場合、FATAL発生するよう変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2406 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
b60f59a9f7
commit
787f9472f9
@ -857,4 +857,6 @@ static char *s_strError[ FATAL_ERROR_MAX ] = {
|
|||||||
"FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE",
|
"FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE",
|
||||||
"FATAL_ERROR_LOAD_AUTH_HEADER_FAILED",
|
"FATAL_ERROR_LOAD_AUTH_HEADER_FAILED",
|
||||||
"FATAL_ERROR_LOAD_NEVER_STARTED",
|
"FATAL_ERROR_LOAD_NEVER_STARTED",
|
||||||
|
"FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START",
|
||||||
|
"FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR",
|
||||||
};
|
};
|
||||||
@ -984,6 +984,14 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
|||||||
OS_TPrintf("SYSM_StartLoadTitle failed: This App has Data_Only flag.\n");
|
OS_TPrintf("SYSM_StartLoadTitle failed: This App has Data_Only flag.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 最後、カード抜き挿しが発生してからSYSM_GetCardTitleListが呼ばれていない状態
|
||||||
|
// (画面表示やリストに変更が通知されていない)だったらFATAL
|
||||||
|
// ただし、カード起動のときのみ
|
||||||
|
if( SYSMi_GetWork()->flags.hotsw.isCardStateChanged && pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM )
|
||||||
|
{
|
||||||
|
UTL_SetFatalError(FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START);
|
||||||
|
}
|
||||||
|
|
||||||
s_loadstart = TRUE;
|
s_loadstart = TRUE;
|
||||||
s_loadTimes++; // ロード回数のチェック用、二回目以降は非対応の実装なので
|
s_loadTimes++; // ロード回数のチェック用、二回目以降は非対応の実装なので
|
||||||
@ -1382,6 +1390,7 @@ void SYSM_ResumeLoadingThread( BOOL force )
|
|||||||
static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_Header *head )
|
static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_Header *head )
|
||||||
{
|
{
|
||||||
BOOL ret = TRUE;
|
BOOL ret = TRUE;
|
||||||
|
OSTitleId ntr_fake_titleID;
|
||||||
|
|
||||||
#ifdef DEV_WHITELIST_CHECK_SKIP
|
#ifdef DEV_WHITELIST_CHECK_SKIP
|
||||||
// 開発版ではハッシュチェックスルーフラグを立てる
|
// 開発版ではハッシュチェックスルーフラグを立てる
|
||||||
@ -1390,6 +1399,24 @@ static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_H
|
|||||||
s_b_dev = TRUE;
|
s_b_dev = TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// pBootTitle->titleIDとROMヘッダのゲームコードの一致確認をする。
|
||||||
|
ntr_fake_titleID = (u64)( ( head->s.game_code[ 3 ] << 0 ) |
|
||||||
|
( head->s.game_code[ 2 ] << 8 ) |
|
||||||
|
( head->s.game_code[ 1 ] << 16 ) |
|
||||||
|
( head->s.game_code[ 0 ] << 24 ) );
|
||||||
|
if( pBootTitle->titleID != ntr_fake_titleID )
|
||||||
|
{
|
||||||
|
// ヘッダから作成した擬似titleIDが起動指定されたタイトルに格納されている擬似IDと違う
|
||||||
|
OS_TPrintf( "SYSMi_AuthenticateNTRCardAppHeader failed: header TitleID error\n" );
|
||||||
|
OS_TPrintf( "SYSMi_AuthenticateNTRCardAppHeader failed: selectedTitleID=%.16llx\n", pBootTitle->titleID );
|
||||||
|
OS_TPrintf( "SYSMi_AuthenticateNTRCardAppHeader failed: headerTitleID=%.16llx\n", ntr_fake_titleID );
|
||||||
|
UTL_SetFatalError(FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR);
|
||||||
|
return FALSE;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
OS_TPrintf( "Authenticate_Header : header TitleID check succeed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
if( head->s.exFlags.enable_nitro_whitelist_signature )
|
if( head->s.exFlags.enable_nitro_whitelist_signature )
|
||||||
{
|
{
|
||||||
|
|||||||
@ -121,7 +121,9 @@ static const char *fatal_error_msg[FATAL_ERROR_MAX] =
|
|||||||
"DHT_PHASE1_CALC_FAILED",
|
"DHT_PHASE1_CALC_FAILED",
|
||||||
"LOAD_UNKNOWN_BOOTTYPE",
|
"LOAD_UNKNOWN_BOOTTYPE",
|
||||||
"LOAD_AUTH_HEADER_FAILED",
|
"LOAD_AUTH_HEADER_FAILED",
|
||||||
"LOAD_NEVER_STARTED"
|
"LOAD_NEVER_STARTED",
|
||||||
|
"EJECT_CARD_AFTER_LOAD_START",
|
||||||
|
"TITLEID_COMPARE_FAILED_NTR"
|
||||||
};
|
};
|
||||||
|
|
||||||
//#define DEBUG_LAUNCHER_DUMP
|
//#define DEBUG_LAUNCHER_DUMP
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#define BUFSIZE 256
|
#define BUFSIZE 256
|
||||||
|
|
||||||
#define FATAL_ERROR_MAX 49
|
#define FATAL_ERROR_MAX 51
|
||||||
#define NUM_ENTRY_PER_PAGE 5
|
#define NUM_ENTRY_PER_PAGE 5
|
||||||
#define NUM_LINE_PER_ENTRY 4
|
#define NUM_LINE_PER_ENTRY 4
|
||||||
#define SKIP_SPAN 5
|
#define SKIP_SPAN 5
|
||||||
@ -637,5 +637,7 @@ static char *s_strError[ FATAL_ERROR_MAX ] = {
|
|||||||
"DHT_PHASE1_CALC_FAILED",
|
"DHT_PHASE1_CALC_FAILED",
|
||||||
"LOAD_UNKNOWN_BOOTTYPE",
|
"LOAD_UNKNOWN_BOOTTYPE",
|
||||||
"LOAD_AUTH_HEADER_FAILED",
|
"LOAD_AUTH_HEADER_FAILED",
|
||||||
"LOAD_NEVER_STARTED"
|
"LOAD_NEVER_STARTED",
|
||||||
|
"EJECT_CARD_AFTER_LOAD_START",
|
||||||
|
"TITLEID_COMPARE_FAILED_NTR"
|
||||||
};
|
};
|
||||||
|
|||||||
@ -78,8 +78,10 @@ typedef enum FatalErrorCode {
|
|||||||
FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE = 46,
|
FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE = 46,
|
||||||
FATAL_ERROR_LOAD_AUTH_HEADER_FAILED = 47,
|
FATAL_ERROR_LOAD_AUTH_HEADER_FAILED = 47,
|
||||||
FATAL_ERROR_LOAD_NEVER_STARTED = 48,
|
FATAL_ERROR_LOAD_NEVER_STARTED = 48,
|
||||||
|
FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START = 49,
|
||||||
|
FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR = 50,
|
||||||
|
|
||||||
FATAL_ERROR_MAX = 49
|
FATAL_ERROR_MAX = 51
|
||||||
}FatalErrorCode;
|
}FatalErrorCode;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user