coderobe / VBiosFinder

Extract embedded VBIOS from (almost) any BIOS Update
GNU Affero General Public License v3.0
129 stars 21 forks source link

Support for raw firmware image? #12

Closed stzokev closed 5 years ago

stzokev commented 5 years ago

The MSI bioses seem to be really weird packaged, e.g. MSI WE62 Workstation https://www.msi.com/Workstation/support/WE62-7RJ#down-bios

How should one proceed in this case?

Thanks

coderobe commented 5 years ago

The firmware update at that link, E16J5IWS.316 (SHA256 6DE27B8E5DBA21B98B281ED485C6549CEBC837EC37312EDE1C64B54CFE39ED98), is a raw firmware image which can be flashed directly by any common chip flasher (Intel's FPT, for example)

This type of image can be extracted by VBiosFinder just fine provided you have UEFIExtract available (which is a hard dependency of VBiosFinder, as described in the README)

I'm gonna give this a try in a bit, but i don't see why it wouldn't work. It's certainly not really weirdly packaged - quite the opposite, this is good!

coderobe commented 5 years ago

Yeah no, works for me.

checking for innoextract... no
Install 'innoextract' on your system (required for Inno Installers)
checking for upx... no
Install 'upx' on your system (required for UPX executables)
checking for 7z... yes
trying to extract ./E16J5IWS.316
extracting uefi data
trying to extract ./E16J5IWS.316
found UEFIExtract archive
trying to extract ./mkmf.log
filtering for modules...
got 3351 modules
finding vbios
1 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!

However, this firmware image does not contain a vbios for a dedicated gpu (the one candidate, 8086:0406, is an Intel Integrated Graphics Processor). Are you sure your vbios is actually stored in the firmware instead of the card?

coderobe commented 5 years ago

This makes sense, as a workstation (your sample device) probably wouldn't be running such a setup. You can extract the vbios from the GPU directly using conventional methods.

stzokev commented 5 years ago

Agreed, conventional methods are fine if you have that model laptop. In my case I have a Zbook G2 (2nd gen) and bought a Quadro M2200 card that is shipped with Zbook G4 (4th gen). As HP whitelists their devices, I need either a card that came from that exact model Zbook and therefore has the exact vbios, or I need to flash the correct vbios. As Dell's laptop failure rate is much higher, in ebay most video cards are from Dell laptops, so I need to flash it, however I don't have Zbook G4. So conventional methods do not work for me and your tool comes to save the day.

stzokev commented 5 years ago

@coderobe It still does not work for me, doing this on MacOS:


output will be stored in '/Users/stefan.tsokev/Downloads/VBiosFinder-master/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./E16J5IWS.316
extracting uefi data
trying to extract ./E16J5IWS.316
trying to extract ./mkmf.log
filtering for modules...
got 0 modules
finding vbios
no candidates found :(
Cleaning up garbage
stzokev commented 5 years ago

nevermind, this works now on a windows 10 linux subsystem

coderobe commented 5 years ago

you still didn't have uefiextract, as i've mentioned in the first reply, this is required to extract any modules. if you then want PCI-ID classification of the found VBIOS you also need rom-parser.

congrats on getting it to work after all