mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
開発機と量産機で鍵を変える
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@145 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
a40aac9306
commit
655e517278
@ -18,6 +18,7 @@
|
|||||||
#include <cwchar>
|
#include <cwchar>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <nn/os/os_Private.h>
|
||||||
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
||||||
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
||||||
#include <nn/cfg/CTR/cfg_Api.h>
|
#include <nn/cfg/CTR/cfg_Api.h>
|
||||||
@ -239,7 +240,15 @@ void WriteIvs()
|
|||||||
|
|
||||||
nn::crypto::SwAesCtrContext swAesCtrContest;
|
nn::crypto::SwAesCtrContext swAesCtrContest;
|
||||||
|
|
||||||
swAesCtrContest.Initialize(common::iv, common::key, sizeof(common::key));
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
|
{
|
||||||
|
swAesCtrContest.Initialize(common::devIv, common::devKey, sizeof(common::devKey));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
swAesCtrContest.Initialize(common::prodIv, common::prodKey, sizeof(common::prodKey));
|
||||||
|
}
|
||||||
|
|
||||||
swAesCtrContest.Encrypt(enc, ivs, size);
|
swAesCtrContest.Encrypt(enc, ivs, size);
|
||||||
|
|
||||||
s_SdWriter.WriteBufWithCmac(common::IVS_PATHNAME, enc, size);
|
s_SdWriter.WriteBufWithCmac(common::IVS_PATHNAME, enc, size);
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <nn.h>
|
#include <nn.h>
|
||||||
|
#include <nn/os/os_Private.h>
|
||||||
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
||||||
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
||||||
#include <nn/cfg/CTR/cfg_ApiInit.h>
|
#include <nn/cfg/CTR/cfg_ApiInit.h>
|
||||||
@ -606,7 +607,15 @@ nn::Result ImportIvs()
|
|||||||
nn::crypto::Initialize();
|
nn::crypto::Initialize();
|
||||||
nn::crypto::SwAesCtrContext swAesCtrContest;
|
nn::crypto::SwAesCtrContext swAesCtrContest;
|
||||||
|
|
||||||
swAesCtrContest.Initialize(common::iv, common::key, sizeof(common::key));
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
|
{
|
||||||
|
swAesCtrContest.Initialize(common::devIv, common::devKey, sizeof(common::devKey));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
swAesCtrContest.Initialize(common::prodIv, common::prodKey, sizeof(common::prodKey));
|
||||||
|
}
|
||||||
|
|
||||||
swAesCtrContest.Decrypt(dec, enc, readSize);
|
swAesCtrContest.Decrypt(dec, enc, readSize);
|
||||||
|
|
||||||
// IVS書き込み
|
// IVS書き込み
|
||||||
|
|||||||
@ -20,23 +20,43 @@
|
|||||||
|
|
||||||
namespace common
|
namespace common
|
||||||
{
|
{
|
||||||
const bit8 key[AES_KEY_SIZE] NN_ATTRIBUTE_ALIGN(4) =
|
const bit8 devKey[AES_KEY_SIZE] NN_ATTRIBUTE_ALIGN(4) =
|
||||||
{
|
{
|
||||||
0x81, 0x35, 0xc6, 0x54, 0x19, 0x1a, 0x47, 0x2a,
|
0x81, 0x35, 0xc6, 0x54, 0x19, 0x1a, 0x47, 0x2a,
|
||||||
0x6b, 0x78, 0xbe, 0x25, 0x90, 0xf6, 0xee, 0x74
|
0x6b, 0x78, 0xbe, 0x25, 0x90, 0xf6, 0xee, 0x74
|
||||||
};
|
};
|
||||||
|
|
||||||
const bit8 cmacKey[AES_KEY_SIZE] =
|
const bit8 devCmacKey[AES_KEY_SIZE] =
|
||||||
{
|
{
|
||||||
0x87, 0xdd, 0xc6, 0xd6, 0xf2, 0xe0, 0x2c, 0xa6,
|
0x87, 0xdd, 0xc6, 0xd6, 0xf2, 0xe0, 0x2c, 0xa6,
|
||||||
0x04, 0x21, 0x9c, 0x5e, 0x33, 0x8c, 0x3d, 0xaa
|
0x04, 0x21, 0x9c, 0x5e, 0x33, 0x8c, 0x3d, 0xaa
|
||||||
};
|
};
|
||||||
|
|
||||||
const bit8 iv[AES_BLOCK_SIZE] NN_ATTRIBUTE_ALIGN(4) =
|
const bit8 devIv[AES_BLOCK_SIZE] NN_ATTRIBUTE_ALIGN(4) =
|
||||||
{
|
{
|
||||||
0xdf, 0x0f, 0xf9, 0x1b, 0x34, 0x47, 0x70, 0x7f,
|
0xdf, 0x0f, 0xf9, 0x1b, 0x34, 0x47, 0x70, 0x7f,
|
||||||
0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9
|
0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const bit8 prodKey[AES_KEY_SIZE] NN_ATTRIBUTE_ALIGN(4) =
|
||||||
|
{
|
||||||
|
0x64, 0x02, 0x6d, 0xbd, 0x9f, 0xb6, 0x62, 0x39,
|
||||||
|
0x86, 0x90, 0x67, 0x8a, 0xe2, 0xfa, 0xe1, 0x6e
|
||||||
|
};
|
||||||
|
|
||||||
|
const bit8 prodCmacKey[AES_KEY_SIZE] =
|
||||||
|
{
|
||||||
|
0xdf, 0x3c, 0x58, 0xeb, 0xeb, 0xbf, 0x45, 0x6d,
|
||||||
|
0xc9, 0xbe, 0xe3, 0x10, 0xe2, 0x23, 0xfc, 0x30
|
||||||
|
};
|
||||||
|
|
||||||
|
const bit8 prodIv[AES_BLOCK_SIZE] NN_ATTRIBUTE_ALIGN(4) =
|
||||||
|
{
|
||||||
|
0xe4, 0xcf, 0x58, 0xe5, 0xc9, 0xd6, 0xac, 0x7d,
|
||||||
|
0xf1, 0xb9, 0x82, 0xf9, 0xa2, 0xd8, 0xda, 0x7b
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* AES_DEFINE_H_ */
|
#endif /* AES_DEFINE_H_ */
|
||||||
|
|||||||
@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <nn/os/os_Private.h>
|
||||||
|
|
||||||
#include <nn/crypto/crypto_AesCmac.h>
|
#include <nn/crypto/crypto_AesCmac.h>
|
||||||
#include <nn/crypto/crypto_SwAesCtrContext.h>
|
#include <nn/crypto/crypto_SwAesCtrContext.h>
|
||||||
#include <nn/crypto/crypto_Sha256.h>
|
#include <nn/crypto/crypto_Sha256.h>
|
||||||
@ -212,7 +214,14 @@ bool CopyDirectory(const wchar_t * from_path, const wchar_t * to_path, void* buf
|
|||||||
}
|
}
|
||||||
|
|
||||||
nn::crypto::SwAesCtrContext swAesCtrContext;
|
nn::crypto::SwAesCtrContext swAesCtrContext;
|
||||||
swAesCtrContext.Initialize(iv, common::key, sizeof(key));
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
|
{
|
||||||
|
swAesCtrContext.Initialize(devIv, common::devKey, sizeof(devKey));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
swAesCtrContext.Initialize(prodIv, common::prodKey, sizeof(prodKey));
|
||||||
|
}
|
||||||
|
|
||||||
size_t totalReadSize = 0;
|
size_t totalReadSize = 0;
|
||||||
nn::crypto::Sha256Context context;
|
nn::crypto::Sha256Context context;
|
||||||
@ -297,8 +306,16 @@ bool CopyDirectory(const wchar_t * from_path, const wchar_t * to_path, void* buf
|
|||||||
context.GetHash(sha256Hash);
|
context.GetHash(sha256Hash);
|
||||||
|
|
||||||
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
|
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
|
||||||
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash,
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey);
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash,
|
||||||
|
nn::crypto::Sha256Context::HASH_SIZE, common::devCmacKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash,
|
||||||
|
nn::crypto::Sha256Context::HASH_SIZE, common::prodCmacKey);
|
||||||
|
}
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
result = to_file.TryWrite(&writesize, cmac, sizeof(cmac));
|
result = to_file.TryWrite(&writesize, cmac, sizeof(cmac));
|
||||||
@ -431,7 +448,15 @@ bool CalculateAndCompareCmac(nn::crypto::Sha256Context* context, bit8* sdCmac)
|
|||||||
context->GetHash(sha256Hash);
|
context->GetHash(sha256Hash);
|
||||||
context->Finalize();
|
context->Finalize();
|
||||||
|
|
||||||
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, sizeof(sha256Hash), common::cmacKey);
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, sizeof(sha256Hash), common::devCmacKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, sizeof(sha256Hash), common::prodCmacKey);
|
||||||
|
}
|
||||||
|
|
||||||
if (result.IsFailure())
|
if (result.IsFailure())
|
||||||
{
|
{
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|||||||
@ -18,6 +18,8 @@
|
|||||||
#include "CommonLogger.h"
|
#include "CommonLogger.h"
|
||||||
#include "Aes_define.h"
|
#include "Aes_define.h"
|
||||||
|
|
||||||
|
#include <nn/os/os_Private.h>
|
||||||
|
|
||||||
#include <nn/crypto/crypto_AesCmac.h>
|
#include <nn/crypto/crypto_AesCmac.h>
|
||||||
#include <nn/crypto/crypto_SwAesCtrContext.h>
|
#include <nn/crypto/crypto_SwAesCtrContext.h>
|
||||||
#include <nn/crypto/crypto_Sha256.h>
|
#include <nn/crypto/crypto_Sha256.h>
|
||||||
@ -122,7 +124,15 @@ nn::Result SdReaderWriter::WriteBufWithCmac(const wchar_t* path, void* buf, size
|
|||||||
nn::crypto::CalculateSha256(sha256Hash, buf, size);
|
nn::crypto::CalculateSha256(sha256Hash, buf, size);
|
||||||
|
|
||||||
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
|
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
|
||||||
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey);
|
|
||||||
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::devCmacKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::prodCmacKey);
|
||||||
|
}
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
s32 writeSize;
|
s32 writeSize;
|
||||||
@ -212,7 +222,15 @@ nn::Result SdReaderWriter::ReadBufWithCmac(const wchar_t* path, void* buf, size_
|
|||||||
nn::crypto::CalculateSha256(sha256Hash, buf, *totalSize);
|
nn::crypto::CalculateSha256(sha256Hash, buf, *totalSize);
|
||||||
|
|
||||||
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
|
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
|
||||||
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey);
|
if(nn::os::IsRunOnDevelopmentHardware())
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::devCmacKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::prodCmacKey);
|
||||||
|
}
|
||||||
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
if(std::memcmp(reinterpret_cast<bit8*>(buf) + *totalSize, cmac, sizeof(cmac)) != 0)
|
if(std::memcmp(reinterpret_cast<bit8*>(buf) + *totalSize, cmac, sizeof(cmac)) != 0)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user