mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
VCK および VCW タイトルのバックアップデータ検証における初回リード時のエラーでFATALになるように変更
(接触不良時、初回リード時のWIPポーリングでタイムアウトになる) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@3046 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
5094584a2f
commit
d36d59ffa3
@ -76,7 +76,13 @@ BOOL checkVCK( TitleProperty* tp)
|
|||||||
OS_TPrintf("verifyBuffer:0x%x\n", verify_data);
|
OS_TPrintf("verifyBuffer:0x%x\n", verify_data);
|
||||||
|
|
||||||
InitializeBackup();
|
InitializeBackup();
|
||||||
readEEPROM( 0, (u32*)data, VCK_BACKUP_READ_SIZE);//sizeof(VCK_SlotHeader) + sizeof(VCK_ProfileSlotBody)が32Bytesの倍数でないため
|
if( !readEEPROM( 0, (u32*)data, VCK_BACKUP_READ_SIZE))//sizeof(VCK_SlotHeader) + sizeof(VCK_ProfileSlotBody)‚ª32Bytes‚Ì”{<7B>”‚łȂ¢‚½‚ß
|
||||||
|
{
|
||||||
|
OS_TPrintf("launch NG.\n");
|
||||||
|
FinalizeBackup();
|
||||||
|
MI_FreeWramSlot( MI_WRAM_C, WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
header = (VCK_SlotHeader*)data;
|
header = (VCK_SlotHeader*)data;
|
||||||
body = (VCK_ProfileSlotBody*)((u8*)data + sizeof(VCK_SlotHeader));
|
body = (VCK_ProfileSlotBody*)((u8*)data + sizeof(VCK_SlotHeader));
|
||||||
body_u8 = (u8*)body;
|
body_u8 = (u8*)body;
|
||||||
@ -102,14 +108,16 @@ BOOL checkVCK( TitleProperty* tp)
|
|||||||
|
|
||||||
// checksumがBになるようにランダムな1箇所へ書き込み
|
// checksumがBになるようにランダムな1箇所へ書き込み
|
||||||
{
|
{
|
||||||
MATH_CalcSHA1( calculatedSha1, (const void*)data, sizeof(VCK_ProfileSlotBody));
|
MATH_CalcSHA1( calculatedSha1, (const void*)data, sizeof(VCK_ProfileSlotBody));
|
||||||
}
|
|
||||||
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
||||||
MATH_InitRand16( &rc16, rseed);
|
MATH_InitRand16( &rc16, rseed);
|
||||||
for( i=0; i<sizeof(VCK_ProfileSlotBody); i++)
|
for( i=0; i<sizeof(VCK_ProfileSlotBody); i++)
|
||||||
{
|
{
|
||||||
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
B_checksum = getChecksum( body);
|
B_checksum = getChecksum( body);
|
||||||
// 書き込んだ後の checksum が、S_checksum でも マジコンヘッダのchecksum にもならないようにする
|
// 書き込んだ後の checksum が、S_checksum でも マジコンヘッダのchecksum にもならないようにする
|
||||||
while( (B_checksum == S_checksum) ||
|
while( (B_checksum == S_checksum) ||
|
||||||
|
|||||||
@ -66,8 +66,13 @@ BOOL checkVCW( TitleProperty* tp, u32 ggid)
|
|||||||
OS_TPrintf("verifyBuffer:0x%x\n", verify_data);
|
OS_TPrintf("verifyBuffer:0x%x\n", verify_data);
|
||||||
|
|
||||||
InitializeBackup();
|
InitializeBackup();
|
||||||
readEEPROM( 0, (u32*)data, VCW_BACKUP_READ_SIZE);
|
if( !readEEPROM( 0, (u32*)data, VCW_BACKUP_READ_SIZE))
|
||||||
|
{
|
||||||
|
OS_TPrintf("launch NG!\n");
|
||||||
|
FinalizeBackup();
|
||||||
|
MI_FreeWramSlot( MI_WRAM_C, WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
buf = (u8*)data;
|
buf = (u8*)data;
|
||||||
VCW_Initialize( &vcw[0], buf, ggid);
|
VCW_Initialize( &vcw[0], buf, ggid);
|
||||||
buf = (u8*)data + (sizeof(VCW_SavegameHeader) + sizeof(VCW_BodyForCheck));
|
buf = (u8*)data + (sizeof(VCW_SavegameHeader) + sizeof(VCW_BodyForCheck));
|
||||||
@ -195,14 +200,16 @@ static u16 VCW_Modify( VCW* vcw)
|
|||||||
|
|
||||||
// checksumがBになるようにランダムな1箇所へ書き込み
|
// checksumがBになるようにランダムな1箇所へ書き込み
|
||||||
{
|
{
|
||||||
MATH_CalcSHA1( calculatedSha1, (const void*)vcw->body, sizeof(VCW_BodyForCheck));
|
MATH_CalcSHA1( calculatedSha1, (const void*)vcw->body, sizeof(VCW_BodyForCheck));
|
||||||
}
|
|
||||||
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
||||||
MATH_InitRand16( &rc16, rseed);
|
MATH_InitRand16( &rc16, rseed);
|
||||||
for( i=0; i<sizeof(VCW_BodyForCheck); i++)
|
for( i=0; i<sizeof(VCW_BodyForCheck); i++)
|
||||||
{
|
{
|
||||||
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VCW_UpdateChecksum( vcw);
|
VCW_UpdateChecksum( vcw);
|
||||||
vcw->B_checksum = VCW_GetChecksum( vcw);
|
vcw->B_checksum = VCW_GetChecksum( vcw);
|
||||||
// 書き込んだ後の checksum が、S_checksum でも マジコンヘッダのchecksum にもならないようにする
|
// 書き込んだ後の checksum が、S_checksum でも マジコンヘッダのchecksum にもならないようにする
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user