From 5512da2e2a5fae20ad020105784217f08022d010 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Mon, 18 Apr 2022 19:45:37 -0300 Subject: [PATCH] Improve Intel bruteforcing even more --- bios_extract/src/bios_extract.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/bios_extract/src/bios_extract.c b/bios_extract/src/bios_extract.c index a5b99d1..10ff280 100644 --- a/bios_extract/src/bios_extract.c +++ b/bios_extract/src/bios_extract.c @@ -286,6 +286,7 @@ int main(int argc, char *argv[]) Offset2 = 1; for (Offset1 = 0; Offset1 < (FileLength - 10); Offset1 += 0x1000) { BIOSOffset = Offset1; + i = 1; retry: if (((fd = LH5Decode(BIOSImage + BIOSOffset, FileLength - BIOSOffset, IntelAMI, 13)) > -1) && (!memcmp(IntelAMI, "AMIBIOS(C)AMI", 13) || ((IntelAMI[0] == 0x55) && (IntelAMI[1] == 0xaa)))) { if (Offset2 == 1) { @@ -318,10 +319,28 @@ save: Buffer = MMapOutputFile((char *) IntelAMI, len); } munmap(Buffer, len); - } else if (!(BIOSOffset & 0xff)) { + + /* There may be compressed data after the main body. (Advanced/EV VBIOS) */ + if (fd > 0) { + if (fd & 1) /* padded to even byte */ + fd++; + BIOSOffset += fd; + i = 1; + goto retry; + } + } else if (i) { BIOSOffset += 0x44; /* skip "Copyright Notice: Copyright Intel..." */ + i = 0; goto retry; } else if ((fd > -1) && !memcmp(BIOSImage + Offset1, "Copyright Notice: Copyright Intel", 33)) { + BIOSOffset = Offset1; + + if (Offset2 == 1) { + printf("Found potential Intel AMIBIOS.\n"); + InitRemainder(BIOSImage, FileLength); + Offset2 = 86; /* magic exit code if no main body found */ + } + len = 65536; sprintf((char *) IntelAMI, "intelunk_%05X.rom", BIOSOffset); goto save;