mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
DSダウンロードアプリ署名検証時に、FSのキャッシュ関係不具合で失敗するのをバッファのアライメント調整で回避。
HWInfoの強制ロゴデモスキップ起動フラグを見て強制ロゴデモスキップ発動するよう変更。 これにともない、強制ロゴデモスキップフラグフラグをSDKの branch-5_0rcplus_UIG_plus rev.10247 に追加。これ以降のものでないとビルド通りません。 また、強制ロゴデモスキップ起動フラグの設定をnandinitializer.iniで指定できるように変更。 これにともない、関連する関数を使っているツール類のソース変更。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2769 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
6fc7987341
commit
42eee63f27
@ -438,7 +438,8 @@ static TitleProperty *SYSMi_CheckShortcutBoot1( void )
|
||||
// 量産工程用ショートカットキー or
|
||||
// 検査カード起動
|
||||
//-----------------------------------------------------
|
||||
if( SYSM_IsInspectCard() ||
|
||||
if( LCFG_THW_IsForceLogoDemoSkip() ||
|
||||
SYSM_IsInspectCard() ||
|
||||
( ( PAD_Read() == SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) &&
|
||||
( !LCFG_TSD_IsFinishedBrokenTWLSettings() || !LCFG_TSD_IsFinishedInitialSetting() || !LCFG_TSD_IsFinishedInitialSetting_Launcher() ) )
|
||||
){
|
||||
|
||||
@ -105,7 +105,9 @@ static OSThread s_thread;
|
||||
static OSThread s_auth_thread;
|
||||
static TWLBannerFile s_card_bannerBuf;
|
||||
|
||||
static MbAuthCode s_authcode;
|
||||
static u8 s_authcode[MATH_ROUNDUP32(sizeof(MbAuthCode))] ATTRIBUTE_ALIGN(32);
|
||||
static MbAuthCode *sp_authcode = (MbAuthCode *)s_authcode;
|
||||
static MbAuthCode bup_num;
|
||||
|
||||
static BOOL s_loadstart = FALSE;
|
||||
|
||||
@ -820,10 +822,10 @@ OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
|
||||
UTL_SetFatalError(FATAL_ERROR_LOAD_SEEKFILE_FAILED);
|
||||
goto ERROR;
|
||||
}
|
||||
readLen = FS_ReadFile(file, &s_authcode, (s32)sizeof(s_authcode));
|
||||
if( readLen != (s32)sizeof(s_authcode) )
|
||||
readLen = FS_ReadFile(file, sp_authcode, (s32)sizeof(MbAuthCode));
|
||||
if( readLen != (s32)sizeof(MbAuthCode) )
|
||||
{
|
||||
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode, 0, sizeof(s_authcode), readLen);
|
||||
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", sp_authcode, 0, sizeof(MbAuthCode), readLen);
|
||||
UTL_SetFatalError(FATAL_ERROR_LOAD_READDLSIGN_FAILED);
|
||||
goto ERROR;
|
||||
}
|
||||
@ -1457,7 +1459,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
||||
u8 final_hash[SVC_SHA1_DIGEST_SIZE];
|
||||
|
||||
// NTRダウンロードアプリ署名のマジックコードチェック
|
||||
if( s_authcode.magic_code[0] != 'a' || s_authcode.magic_code[1] != 'c' ) {
|
||||
if( sp_authcode->magic_code[0] != 'a' || sp_authcode->magic_code[1] != 'c' ) {
|
||||
OS_TPrintf("Authenticate failed: Invalid AuthCode.\n");
|
||||
UTL_SetFatalError(FATAL_ERROR_DL_MAGICCODE_CHECK_FAILED);
|
||||
return FALSE;
|
||||
@ -1466,18 +1468,18 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
||||
// NTRダウンロードアプリ署名(DERフォーマット)の計算、ハッシュの取得。
|
||||
MI_CpuClear8( buf, 0x80 );
|
||||
SVC_InitSignHeap( &con, (void *)SIGN_HEAP_ADDR, SIGN_HEAP_SIZE );// ヒープの初期化
|
||||
if( !SVC_DecryptSignDER( &con, buf, s_authcode.sign, nitro_dl_sign_key ))
|
||||
if( !SVC_DecryptSignDER( &con, buf, sp_authcode->sign, nitro_dl_sign_key ))
|
||||
{
|
||||
OS_TPrintf("Authenticate failed: Sign decryption failed.\n");
|
||||
UTL_SetFatalError(FATAL_ERROR_DL_SIGN_DECRYPTION_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
// それぞれheader,ARM9FLX,ARM7FLXについてハッシュを計算して、それら3つを並べたものに対してまたハッシュをとる
|
||||
if(s_calc_hash)
|
||||
{
|
||||
// シリアルナンバー付加
|
||||
*(u32 *)(&(s_calc_hash[SVC_SHA1_DIGEST_SIZE * 3])) = s_authcode.serial_number;
|
||||
*(u32 *)(&(s_calc_hash[SVC_SHA1_DIGEST_SIZE * 3])) = sp_authcode->serial_number;
|
||||
// 最終ハッシュ計算
|
||||
SVC_CalcSHA1( final_hash, s_calc_hash, SVC_SHA1_DIGEST_SIZE * 3 + sizeof(u32));
|
||||
}else
|
||||
@ -1486,7 +1488,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
||||
UTL_SetFatalError(FATAL_ERROR_DL_HASH_CALC_FAILED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
// 計算した最終ハッシュと、署名から得たハッシュとを比較
|
||||
if(!SVC_CompareSHA1((const void *)buf, (const void *)final_hash))
|
||||
{
|
||||
@ -1499,7 +1501,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
||||
}
|
||||
}
|
||||
OS_TPrintf("Authenticate : total %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) );
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -204,7 +204,7 @@ static void WriteHWInfoFile( u8 region, BOOL isDisableWireless )
|
||||
// -------------------------------------
|
||||
(void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureWriting );
|
||||
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, isDisableWireless ) ) {
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, isDisableWireless, FALSE ) ) {
|
||||
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
|
||||
}else {
|
||||
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
|
||||
|
||||
@ -417,7 +417,7 @@ BOOL HWI_WriteHWNormalInfoFile( void )
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless )
|
||||
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless, BOOL logoDemoSkipForce )
|
||||
{
|
||||
BOOL isWrite = TRUE;
|
||||
LCFGReadResult result;
|
||||
@ -435,6 +435,7 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
|
||||
}
|
||||
|
||||
LCFG_THW_SetFlagForceDisableWireless( isDisableWireless );
|
||||
LCFG_THW_SetFlagForceLogoDemoSkip( logoDemoSkipForce );
|
||||
|
||||
// 旧リージョンを保存
|
||||
old_region = OS_GetRegion();
|
||||
|
||||
@ -39,7 +39,7 @@ HwiInitResult;
|
||||
HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) );
|
||||
BOOL HWI_ModifyLanguage( u8 region );
|
||||
BOOL HWI_WriteHWNormalInfoFile( void );
|
||||
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless );
|
||||
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless, BOOL logoDemoSkipForce );
|
||||
BOOL HWI_WriteHWIDSignFile( void );
|
||||
BOOL HWI_DeleteHWNormalInfoFile( void );
|
||||
BOOL HWI_DeleteHWSecureInfoFile( void );
|
||||
|
||||
@ -52,7 +52,7 @@ void* HWInfoProcess4(void);
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff );
|
||||
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff, BOOL logoDemoSkipForce );
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
@ -71,6 +71,7 @@ enum {
|
||||
|
||||
static s8 sMenuSelectNo;
|
||||
static BOOL sWirelessForceOff;
|
||||
static BOOL sLogoDemoSkipForce;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
内部関数宣言
|
||||
@ -79,7 +80,7 @@ static BOOL sWirelessForceOff;
|
||||
static BOOL WriteHWNormalInfoFile( void );
|
||||
static BOOL WriteHWSecureInfoFile( u8 region );
|
||||
//static BOOL DeleteHWInfoFile( void );
|
||||
static BOOL GetNandInitializerSetting(u8* region, u8* wireless);
|
||||
static BOOL GetNandInitializerSetting(u8* region, u8* wireless, u8* logodemoskip);
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
プロセス関数定義
|
||||
@ -210,11 +211,12 @@ void* HWInfoProcess2(void)
|
||||
if (gAutoFlag)
|
||||
{
|
||||
// SDカードのnandinitializer.iniより設定を取得
|
||||
if (!GetNandInitializerSetting((u8 *)&sMenuSelectNo, (u8 *)&sWirelessForceOff))
|
||||
if (!GetNandInitializerSetting((u8 *)&sMenuSelectNo, (u8 *)&sWirelessForceOff, (u8 *)&sLogoDemoSkipForce))
|
||||
{
|
||||
// 設定の取得に失敗した場合はデフォルト設定(REGION_JAPAN/WIRELESS_ENABLE)
|
||||
sMenuSelectNo = 0;
|
||||
sWirelessForceOff = FALSE;
|
||||
sLogoDemoSkipForce = FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -232,7 +234,7 @@ void* HWInfoProcess2(void)
|
||||
case MENU_REGION_CHINA:
|
||||
case MENU_REGION_KOREA:
|
||||
|
||||
result = WriteHWInfoFile( (u8)sMenuSelectNo, sWirelessForceOff );
|
||||
result = WriteHWInfoFile( (u8)sMenuSelectNo, sWirelessForceOff, sLogoDemoSkipForce );
|
||||
|
||||
// 全リージョンの結果をクリア
|
||||
for (i=0;i<NUM_OF_MENU_SELECT;i++)
|
||||
@ -290,7 +292,7 @@ void* HWInfoProcess2(void)
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
|
||||
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff, BOOL logoDemoSkipForce )
|
||||
{
|
||||
static const char *pMsgSecureWriting = "Writing Secure File...";
|
||||
static const char *pMsgNormalWriting = "Writing Normal File...";
|
||||
@ -313,7 +315,7 @@ BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
|
||||
// セキュアファイルのライト
|
||||
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSecureWriting );
|
||||
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) {
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff, logoDemoSkipForce ) ) {
|
||||
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
|
||||
}else {
|
||||
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );
|
||||
@ -392,7 +394,7 @@ static BOOL DeleteHWInfoFile( void )
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL GetNandInitializerSetting(u8* region, u8* wireless)
|
||||
static BOOL GetNandInitializerSetting(u8* region, u8* wireless, u8* logodemoskip)
|
||||
{
|
||||
FSFile file;
|
||||
BOOL open_is_ok;
|
||||
@ -401,6 +403,7 @@ static BOOL GetNandInitializerSetting(u8* region, u8* wireless)
|
||||
char* pStr;
|
||||
u8 temp_region;
|
||||
u8 temp_wireless;
|
||||
u8 temp_logodemoskip;
|
||||
u32 file_size;
|
||||
u32 alloc_size;
|
||||
|
||||
@ -430,6 +433,24 @@ static BOOL GetNandInitializerSetting(u8* region, u8* wireless)
|
||||
|
||||
// ROMファイルクローズ
|
||||
FS_CloseFile(&file);
|
||||
|
||||
// 強制ロゴデモスキップ設定を読み取る
|
||||
pStr = STD_SearchString( pTempBuf, "LOGO_DEMO_SKIP_FORCE:");
|
||||
if (pStr != NULL)
|
||||
{
|
||||
|
||||
pStr += STD_GetStringLength("LOGO_DEMO_SKIP_FORCE:");
|
||||
temp_logodemoskip = (u8)(*pStr - '0');
|
||||
|
||||
if ( temp_logodemoskip == 1 )
|
||||
{
|
||||
*logodemoskip = temp_logodemoskip;
|
||||
}
|
||||
else
|
||||
{
|
||||
*logodemoskip = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// REGION: を読み取る
|
||||
pStr = STD_SearchString( pTempBuf, "REGION:");
|
||||
|
||||
@ -175,7 +175,7 @@ void* WirelessSettingProcess2(void)
|
||||
switch( sMenuSelectNo )
|
||||
{
|
||||
case MENU_WIRELESS_ENABLE:
|
||||
result = WriteHWInfoFile( OS_GetRegion(), FALSE );
|
||||
result = WriteHWInfoFile( OS_GetRegion(), FALSE, FALSE );
|
||||
if ( result == TRUE )
|
||||
{
|
||||
kamiFontPrintf(26, (s16)(MENU_TOP_LINE+MENU_WIRELESS_ENABLE*CHAR_OF_MENU_SPACE), FONT_COLOR_GREEN, "OK ");
|
||||
@ -189,7 +189,7 @@ void* WirelessSettingProcess2(void)
|
||||
break;
|
||||
|
||||
case MENU_WIRELESS_FORCE_OFF:
|
||||
result = WriteHWInfoFile( OS_GetRegion(), TRUE );
|
||||
result = WriteHWInfoFile( OS_GetRegion(), TRUE, FALSE );
|
||||
if ( result == TRUE )
|
||||
{
|
||||
kamiFontPrintf(26, (s16)(MENU_TOP_LINE+MENU_WIRELESS_ENABLE*CHAR_OF_MENU_SPACE), FONT_COLOR_GREEN, " ");
|
||||
|
||||
@ -70,7 +70,7 @@ BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
|
||||
BOOL result = TRUE;
|
||||
|
||||
// セキュアファイルのライト
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) { // とりあえず無線は有効で。
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff, FALSE ) ) { // とりあえず無線は有効で。
|
||||
// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
|
||||
}else {
|
||||
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );
|
||||
|
||||
@ -70,7 +70,7 @@ BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
|
||||
BOOL result = TRUE;
|
||||
|
||||
// セキュアファイルのライト
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) { // とりあえず無線は有効で。
|
||||
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff, FALSE ) ) { // とりあえず無線は有効で。
|
||||
// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
|
||||
}else {
|
||||
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user