mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ROMヘッダ偽装:NTR専用SRLのMROM設定を1TROM設定に変更する。(署名つけない。CRCは更新。)
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2471 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
54fc4f5c22
commit
76f84cdf41
@ -27,12 +27,13 @@
|
||||
#include "revision.h"
|
||||
#include "keys.h"
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
|
||||
<できていないところリスト>
|
||||
++ 製品版srlの実機上での動作確認
|
||||
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define CARD_LATENCY_MASK 0x083f1fff
|
||||
#define CARD_MROM_GAME_LATENCY 0x00010017
|
||||
#define CARD_MROM_SECURE_HW_LATENCY 0x001808f8
|
||||
#define CARD_MROM_SECURE_SW_LATENCY 0x051e
|
||||
#define CARD_1TROM_GAME_LATENCY 0x00010657
|
||||
#define CARD_1TROM_SECURE_HW_LATENCY 0x081808f8
|
||||
#define CARD_1TROM_SECURE_SW_LATENCY 0x0d7e
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -63,7 +64,8 @@ typedef struct _SContext
|
||||
BOOL bDevFlag;
|
||||
BOOL bVerFlag;
|
||||
int verNum;
|
||||
|
||||
BOOL bMROM;
|
||||
|
||||
FILE *ifp;
|
||||
FILE *ofp;
|
||||
}
|
||||
@ -73,6 +75,7 @@ SContext;
|
||||
static BOOL iMain( SContext *pContext );
|
||||
u16 CalcCRC16(u16 start, u8 *data, int size);
|
||||
BOOL SignRomHeader( ROM_Header *prh );
|
||||
static void SetRomSpeedByIndex(ROM_Header * header, tRomSpeedType idx);
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
|
||||
@ -104,6 +107,7 @@ void usage()
|
||||
printf( "-s : negate flag for the signature in a ROM Header.\n" );
|
||||
printf( "-d : negate a new developer encrypt flag, and assert an old one.\n" );
|
||||
printf( "-v NUM: change ROM version in a ROM Header.\n" );
|
||||
printf( "-m : [Only NTR limited ROM] Rom speed type replace 1TROM from MROM\n" );
|
||||
printf( "-----------------------------------------------------------------------------\n" );
|
||||
}
|
||||
|
||||
@ -125,7 +129,7 @@ int main(int argc, char *argv[])
|
||||
memset( &context, 0, sizeof(SContext) );
|
||||
|
||||
// オプション
|
||||
while( (opt = getopt(argc, argv, "hpsdv:")) >= 0 )
|
||||
while( (opt = getopt(argc, argv, "hpsdmv:")) >= 0 )
|
||||
{
|
||||
switch( opt )
|
||||
{
|
||||
@ -151,6 +155,10 @@ int main(int argc, char *argv[])
|
||||
context.verNum = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
context.bMROM = TRUE;
|
||||
break;
|
||||
|
||||
default: // オプション引数が指定されていないときにも実行される
|
||||
usage();
|
||||
fprintf( stdout, "error: illegal option\n" );
|
||||
@ -282,16 +290,35 @@ static BOOL iMain( SContext *pContext )
|
||||
{
|
||||
printf( "ROM version: 0x%02x -> 0x%02x\n", rh.s.rom_version, pContext->verNum );
|
||||
rh.s.rom_version = pContext->verNum;
|
||||
}
|
||||
}
|
||||
|
||||
if( pContext->bMROM )
|
||||
{
|
||||
if( rh.s.platform_code != 0x00 )
|
||||
{
|
||||
printf( "ERROR: This option is only for NTR Limited." );
|
||||
return FALSE;
|
||||
}
|
||||
if( (rh.s.game_cmd_param & CARD_LATENCY_MASK) != CARD_MROM_GAME_LATENCY )
|
||||
{
|
||||
printf( "ERROR: This option is only for MROM Setting" );
|
||||
return FALSE;
|
||||
}
|
||||
SetRomSpeedByIndex( &rh, ONETROM );
|
||||
printf( "ROM Speed Type: MROM -> 1TROM\n" );
|
||||
}
|
||||
}
|
||||
|
||||
// ヘッダCRC計算
|
||||
rh.s.header_crc16 = CalcCRC16( CRC16_INIT_VALUE, (u8*)&rh, CALC_CRC16_SIZE );
|
||||
|
||||
// 署名
|
||||
if( !SignRomHeader( &rh ) )
|
||||
if( !(pContext->bMROM) ) // NTR専用オプションのときは署名しない
|
||||
{
|
||||
return FALSE;
|
||||
if( !SignRomHeader( &rh ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// ファイルをコピる
|
||||
@ -425,4 +452,28 @@ BOOL SignRomHeader( ROM_Header *prh )
|
||||
return TRUE;
|
||||
} // ECSrlResult RCSrl::signRomHeader(void)
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
|
||||
ROM Speed Typeの設定
|
||||
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
static ROM_LT romSpeedTypeLatencyTable[] = {
|
||||
{CARD_1TROM_GAME_LATENCY, CARD_1TROM_SECURE_HW_LATENCY, CARD_1TROM_SECURE_SW_LATENCY},
|
||||
{CARD_MROM_GAME_LATENCY, CARD_MROM_SECURE_HW_LATENCY, CARD_MROM_SECURE_SW_LATENCY},
|
||||
};
|
||||
|
||||
static void SetRomSpeedByIndex(ROM_Header * header, tRomSpeedType idx)
|
||||
{
|
||||
ROM_LT *l = &romSpeedTypeLatencyTable[idx];
|
||||
|
||||
header->s.game_cmd_param &= ~CARD_LATENCY_MASK;
|
||||
header->s.game_cmd_param |= l->game_latency;
|
||||
header->s.secure_cmd_param &= ~CARD_LATENCY_MASK;
|
||||
header->s.secure_cmd_param |= l->secure_hw_latency;
|
||||
header->s.secure_cmd_latency = l->secure_sw_latency;
|
||||
}
|
||||
|
||||
|
||||
// end of file
|
||||
|
||||
Loading…
Reference in New Issue
Block a user