From 7798dd1c34c0a3e622cc2445fbe747b69cb120d9 Mon Sep 17 00:00:00 2001 From: Gustave Monce Date: Fri, 11 Nov 2022 02:22:17 -0800 Subject: [PATCH] RKH: Fix an issue retrieving modern day RKH --- WPinternals/Models/QualcommPartition.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/WPinternals/Models/QualcommPartition.cs b/WPinternals/Models/QualcommPartition.cs index 9281ddb..ad87b59 100644 --- a/WPinternals/Models/QualcommPartition.cs +++ b/WPinternals/Models/QualcommPartition.cs @@ -109,6 +109,10 @@ namespace WPinternals { ImageOffset = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X00); } + else if (ByteOperations.ReadUInt32(Binary, ImageOffset + 0x04) > 0x03) + { + ImageOffset += 0xA8; + } else if (HeaderType == QualcommPartitionHeaderType.Short) { ImageOffset += 0x28; @@ -122,11 +126,20 @@ namespace WPinternals ImageSize = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X08); CodeSize = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X0C); SignatureAddress = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X10); + if (SignatureAddress == 0xFFFFFFFF) + { + SignatureAddress = ImageAddress + CodeSize; + } SignatureSize = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X14); SignatureOffset = SignatureAddress - ImageAddress + ImageOffset; CertificatesAddress = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X18); + if (CertificatesAddress == 0xFFFFFFFF) + { + CertificatesAddress = SignatureAddress + SignatureSize; + } CertificatesSize = ByteOperations.ReadUInt32(Binary, HeaderOffset + 0X1C); - CertificatesOffset = CertificatesAddress - ImageAddress + ImageOffset; + //CertificatesOffset = CertificatesAddress - ImageAddress + ImageOffset; + CertificatesOffset = ImageSize - CertificatesSize + ImageOffset; uint CurrentCertificateOffset = CertificatesOffset; uint CertificateSize = 0;