mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
AESデクリプト処理のタイミングを変更(署名チェック直後)
デクリプト範囲判定の厳密化 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1088 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
2c5239e87d
commit
4e63f543f8
@ -702,6 +702,10 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
|
|||||||
OS_TPrintf("Authenticate : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
OS_TPrintf("Authenticate : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TWL以降のアプリはモジュールの特定領域がAES暗号化されているので、ハッシュチェック前にデクリプトする必要がある。
|
||||||
|
// ヘッダのデータを使うので、署名チェック後が望ましい。よってこのタイミング。
|
||||||
|
SYSM_StartDecryptAESRegion( &(head->s) );
|
||||||
|
|
||||||
// それぞれARM9,7のFLXおよびLTDについてハッシュを計算してヘッダに格納されているハッシュと比較
|
// それぞれARM9,7のFLXおよびLTDについてハッシュを計算してヘッダに格納されているハッシュと比較
|
||||||
module_addr[ARM9_STATIC] = head->s.main_ram_address;
|
module_addr[ARM9_STATIC] = head->s.main_ram_address;
|
||||||
module_addr[ARM7_STATIC] = head->s.sub_ram_address;
|
module_addr[ARM7_STATIC] = head->s.sub_ram_address;
|
||||||
@ -887,10 +891,6 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle)
|
|||||||
if( hs->platform_code & PLATFORM_CODE_FLAG_TWL )
|
if( hs->platform_code & PLATFORM_CODE_FLAG_TWL )
|
||||||
{
|
{
|
||||||
// TWLアプリ
|
// TWLアプリ
|
||||||
|
|
||||||
// TWLアプリの場合はAES暗号化されている部分をデクリプトする
|
|
||||||
SYSM_StartDecryptAESRegion( hs );
|
|
||||||
|
|
||||||
// 認証処理
|
// 認証処理
|
||||||
switch( pBootTitle->flags.bootType )
|
switch( pBootTitle->flags.bootType )
|
||||||
{
|
{
|
||||||
|
|||||||
@ -85,8 +85,9 @@ void SYSM_StartDecryptAESRegion( ROM_Header_Short *hs )
|
|||||||
}
|
}
|
||||||
for( l=0; l<4; l++ )
|
for( l=0; l<4; l++ )
|
||||||
{
|
{
|
||||||
|
// モジュール配置先の領域(サイズは32バイト単位に補正)に、復号指定領域が含まれているか?
|
||||||
if( module_offset[l] <= region_offset[m] &&
|
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]) );
|
region_addr[m] = (void *)( (u32)module_addr[l] + (region_offset[m] - module_offset[l]) );
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user