From 91f534a7c30f691518da1ed73889945ee20e9cf6 Mon Sep 17 00:00:00 2001 From: Gustave Monce Date: Sat, 31 Aug 2024 21:58:23 +0200 Subject: [PATCH] fix: Merge issues from previous commit --- .../UEFIApps/LumiaBootManagerAppModel.cs | 89 ++++++------ .../Models/UEFIApps/LumiaFlashAppModel.cs | 135 +++++++++--------- .../Models/UEFIApps/LumiaPhoneInfoAppModel.cs | 65 +++++---- 3 files changed, 152 insertions(+), 137 deletions(-) diff --git a/WPinternals/Models/UEFIApps/LumiaBootManagerAppModel.cs b/WPinternals/Models/UEFIApps/LumiaBootManagerAppModel.cs index 4ba8005..a9c809f 100644 --- a/WPinternals/Models/UEFIApps/LumiaBootManagerAppModel.cs +++ b/WPinternals/Models/UEFIApps/LumiaBootManagerAppModel.cs @@ -129,55 +129,60 @@ namespace WPinternals LumiaBootManagerPhoneInfo Result = BootManagerInfo; - byte[] Request = new byte[4]; - ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature); - byte[] Response = ExecuteRawMethod(Request); - if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU")) + if (Result.State == PhoneInfoState.Empty) { - Result.App = (FlashAppType)Response[5]; - - switch (Result.App) + byte[] Request = new byte[4]; + ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature); + byte[] Response = ExecuteRawMethod(Request); + if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU")) { - case FlashAppType.BootManager: - Result.BootManagerProtocolVersionMajor = Response[6]; - Result.BootManagerProtocolVersionMinor = Response[7]; - Result.BootManagerVersionMajor = Response[8]; - Result.BootManagerVersionMinor = Response[9]; - break; - } + Result.App = (FlashAppType)Response[5]; - byte SubblockCount = Response[10]; - int SubblockOffset = 11; - - for (int i = 0; i < SubblockCount; i++) - { - byte SubblockID = Response[SubblockOffset + 0x00]; - - LogFile.Log($"{Result.App} SubblockID: 0x{SubblockID:X}"); - - UInt16 SubblockLength = BigEndian.ToUInt16(Response, SubblockOffset + 0x01); - int SubblockPayloadOffset = SubblockOffset + 3; - byte SubblockVersion; - switch (SubblockID) + switch (Result.App) { - case 0x01: - Result.TransferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset); - break; - case 0x04: - Result.FlashAppProtocolVersionMajor = Response[SubblockPayloadOffset + 0x00]; - Result.FlashAppProtocolVersionMinor = Response[SubblockPayloadOffset + 0x01]; - Result.FlashAppVersionMajor = Response[SubblockPayloadOffset + 0x02]; - Result.FlashAppVersionMinor = Response[SubblockPayloadOffset + 0x03]; - break; - case 0x1F: - Result.MmosOverUsbSupported = Response[SubblockPayloadOffset] == 1; - break; - case 0x20: - // CRC header info + case FlashAppType.BootManager: + Result.BootManagerProtocolVersionMajor = Response[6]; + Result.BootManagerProtocolVersionMinor = Response[7]; + Result.BootManagerVersionMajor = Response[8]; + Result.BootManagerVersionMinor = Response[9]; break; } - SubblockOffset += SubblockLength + 3; + + byte SubblockCount = Response[10]; + int SubblockOffset = 11; + + for (int i = 0; i < SubblockCount; i++) + { + byte SubblockID = Response[SubblockOffset + 0x00]; + + LogFile.Log($"{Result.App} SubblockID: 0x{SubblockID:X}"); + + UInt16 SubblockLength = BigEndian.ToUInt16(Response, SubblockOffset + 0x01); + int SubblockPayloadOffset = SubblockOffset + 3; + byte SubblockVersion; + switch (SubblockID) + { + case 0x01: + Result.TransferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset); + break; + case 0x04: + Result.FlashAppProtocolVersionMajor = Response[SubblockPayloadOffset + 0x00]; + Result.FlashAppProtocolVersionMinor = Response[SubblockPayloadOffset + 0x01]; + Result.FlashAppVersionMajor = Response[SubblockPayloadOffset + 0x02]; + Result.FlashAppVersionMinor = Response[SubblockPayloadOffset + 0x03]; + break; + case 0x1F: + Result.MmosOverUsbSupported = Response[SubblockPayloadOffset] == 1; + break; + case 0x20: + // CRC header info + break; + } + SubblockOffset += SubblockLength + 3; + } } + + Result.State = PhoneInfoState.Basic; } return Result; diff --git a/WPinternals/Models/UEFIApps/LumiaFlashAppModel.cs b/WPinternals/Models/UEFIApps/LumiaFlashAppModel.cs index 9619dbc..0ae0aeb 100644 --- a/WPinternals/Models/UEFIApps/LumiaFlashAppModel.cs +++ b/WPinternals/Models/UEFIApps/LumiaFlashAppModel.cs @@ -193,78 +193,83 @@ namespace WPinternals LumiaFlashAppPhoneInfo Result = FlashAppInfo; - byte[] Request = new byte[4]; - ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature); - byte[] Response = ExecuteRawMethod(Request); - if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU")) + if (Result.State == PhoneInfoState.Empty) { - Result.App = (FlashAppType)Response[5]; - - switch (Result.App) + byte[] Request = new byte[4]; + ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature); + byte[] Response = ExecuteRawMethod(Request); + if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU")) { - case FlashAppType.FlashApp: - Result.FlashAppProtocolVersionMajor = Response[6]; - Result.FlashAppProtocolVersionMinor = Response[7]; - Result.FlashAppVersionMajor = Response[8]; - Result.FlashAppVersionMinor = Response[9]; - break; - } + Result.App = (FlashAppType)Response[5]; - byte SubblockCount = Response[10]; - int SubblockOffset = 11; - - for (int i = 0; i < SubblockCount; i++) - { - byte SubblockID = Response[SubblockOffset + 0x00]; - - LogFile.Log($"{Result.App} SubblockID: 0x{SubblockID:X}"); - - UInt16 SubblockLength = BigEndian.ToUInt16(Response, SubblockOffset + 0x01); - int SubblockPayloadOffset = SubblockOffset + 3; - byte SubblockVersion; - switch (SubblockID) + switch (Result.App) { - case 0x01: - Result.TransferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset); - break; - case 0x02: - Result.WriteBufferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset); - break; - case 0x03: - Result.EmmcSizeInSectors = BigEndian.ToUInt32(Response, SubblockPayloadOffset); - break; - case 0x04: - Result.SdCardSizeInSectors = BigEndian.ToUInt32(Response, SubblockPayloadOffset); - break; - case 0x05: - Result.PlatformID = ByteOperations.ReadAsciiString(Response, (uint)SubblockPayloadOffset, SubblockLength).Trim([' ', '\0']); - break; - case 0x0D: - Result.AsyncSupport = Response[SubblockPayloadOffset + 1] == 1; - break; - case 0x0F: - SubblockVersion = Response[SubblockPayloadOffset]; // 0x03 - Result.PlatformSecureBootEnabled = Response[SubblockPayloadOffset + 0x01] == 0x01; - Result.SecureFfuEnabled = Response[SubblockPayloadOffset + 0x02] == 0x01; - Result.JtagDisabled = Response[SubblockPayloadOffset + 0x03] == 0x01; - Result.RdcPresent = Response[SubblockPayloadOffset + 0x04] == 0x01; - Result.Authenticated = (Response[SubblockPayloadOffset + 0x05] == 0x01) || (Response[SubblockPayloadOffset + 0x05] == 0x02); - Result.UefiSecureBootEnabled = Response[SubblockPayloadOffset + 0x06] == 0x01; - Result.SecondaryHardwareKeyPresent = Response[SubblockPayloadOffset + 0x07] == 0x01; - break; - case 0x10: - SubblockVersion = Response[SubblockPayloadOffset]; // 0x01 - Result.SecureFfuSupportedProtocolMask = BigEndian.ToUInt16(Response, SubblockPayloadOffset + 0x01); - break; - case 0x1F: - Result.MmosOverUsbSupported = Response[SubblockPayloadOffset] == 1; - break; - case 0x20: - // CRC header info + case FlashAppType.FlashApp: + Result.FlashAppProtocolVersionMajor = Response[6]; + Result.FlashAppProtocolVersionMinor = Response[7]; + Result.FlashAppVersionMajor = Response[8]; + Result.FlashAppVersionMinor = Response[9]; break; } - SubblockOffset += SubblockLength + 3; + + byte SubblockCount = Response[10]; + int SubblockOffset = 11; + + for (int i = 0; i < SubblockCount; i++) + { + byte SubblockID = Response[SubblockOffset + 0x00]; + + LogFile.Log($"{Result.App} SubblockID: 0x{SubblockID:X}"); + + UInt16 SubblockLength = BigEndian.ToUInt16(Response, SubblockOffset + 0x01); + int SubblockPayloadOffset = SubblockOffset + 3; + byte SubblockVersion; + switch (SubblockID) + { + case 0x01: + Result.TransferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset); + break; + case 0x02: + Result.WriteBufferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset); + break; + case 0x03: + Result.EmmcSizeInSectors = BigEndian.ToUInt32(Response, SubblockPayloadOffset); + break; + case 0x04: + Result.SdCardSizeInSectors = BigEndian.ToUInt32(Response, SubblockPayloadOffset); + break; + case 0x05: + Result.PlatformID = ByteOperations.ReadAsciiString(Response, (uint)SubblockPayloadOffset, SubblockLength).Trim([' ', '\0']); + break; + case 0x0D: + Result.AsyncSupport = Response[SubblockPayloadOffset + 1] == 1; + break; + case 0x0F: + SubblockVersion = Response[SubblockPayloadOffset]; // 0x03 + Result.PlatformSecureBootEnabled = Response[SubblockPayloadOffset + 0x01] == 0x01; + Result.SecureFfuEnabled = Response[SubblockPayloadOffset + 0x02] == 0x01; + Result.JtagDisabled = Response[SubblockPayloadOffset + 0x03] == 0x01; + Result.RdcPresent = Response[SubblockPayloadOffset + 0x04] == 0x01; + Result.Authenticated = (Response[SubblockPayloadOffset + 0x05] == 0x01) || (Response[SubblockPayloadOffset + 0x05] == 0x02); + Result.UefiSecureBootEnabled = Response[SubblockPayloadOffset + 0x06] == 0x01; + Result.SecondaryHardwareKeyPresent = Response[SubblockPayloadOffset + 0x07] == 0x01; + break; + case 0x10: + SubblockVersion = Response[SubblockPayloadOffset]; // 0x01 + Result.SecureFfuSupportedProtocolMask = BigEndian.ToUInt16(Response, SubblockPayloadOffset + 0x01); + break; + case 0x1F: + Result.MmosOverUsbSupported = Response[SubblockPayloadOffset] == 1; + break; + case 0x20: + // CRC header info + break; + } + SubblockOffset += SubblockLength + 3; + } } + + Result.State = PhoneInfoState.Basic; } Result.IsBootloaderSecure = !(FlashAppInfo.Authenticated || FlashAppInfo.RdcPresent || !FlashAppInfo.SecureFfuEnabled); diff --git a/WPinternals/Models/UEFIApps/LumiaPhoneInfoAppModel.cs b/WPinternals/Models/UEFIApps/LumiaPhoneInfoAppModel.cs index 19a32af..d8356b3 100644 --- a/WPinternals/Models/UEFIApps/LumiaPhoneInfoAppModel.cs +++ b/WPinternals/Models/UEFIApps/LumiaPhoneInfoAppModel.cs @@ -172,43 +172,48 @@ namespace WPinternals LumiaPhoneInfoAppPhoneInfo Result = PhoneInfoAppInfo; - byte[] Request = new byte[4]; - ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature); - byte[] Response = ExecuteRawMethod(Request); - if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU")) + if (Result.State == PhoneInfoState.Empty) { - Result.App = (FlashAppType)Response[5]; - - switch (Result.App) + byte[] Request = new byte[4]; + ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature); + byte[] Response = ExecuteRawMethod(Request); + if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU")) { - case FlashAppType.PhoneInfoApp: - Result.PhoneInfoAppProtocolVersionMajor = Response[6]; - Result.PhoneInfoAppProtocolVersionMinor = Response[7]; - Result.PhoneInfoAppVersionMajor = Response[8]; - Result.PhoneInfoAppVersionMinor = Response[9]; - break; - } + Result.App = (FlashAppType)Response[5]; - byte SubblockCount = Response[10]; - int SubblockOffset = 11; - - for (int i = 0; i < SubblockCount; i++) - { - byte SubblockID = Response[SubblockOffset + 0x00]; - - LogFile.Log($"{Result.App} SubblockID: 0x{SubblockID:X}"); - - UInt16 SubblockLength = BigEndian.ToUInt16(Response, SubblockOffset + 0x01); - int SubblockPayloadOffset = SubblockOffset + 3; - byte SubblockVersion; - switch (SubblockID) + switch (Result.App) { - case 0x20: - // CRC header info + case FlashAppType.PhoneInfoApp: + Result.PhoneInfoAppProtocolVersionMajor = Response[6]; + Result.PhoneInfoAppProtocolVersionMinor = Response[7]; + Result.PhoneInfoAppVersionMajor = Response[8]; + Result.PhoneInfoAppVersionMinor = Response[9]; break; } - SubblockOffset += SubblockLength + 3; + + byte SubblockCount = Response[10]; + int SubblockOffset = 11; + + for (int i = 0; i < SubblockCount; i++) + { + byte SubblockID = Response[SubblockOffset + 0x00]; + + LogFile.Log($"{Result.App} SubblockID: 0x{SubblockID:X}"); + + UInt16 SubblockLength = BigEndian.ToUInt16(Response, SubblockOffset + 0x01); + int SubblockPayloadOffset = SubblockOffset + 3; + byte SubblockVersion; + switch (SubblockID) + { + case 0x20: + // CRC header info + break; + } + SubblockOffset += SubblockLength + 3; + } } + + Result.State = PhoneInfoState.Basic; } return Result;