mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
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:
parent
2d5a8a7ba2
commit
920d96ee47
@ -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");
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
namespace ConsoleRestore
|
||||
{
|
||||
|
||||
bool EqualsIVSFileandIVS();
|
||||
bool EqualsSerialFileandSerial();
|
||||
bool EqualsRegionDataandRegion();
|
||||
u8* ReadSerialNumber();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user