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"); COMMON_LOGGER("Initialize Console\n");
// SDカードのIVSと本体のIVSは異なるか? // SDカードのシリアルナンバーと本体のシリアルナンバーは異なるか?
if (EqualsIVSFileandIVS()) if (EqualsSerialFileandSerial())
{ {
// 同一本体に書き戻そうとしたファイルを作る // 同一本体に書き戻そうとしたファイルを作る
COMMON_LOGGER("Restore to the same console. Initialize.\n"); 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; const size_t NTP_SERVER_NAME_LENGTH = 256;
char s_NtpServerName[NTP_SERVER_NAME_LENGTH]; char s_NtpServerName[NTP_SERVER_NAME_LENGTH];
bool s_CheckedEqualsIVSFileandIVS = false; bool s_CheckedEqualsSerialFileandSerial = false;
bool s_CheckedEqualsRegionDataandRegion = false; bool s_CheckedEqualsRegionDataandRegion = false;
bool s_ReadSerialNumber = false; bool s_ReadSerialNumber = false;
@ -222,69 +222,28 @@ u8* ReadSerialNumber()
return s_SerialNo; return s_SerialNo;
} }
bool EqualsIVSFileandIVS() bool EqualsSerialFileandSerial()
{ {
nn::Result result; nn::Result result;
void* ivs; u8* serial;
size_t ivsSize; size_t serialSize;
size_t readSize;
static bool retval = false; static bool retval = false;
if(s_CheckedEqualsIVSFileandIVS) if(s_CheckedEqualsSerialFileandSerial)
{ {
return retval; 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; if(std::memcmp(s_SerialNo, serial, nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN) == 0)
NN_LOG("AllocatableSize = %d\n", bufSize);
void* enc = common::HeapManager::GetHeap()->Allocate(bufSize);
if (enc != NULL)
{ {
common::SdReaderWriter sdReader; retval = true;
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;
} }
s_CheckedEqualsSerialFileandSerial = true;
return retval; return retval;
} }
@ -1345,7 +1304,7 @@ void ImportTwlSoundData()
void ClearFileReadResult() void ClearFileReadResult()
{ {
s_CheckedEqualsIVSFileandIVS = false; s_CheckedEqualsSerialFileandSerial = false;
s_CheckedEqualsRegionDataandRegion = false; s_CheckedEqualsRegionDataandRegion = false;
s_ReadSerialNumber = false; s_ReadSerialNumber = false;
} }

View File

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