From 0d64a3599ee8f106c16f0b755a8b9eb054d91eaf Mon Sep 17 00:00:00 2001 From: N2614 Date: Fri, 11 Mar 2011 05:44:47 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=B7=E3=83=AA=E3=82=A2=E3=83=AB=E3=83=8A?= =?UTF-8?q?=E3=83=B3=E3=83=90=E3=83=BC=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9ID=E3=81=AE=E6=AF=94?= =?UTF-8?q?=E8=BC=83=E3=81=A7=E5=90=8C=E4=B8=80=E6=9C=AC=E4=BD=93=E3=81=8B?= =?UTF-8?q?=E3=81=A9=E3=81=86=E3=81=8B=E8=AA=BF=E3=81=B9=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@110 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../ConsoleBackup/ConsoleBackup.cpp | 13 ++++++-- .../ConsoleBackup/ConsoleBackup.h | 1 + .../ConsoleBackup/Exporter.cpp | 12 +++++++ .../ConsoleRestore/ConsoleRestore.cpp | 13 ++++++-- .../ConsoleRestore/ConsoleRestore.h | 1 + .../ConsoleRestore/Controller.cpp | 4 +-- .../ConsoleRestore/Importer.cpp | 33 ++++++++++--------- .../ConsoleRestore/Importer.h | 2 +- trunk/ConsoleDataMigration/common/FileName.h | 1 + 9 files changed, 56 insertions(+), 24 deletions(-) diff --git a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp index fcdfb38..bbb64c3 100644 --- a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp +++ b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp @@ -72,6 +72,9 @@ u8 batteryRemain = 100; // シリアルナンバー u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; +// デバイスID +bit32 s_DeviceId; + // シリアルナンバーが読めるかどうか bool s_CanReadSerialNumber = false; @@ -124,6 +127,11 @@ void GetIvs(void** ivs, size_t* size) *size = s_SizeofIvs; } +bit32 GetDeviceId() +{ + return s_DeviceId; +} + void GetVersionData(common::VerDef* version) { *version = s_VerData; @@ -261,13 +269,12 @@ extern "C" void nnMain(void) hwInfo.AddCheckDigit(reinterpret_cast(s_SerialNo)); // デバイスIDの取得 - bit32 deviceId; - result = nn::ps::CTR::GetDeviceId(&deviceId); + result = nn::ps::CTR::GetDeviceId(&s_DeviceId); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); bit64 infraDeviceId; result = nn::nim::CTR::InitializeForShop(); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - result = nn::nim::CTR::Shop::GetInfraDeviceId(deviceId, &infraDeviceId); + result = nn::nim::CTR::Shop::GetInfraDeviceId(s_DeviceId, &infraDeviceId); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); result = nn::nim::CTR::FinalizeForShop(); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); diff --git a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h index 75f71c5..92a2588 100644 --- a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h +++ b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h @@ -30,6 +30,7 @@ void GetSerialNumber(u8** serial, size_t* size); void GetIvs(void** ivs, size_t* size); nn::Handle GetMcuHandle(); void GetVersionData(common::VerDef* version); +bit32 GetDeviceId(); const u32 CONSOLE_WIDTH = 38; const u32 CONSOLE_HEIGHT = 24; diff --git a/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp b/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp index 69778bd..b074d75 100644 --- a/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp +++ b/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp @@ -212,6 +212,15 @@ void WriteSerialNumber() s_SdWriter.WriteBuf(common::SERIAL_PATHNAME, serial, size); } +void WriteDeviceId() +{ + COMMON_LOGGER("Export Device ID.\n"); + + bit32 deviceId = GetDeviceId(); + + s_SdWriter.WriteBuf(common::DEVICE_ID_PATHNAME, &deviceId, sizeof(deviceId)); +} + void WriteIvs() { COMMON_LOGGER("Export IVS.\n"); @@ -523,6 +532,9 @@ void ExportData() // シリアルナンバーをSDカードに書き込む WriteSerialNumber(); + // デバイスIDをSDカードに書き込む + WriteDeviceId(); + // 完全性検証SEEDをSDカードに書き込む WriteIvs(); diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp index 4e5e69a..7e08570 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp +++ b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp @@ -68,6 +68,9 @@ u8 batteryRemain = 100; // シリアルナンバー u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; +// デバイスID +bit32 s_DeviceId; + // シリアルナンバーが読めるかどうか bool s_CanReadSerialNumber = false; @@ -118,6 +121,11 @@ void GetIvs(void** ivs, size_t* size) *size = s_SizeofIvs; } +bit32 GetDeviceId() +{ + return s_DeviceId; +} + void GetVersionData(common::VerDef* version) { *version = s_VerData; @@ -271,13 +279,12 @@ extern "C" void nnMain(void) COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); // デバイスIDの取得 - bit32 deviceId; - result = nn::ps::CTR::GetDeviceId(&deviceId); + result = nn::ps::CTR::GetDeviceId(&s_DeviceId); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); bit64 infraDeviceId; result = nn::nim::CTR::InitializeForShop(); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - result = nn::nim::CTR::Shop::GetInfraDeviceId(deviceId, &infraDeviceId); + result = nn::nim::CTR::Shop::GetInfraDeviceId(s_DeviceId, &infraDeviceId); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); result = nn::nim::CTR::FinalizeForShop(); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h index 2166c41..ae779d2 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h +++ b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h @@ -30,6 +30,7 @@ void GetSerialNumber(u8** serial, size_t* size); void GetIvs(void** ivs, size_t* size); nn::Handle GetMcuHandle(); void GetVersionData(common::VerDef* version); +bit32 GetDeviceId(); void FinalizeAll(); diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/Controller.cpp b/trunk/ConsoleDataMigration/ConsoleRestore/Controller.cpp index 8d237b6..1d5a5e2 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/Controller.cpp +++ b/trunk/ConsoleDataMigration/ConsoleRestore/Controller.cpp @@ -325,8 +325,8 @@ void ControlState(::std::vector& operationMessage, bool& nextStep, { COMMON_LOGGER("Initialize Console\n"); - // SDカードのシリアルナンバーと本体のシリアルナンバーは異なるか? - if (EqualsSerialFileandSerial()) + // SDカードのデバイスIDと本体のデバイスIDは異なるか? + if (EqualsDeviceIdFileandDeviceId()) { // 同一本体に書き戻そうとしたファイルを作る COMMON_LOGGER("Restore to the same console. Initialize.\n"); diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp index f843a40..9ae6d45 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp +++ b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp @@ -67,7 +67,7 @@ TimeZone s_TimeZone; const size_t NTP_SERVER_NAME_LENGTH = 256; char s_NtpServerName[NTP_SERVER_NAME_LENGTH]; -bool s_CheckedEqualsSerialFileandSerial = false; +bool s_CheckedEqualsDeviceIdFileandDeviceId = false; bool s_CheckedEqualsRegionDataandRegion = false; bool s_ReadSerialNumber = false; @@ -222,30 +222,33 @@ u8* ReadSerialNumber() return s_SerialNo; } -bool EqualsSerialFileandSerial() +bool EqualsDeviceIdFileandDeviceId() { nn::Result result; - u8* serial; - size_t serialSize; static bool retval = false; - if(s_CheckedEqualsSerialFileandSerial) + if(s_CheckedEqualsDeviceIdFileandDeviceId) { return retval; } - COMMON_LOGGER("Check Serial Number\n"); + COMMON_LOGGER("Check Device Id\n"); - GetSerialNumber(&serial, &serialSize); - ReadSerialNumber(); - - if(std::memcmp(s_SerialNo, serial, nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN) == 0) + bit32 sdDeviceId; + common::SdReaderWriter sdReader; + size_t totalSize; + result = sdReader.ReadBuf(common::DEVICE_ID_PATHNAME, &sdDeviceId, sizeof(sdDeviceId), &totalSize); + s_CheckedEqualsDeviceIdFileandDeviceId = true; + if(result.IsSuccess()) { - retval = true; + retval = (GetDeviceId() == sdDeviceId); + return retval; + } + else + { + retval = false; + return retval; } - s_CheckedEqualsSerialFileandSerial = true; - - return retval; } bool EqualsRegionDataandRegion() @@ -1304,7 +1307,7 @@ void ImportTwlSoundData() void ClearFileReadResult() { - s_CheckedEqualsSerialFileandSerial = false; + s_CheckedEqualsDeviceIdFileandDeviceId = false; s_CheckedEqualsRegionDataandRegion = false; s_ReadSerialNumber = false; } diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h index 8cf420a..6585e77 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h +++ b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h @@ -23,7 +23,7 @@ namespace ConsoleRestore { -bool EqualsSerialFileandSerial(); +bool EqualsDeviceIdFileandDeviceId(); bool EqualsRegionDataandRegion(); u8* ReadSerialNumber(); diff --git a/trunk/ConsoleDataMigration/common/FileName.h b/trunk/ConsoleDataMigration/common/FileName.h index 0e725f8..9a1b006 100644 --- a/trunk/ConsoleDataMigration/common/FileName.h +++ b/trunk/ConsoleDataMigration/common/FileName.h @@ -55,6 +55,7 @@ const wchar_t* const PLAYHISTORY_COUNT_PATHNAME = L"sdmc:/CTR_Console_Repair/pla const wchar_t* const CFG_CALIBRATION_PATHNAME = L"sdmc:/CTR_Console_Repair/cfgCalibration.bin"; const wchar_t* const VERSION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/version.bin"; const wchar_t* const REGION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/Region.bin"; +const wchar_t* const DEVICE_ID_PATHNAME = L"sdmc:/CTR_Console_Repair/deviceId.bin"; enum TWL_PATH_INDEX {