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");
|
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");
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
|
|
||||||
bool EqualsIVSFileandIVS();
|
bool EqualsSerialFileandSerial();
|
||||||
bool EqualsRegionDataandRegion();
|
bool EqualsRegionDataandRegion();
|
||||||
u8* ReadSerialNumber();
|
u8* ReadSerialNumber();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user