開発用ボードでもデバッガを繋いでいない場合は、DSカードアプリ起動時にホワイトリスト関係のチェックを行うが、その結果によってアプリ起動を停止しないように変更(UIGの要望対応)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1791 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-07-04 08:35:15 +00:00
parent cbba7f07a2
commit c45fa3c09e

View File

@ -102,7 +102,6 @@ static MbAuthCode s_authcode;
static BOOL s_loadstart = FALSE; static BOOL s_loadstart = FALSE;
static BOOL s_loadPaused = FALSE; static BOOL s_loadPaused = FALSE;
static BOOL s_loadForcibly = FALSE;
static OSMessageQueue s_msgQ; static OSMessageQueue s_msgQ;
static OSMessage s_msgArray[SYSM_TITLE_MESSAGE_ARRAY_MAX]; static OSMessage s_msgArray[SYSM_TITLE_MESSAGE_ARRAY_MAX];
@ -115,8 +114,8 @@ static BOOL s_result_phase1 = FALSE;
static u8 dht_buffer[DS_HASH_TABLE_SIZE] ATTRIBUTE_ALIGN(256); static u8 dht_buffer[DS_HASH_TABLE_SIZE] ATTRIBUTE_ALIGN(256);
static DHTFile *const dht = (DHTFile*)dht_buffer; static DHTFile *const dht = (DHTFile*)dht_buffer;
static const u8* hash0; static const u8* hash0 = NULL;
static const u8* hash1; static const u8* hash1 = NULL;
// const data------------------------------------------------------------------ // const data------------------------------------------------------------------
static const OSBootType s_launcherToOSBootType[ LAUNCHER_BOOTTYPE_MAX ] = { static const OSBootType s_launcherToOSBootType[ LAUNCHER_BOOTTYPE_MAX ] = {
@ -909,8 +908,6 @@ static BOOL SYSMi_AuthenticateHeaderWithSign( TitleProperty *pBootTitle, ROM_Hea
); );
} }
s_b_dev = FALSE;
// アプリ種別とボンディングオプションによって使う鍵を分ける // アプリ種別とボンディングオプションによって使う鍵を分ける
//#define LNC_PDTKEY_DBG //#define LNC_PDTKEY_DBG
#ifdef LNC_PDTKEY_DBG #ifdef LNC_PDTKEY_DBG
@ -1228,20 +1225,18 @@ 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;
// デバッガに接続してるときは適用しない // デバッガに接続してるときは適用しない
if( SYSM_IsRunOnDebugger() ) if( SYSM_IsRunOnDebugger() )
{ {
return TRUE; return TRUE;
} }
#define DEV_WHITELIST_CHECK_SKIP #define DEV_WHITELIST_CHECK_SKIP
#ifdef DEV_WHITELIST_CHECK_SKIP #ifdef DEV_WHITELIST_CHECK_SKIP
// 開発版では完全に飛ばすようにしたい // 開発版ではハッシュチェックスルーフラグを立てる
if( SCFG_GetBondingOption() != 0 ) if( SCFG_GetBondingOption() != 0 )
{ {
s_loadForcibly = TRUE; s_b_dev = TRUE;
return TRUE;
} }
#endif #endif
@ -1262,8 +1257,11 @@ static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_H
if(!dht) if(!dht)
{ {
OS_TPrintf(" Search DHT : database init Failed.\n"); OS_TPrintf(" Search DHT : database init Failed.\n");
UTL_SetFatalError(FATAL_ERROR_WHITELIST_INITDB_FAILED); if(!s_b_dev)
ret = FALSE; {
UTL_SetFatalError(FATAL_ERROR_WHITELIST_INITDB_FAILED);
ret = FALSE;
}
}else }else
{ {
OS_TPrintf("Searching DHT for %.4s(%02X)...", head->s.game_code, head->s.rom_version); OS_TPrintf("Searching DHT for %.4s(%02X)...", head->s.game_code, head->s.rom_version);
@ -1271,8 +1269,11 @@ static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_H
if ( !db ) if ( !db )
{ {
OS_TPrintf(" Search DHT : Failed.\n"); OS_TPrintf(" Search DHT : Failed.\n");
UTL_SetFatalError(FATAL_ERROR_WHITELIST_NOTFOUND); if(!s_b_dev)
ret = FALSE; {
UTL_SetFatalError(FATAL_ERROR_WHITELIST_NOTFOUND);
ret = FALSE;
}
}else }else
{ {
hash0 = db->hash[0]; hash0 = db->hash[0];
@ -1281,32 +1282,6 @@ static BOOL SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle, ROM_H
} }
} }
} }
#ifndef DEV_WHITELIST_CHECK_SKIP
// ボンディングオプションが0のときは以下の特殊処理をせずにリターン
if( SCFG_GetBondingOption() == 0 )
{
return ret;
}
// データロード前認証に失敗した場合にボタン押しで強制ロードするようにする
// 失敗時にメインスレッドにメッセージを送り、ボタン押し待ち
// 押されたらメインスレッドからこちらのスレッドにメッセージを送る
// メッセージ内容次第でロードを続行するか、エラーを返して中止するか選択
// 続行する場合は強制実行フラグを立てる
if( ret != TRUE )
{
BOOL forcing;
OS_InitMessageQueue(&s_msgQ, s_msgArray, SYSM_TITLE_MESSAGE_ARRAY_MAX);
s_loadPaused = TRUE;
OS_ReceiveMessage(&s_msgQ, (OSMessage*)&forcing, OS_MESSAGE_BLOCK);
if(forcing)
{
ret = TRUE;
s_loadForcibly = TRUE;
}
}
#endif
return ret; return ret;
} }
@ -1317,19 +1292,13 @@ static BOOL SYSMi_AuthenticateNTRCardTitle( TitleProperty *pBootTitle)
#pragma unused(pBootTitle) #pragma unused(pBootTitle)
DHTPhase2Work* p2work; DHTPhase2Work* p2work;
ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF; ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF;
// デバッガに接続してるときは適用しない // デバッガに接続してるときは適用しない
if( SYSM_IsRunOnDebugger() ) if( SYSM_IsRunOnDebugger() )
{ {
return TRUE; return TRUE;
} }
// ロード前認証で強制実行フラグを立てていれば、飛ばす
if( s_loadForcibly )
{
return TRUE;
}
// phase1最終検証 // phase1最終検証
if(s_calc_hash) if(s_calc_hash)
{ {
@ -1357,7 +1326,7 @@ static BOOL SYSMi_AuthenticateNTRCardTitle( TitleProperty *pBootTitle)
// DHTチェックphase2 // DHTチェックphase2
OS_TPrintf("DHT Phase2..."); OS_TPrintf("DHT Phase2...");
p2work = SYSM_Alloc( sizeof(DHTPhase2Work) ); p2work = SYSM_Alloc( sizeof(DHTPhase2Work) );
if ( !DHT_CheckHashPhase2(hash1, hs, p2work, WrapperFunc_ReadCardData, NULL) ) if ( !hash1 || !DHT_CheckHashPhase2(hash1, hs, p2work, WrapperFunc_ReadCardData, NULL) )
{ {
OS_TPrintf(" DHT Phase2 : Failed.\n"); OS_TPrintf(" DHT Phase2 : Failed.\n");
SYSM_Free(p2work); SYSM_Free(p2work);