IVSではなくシリアルナンバーの比較で同一本体かどうか調べるように

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@107 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-03-10 08:33:01 +00:00
parent 2d5a8a7ba2
commit 920d96ee47
3 changed files with 15 additions and 56 deletions

View File

@ -325,8 +325,8 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
{
COMMON_LOGGER("Initialize Console\n");
// SDカードのIVSと本体のIVSは異なるか?
if (EqualsIVSFileandIVS())
// SDカードのシリアルナンバーと本体のシリアルナンバーは異なるか?
if (EqualsSerialFileandSerial())
{
// 同一本体に書き戻そうとしたファイルを作る
COMMON_LOGGER("Restore to the same console. Initialize.\n");

View File

@ -67,7 +67,7 @@ TimeZone s_TimeZone;
const size_t NTP_SERVER_NAME_LENGTH = 256;
char s_NtpServerName[NTP_SERVER_NAME_LENGTH];
bool s_CheckedEqualsIVSFileandIVS = false;
bool s_CheckedEqualsSerialFileandSerial = false;
bool s_CheckedEqualsRegionDataandRegion = false;
bool s_ReadSerialNumber = false;
@ -222,69 +222,28 @@ u8* ReadSerialNumber()
return s_SerialNo;
}
bool EqualsIVSFileandIVS()
bool EqualsSerialFileandSerial()
{
nn::Result result;
void* ivs;
size_t ivsSize;
size_t readSize;
u8* serial;
size_t serialSize;
static bool retval = false;
if(s_CheckedEqualsIVSFileandIVS)
if(s_CheckedEqualsSerialFileandSerial)
{
return retval;
}
COMMON_LOGGER("Check IVS\n");
COMMON_LOGGER("Check Serial Number\n");
GetIvs(&ivs, &ivsSize);
GetSerialNumber(&serial, &serialSize);
ReadSerialNumber();
size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize() / 2;
NN_LOG("AllocatableSize = %d\n", bufSize);
void* enc = common::HeapManager::GetHeap()->Allocate(bufSize);
if (enc != NULL)
if(std::memcmp(s_SerialNo, serial, nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN) == 0)
{
common::SdReaderWriter sdReader;
result = sdReader.ReadBuf(common::IVS_PATHNAME, enc, bufSize, &readSize);
if(result.IsSuccess())
{
void *dec = common::HeapManager::GetHeap()->Allocate(readSize);
if(dec != NULL)
{
// AES復号化する
nn::crypto::Initialize();
nn::crypto::SwAesCtrContext swAesCtrContest;
swAesCtrContest.Initialize(s_IvsDecryptIv, common::key, sizeof(common::key));
swAesCtrContest.Decrypt(dec, enc, readSize);
NN_LOG("readSize = %d, ivsSize = %d\n", readSize, ivsSize);
// サイズ一致かつ内容一致でtrue
if (readSize == ivsSize && std::memcmp(ivs, dec, ivsSize) == 0)
{
retval = true;
}
common::HeapManager::GetHeap()->Free(dec);
}
else
{
NN_LOG("Failed Allocate Heap!! %s, %d", __FILE__, __LINE__);
}
}
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
s_CheckedEqualsIVSFileandIVS = true;
common::HeapManager::GetHeap()->Free(enc);
}
else
{
NN_LOG("Failed Allocate Heap!! %s, %d", __FILE__, __LINE__);
return retval;
retval = true;
}
s_CheckedEqualsSerialFileandSerial = true;
return retval;
}
@ -1345,7 +1304,7 @@ void ImportTwlSoundData()
void ClearFileReadResult()
{
s_CheckedEqualsIVSFileandIVS = false;
s_CheckedEqualsSerialFileandSerial = false;
s_CheckedEqualsRegionDataandRegion = false;
s_ReadSerialNumber = false;
}

View File

@ -23,7 +23,7 @@
namespace ConsoleRestore
{
bool EqualsIVSFileandIVS();
bool EqualsSerialFileandSerial();
bool EqualsRegionDataandRegion();
u8* ReadSerialNumber();