diff --git a/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c b/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c index 9a1764a1..fcedf845 100644 --- a/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c +++ b/build/libraries_sysmenu/sysmenu/common/src/decodeAES.c @@ -114,7 +114,11 @@ void SYSM_StartDecryptAESRegion( ROM_Header_Short *hs ) // Workに開発/製品情報を格納 SYSMi_GetWork()->isDeveloperAESMode = ( hs->developer_encrypt ? TRUE : FALSE ); - + + // Workにカウンタの初期値セット + MI_CpuCopy8( hs->main_static_digest, SYSMi_GetWork()->counterAES[0], AES_BLOCK_SIZE ); // 領域1初期値 + MI_CpuCopy8( hs->sub_static_digest, SYSMi_GetWork()->counterAES[1], AES_BLOCK_SIZE ); // 領域2初期値 + // Workに「鍵」or「シードとゲームコード」をセット if( hs->developer_encrypt ) { @@ -147,7 +151,6 @@ void SYSM_StartDecryptAESRegion( ROM_Header_Short *hs ) #include #include -static BOOL aesFlag; static AESCounter aesCounter; #define DMA_SEND 2 @@ -208,6 +211,10 @@ static void SYSMi_CallbackDecryptAESRegion(PXIFifoTag tag, u32 data, BOOL err) OS_TPrintf( "SYSM_StartDecryptAESRegion:Region %d skip.\n", l ); continue; } + + // カウンタの初期値セット + MI_CpuCopy8( SYSMi_GetWork()->counterAES[l], &aesCounter, AES_BLOCK_SIZE ); + // 鍵ロードして暗号化領域の復号開始 ReplaceWithAes( SYSMi_GetWork()->addr_AESregion[l], SYSMi_GetWork()->size_AESregion[l] ); // DMA転送なのでARM9のためのキャッシュフラッシュは不要のはず diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index cc908dcb..e35d2433 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -126,6 +126,7 @@ typedef struct SYSM_work { u8 keyAES[AES_KEY_SIZE]; // 開発版AES暗号化領域の復号に使用するKEY(に使うタイトルネーム) u8 idAES[GAME_CODE_MAX]; // 製品版AES暗号化領域の復号に使用するID(に使うゲームコード) u8 seedAES[AES_KEY_SIZE]; // 製品版AES暗号化領域の復号に使用するSEED + u8 counterAES[2][AES_BLOCK_SIZE]; // AES暗号化領域の復号に使用するカウンタ初期値 // NTR-IPL2のレガシー 最終的には消すと思う BOOL enableCardNormalOnly;