mirror of
https://github.com/ReneLergner/WPinternals.git
synced 2026-06-14 03:16:40 +10:00
fix: Merge issues from previous commit
This commit is contained in:
@@ -129,55 +129,60 @@ namespace WPinternals
|
|||||||
|
|
||||||
LumiaBootManagerPhoneInfo Result = BootManagerInfo;
|
LumiaBootManagerPhoneInfo Result = BootManagerInfo;
|
||||||
|
|
||||||
byte[] Request = new byte[4];
|
if (Result.State == PhoneInfoState.Empty)
|
||||||
ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature);
|
|
||||||
byte[] Response = ExecuteRawMethod(Request);
|
|
||||||
if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU"))
|
|
||||||
{
|
{
|
||||||
Result.App = (FlashAppType)Response[5];
|
byte[] Request = new byte[4];
|
||||||
|
ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature);
|
||||||
switch (Result.App)
|
byte[] Response = ExecuteRawMethod(Request);
|
||||||
|
if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU"))
|
||||||
{
|
{
|
||||||
case FlashAppType.BootManager:
|
Result.App = (FlashAppType)Response[5];
|
||||||
Result.BootManagerProtocolVersionMajor = Response[6];
|
|
||||||
Result.BootManagerProtocolVersionMinor = Response[7];
|
|
||||||
Result.BootManagerVersionMajor = Response[8];
|
|
||||||
Result.BootManagerVersionMinor = Response[9];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte SubblockCount = Response[10];
|
switch (Result.App)
|
||||||
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:
|
case FlashAppType.BootManager:
|
||||||
Result.TransferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset);
|
Result.BootManagerProtocolVersionMajor = Response[6];
|
||||||
break;
|
Result.BootManagerProtocolVersionMinor = Response[7];
|
||||||
case 0x04:
|
Result.BootManagerVersionMajor = Response[8];
|
||||||
Result.FlashAppProtocolVersionMajor = Response[SubblockPayloadOffset + 0x00];
|
Result.BootManagerVersionMinor = Response[9];
|
||||||
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;
|
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;
|
return Result;
|
||||||
|
|||||||
@@ -193,78 +193,83 @@ namespace WPinternals
|
|||||||
|
|
||||||
LumiaFlashAppPhoneInfo Result = FlashAppInfo;
|
LumiaFlashAppPhoneInfo Result = FlashAppInfo;
|
||||||
|
|
||||||
byte[] Request = new byte[4];
|
if (Result.State == PhoneInfoState.Empty)
|
||||||
ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature);
|
|
||||||
byte[] Response = ExecuteRawMethod(Request);
|
|
||||||
if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU"))
|
|
||||||
{
|
{
|
||||||
Result.App = (FlashAppType)Response[5];
|
byte[] Request = new byte[4];
|
||||||
|
ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature);
|
||||||
switch (Result.App)
|
byte[] Response = ExecuteRawMethod(Request);
|
||||||
|
if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU"))
|
||||||
{
|
{
|
||||||
case FlashAppType.FlashApp:
|
Result.App = (FlashAppType)Response[5];
|
||||||
Result.FlashAppProtocolVersionMajor = Response[6];
|
|
||||||
Result.FlashAppProtocolVersionMinor = Response[7];
|
|
||||||
Result.FlashAppVersionMajor = Response[8];
|
|
||||||
Result.FlashAppVersionMinor = Response[9];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte SubblockCount = Response[10];
|
switch (Result.App)
|
||||||
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:
|
case FlashAppType.FlashApp:
|
||||||
Result.TransferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset);
|
Result.FlashAppProtocolVersionMajor = Response[6];
|
||||||
break;
|
Result.FlashAppProtocolVersionMinor = Response[7];
|
||||||
case 0x02:
|
Result.FlashAppVersionMajor = Response[8];
|
||||||
Result.WriteBufferSize = BigEndian.ToUInt32(Response, SubblockPayloadOffset);
|
Result.FlashAppVersionMinor = Response[9];
|
||||||
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;
|
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);
|
Result.IsBootloaderSecure = !(FlashAppInfo.Authenticated || FlashAppInfo.RdcPresent || !FlashAppInfo.SecureFfuEnabled);
|
||||||
|
|||||||
@@ -172,43 +172,48 @@ namespace WPinternals
|
|||||||
|
|
||||||
LumiaPhoneInfoAppPhoneInfo Result = PhoneInfoAppInfo;
|
LumiaPhoneInfoAppPhoneInfo Result = PhoneInfoAppInfo;
|
||||||
|
|
||||||
byte[] Request = new byte[4];
|
if (Result.State == PhoneInfoState.Empty)
|
||||||
ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature);
|
|
||||||
byte[] Response = ExecuteRawMethod(Request);
|
|
||||||
if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU"))
|
|
||||||
{
|
{
|
||||||
Result.App = (FlashAppType)Response[5];
|
byte[] Request = new byte[4];
|
||||||
|
ByteOperations.WriteAsciiString(Request, 0, InfoQuerySignature);
|
||||||
switch (Result.App)
|
byte[] Response = ExecuteRawMethod(Request);
|
||||||
|
if ((Response != null) && (ByteOperations.ReadAsciiString(Response, 0, 4) != "NOKU"))
|
||||||
{
|
{
|
||||||
case FlashAppType.PhoneInfoApp:
|
Result.App = (FlashAppType)Response[5];
|
||||||
Result.PhoneInfoAppProtocolVersionMajor = Response[6];
|
|
||||||
Result.PhoneInfoAppProtocolVersionMinor = Response[7];
|
|
||||||
Result.PhoneInfoAppVersionMajor = Response[8];
|
|
||||||
Result.PhoneInfoAppVersionMinor = Response[9];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte SubblockCount = Response[10];
|
switch (Result.App)
|
||||||
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:
|
case FlashAppType.PhoneInfoApp:
|
||||||
// CRC header info
|
Result.PhoneInfoAppProtocolVersionMajor = Response[6];
|
||||||
|
Result.PhoneInfoAppProtocolVersionMinor = Response[7];
|
||||||
|
Result.PhoneInfoAppVersionMajor = Response[8];
|
||||||
|
Result.PhoneInfoAppVersionMinor = Response[9];
|
||||||
break;
|
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;
|
return Result;
|
||||||
|
|||||||
Reference in New Issue
Block a user