mirror of
https://github.com/LongSoft/UEFITool.git
synced 2024-11-22 07:58:22 +08:00
parent
a2d7169a82
commit
b96772190a
@ -3453,19 +3453,24 @@ USTATUS FfsParser::checkProtectedRanges(const UModelIndex & index)
|
|||||||
&& bgProtectedRanges[i].Size != 0 && bgProtectedRanges[i].Size != 0xFFFFFFFF
|
&& bgProtectedRanges[i].Size != 0 && bgProtectedRanges[i].Size != 0xFFFFFFFF
|
||||||
&& bgProtectedRanges[i].Offset != 0 && bgProtectedRanges[i].Offset != 0xFFFFFFFF) {
|
&& bgProtectedRanges[i].Offset != 0 && bgProtectedRanges[i].Offset != 0xFFFFFFFF) {
|
||||||
|
|
||||||
bgProtectedRanges[i].Offset -= (UINT32)addressDiff;
|
if ((UINT64)bgProtectedRanges[i].Offset >= addressDiff) {
|
||||||
protectedParts = openedImage.mid(bgProtectedRanges[i].Offset, bgProtectedRanges[i].Size);
|
bgProtectedRanges[i].Offset -= (UINT32)addressDiff;
|
||||||
|
protectedParts = openedImage.mid(bgProtectedRanges[i].Offset, bgProtectedRanges[i].Size);
|
||||||
|
|
||||||
UByteArray digest(SHA256_DIGEST_SIZE, '\x00');
|
UByteArray digest(SHA256_DIGEST_SIZE, '\x00');
|
||||||
sha256(protectedParts.constData(), protectedParts.size(), digest.data());
|
sha256(protectedParts.constData(), protectedParts.size(), digest.data());
|
||||||
|
|
||||||
if (digest != bgProtectedRanges[i].Hash) {
|
if (digest != bgProtectedRanges[i].Hash) {
|
||||||
msg(usprintf("%s: AMI protected range [%Xh:%Xh] hash mismatch, opened image may refuse to boot", __FUNCTION__,
|
msg(usprintf("%s: AMI protected range [%Xh:%Xh] hash mismatch, opened image may refuse to boot", __FUNCTION__,
|
||||||
bgProtectedRanges[i].Offset, bgProtectedRanges[i].Offset + bgProtectedRanges[i].Size),
|
bgProtectedRanges[i].Offset, bgProtectedRanges[i].Offset + bgProtectedRanges[i].Size),
|
||||||
model->findByBase(bgProtectedRanges[i].Offset));
|
model->findByBase(bgProtectedRanges[i].Offset));
|
||||||
|
}
|
||||||
|
|
||||||
|
markProtectedRangeRecursive(index, bgProtectedRanges[i]);
|
||||||
|
} else {
|
||||||
|
// TODO: Explore this.
|
||||||
|
msg(usprintf("%s: Suspicious AMI new BG protection offset", __FUNCTION__), index);
|
||||||
}
|
}
|
||||||
|
|
||||||
markProtectedRangeRecursive(index, bgProtectedRanges[i]);
|
|
||||||
}
|
}
|
||||||
else if (bgProtectedRanges[i].Type == BG_PROTECTED_RANGE_VENDOR_HASH_PHOENIX
|
else if (bgProtectedRanges[i].Type == BG_PROTECTED_RANGE_VENDOR_HASH_PHOENIX
|
||||||
&& bgProtectedRanges[i].Size != 0 && bgProtectedRanges[i].Size != 0xFFFFFFFF
|
&& bgProtectedRanges[i].Size != 0 && bgProtectedRanges[i].Size != 0xFFFFFFFF
|
||||||
|
Loading…
Reference in New Issue
Block a user