Code Monkey home page Code Monkey logo

vbiosfinder's Introduction

VBiosFinder (linux)

This tool attempts to extract a VBIOS from a bios update
Laptops with NVIDIA Optimus graphics often have the dGPU VBIOS integrated in their system BIOS, this makes extracting the VBIOS a complicated process. Provided you have a BIOS Update for your laptop, this tool might be able to automagically extract all available VBIOS from it.

Dependencies

  • Ruby
  • bundler (a ruby gem)
  • UEFIExtract (note: UEFIExtract can be found in the branch new_engine)
  • rom-parser
  • p7zip (optional)
  • innoextract (optional)
  • upx (optional)

Note

Some dependencies might not offer a package for your linux distribution (like UEFIDump and rom-parser). The binaries can be placed in ./3rdparty to avoid having to install them.

Usage

  • Run bundle install --path=vendor/bundle to install the required ruby modules (once)
  • Run ./vbiosfinder extract /path/to/bios_update.exe to attempt an extraction
  • A temporary working dir is created at ./tmp-vbiosfinder which can be removed inbetween runs
  • Extracted VBIOS roms will be placed in ./output

Compatibility (non-exhaustive)

Troubleshooting

Q: There are no files in ./output after running the tool!
A: It's very possible that VBiosFinder can't extract your type of BIOS update right now. Feel free to open an issue with a link to your bios update and the program output you get!

TODO

  • Add option to extract the bios of the running system (can we?)
  • Clean up temporary working dir after finishing up done
  • Test with more BIOS updates

Licensing

This project, initially authored by Robin Broda, is licensed under the GNU Affero General Public License v3
A copy of the license is available in LICENSE.txt

vbiosfinder's People

Contributors

coderobe avatar kronthto avatar pey-crypto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

vbiosfinder's Issues

Successful report: Lenovo S5 2nd Gen (20JAA009HH)

BIOS successfully extracted from BIOS Update Utility v1.13 dated 03.11.2017

$ ./vbiosfinder extract /tmp/r0muj09w.exe
output will be stored in '/usr/local/src/VBiosFinder-master/tmp-vbiosfinder'
checking for ruby... yes

trying to extract ./r0muj09w.exe
checking for innoextract... yes
found innoextract archive
Extracting "ThinkPad BIOS Update Utility" - setup data version 5.5.7

  • "app/406E1.PAT" (79 KiB)
  • "app/406E2.PAT" (84 KiB)
  • "app/406E3.PAT" (89 KiB)
  • "app/BCP.evs" (160 B)
  • "app/BIOS_LOGO.TXT" (2.21 KiB)
  • "app/bootx64.efi" (1.38 MiB)
  • "app/chklogo.exe" (3.5 KiB)
  • "app/chklogo.exe.config" (239 B)
  • "app/DosFlash.exe" (465 KiB)
  • "app/Instruction US - BIOS flash USB memory key.txt" (1.63 KiB)
  • "app/mkusbkey.bat" (1.34 KiB)
  • "app/SHELLFLASH.EFI" (22.8 KiB)
  • "app/WinFlash32.exe" (411 KiB)
  • "app/WinFlash32s.exe" (411 KiB)
  • "app/WinFlash64.exe" (397 KiB)
  • "app/WinFlash64s.exe" (397 KiB)
  • "app/wininfo.exe" (80.5 KiB)
  • "app/wininfo64.exe" (89 KiB)
  • "app/winuptp.exe" (3.31 MiB)
  • "app/winuptp64.exe" (4.66 MiB)
  • "app/32bit/tpnflhlp.sys" (25.8 KiB)
  • "app/64bit/tpnflhlp.sys" (25.8 KiB)
  • "app/R0MET36W/$0AR0M00.FL1" (6.97 MiB)
    Done
    ...
    trying to extract ./app/R0MET36W/$0AR0M00.FL1
    checking for innoextract... yes
    not extractable with innoextract
    checking for upx... yes
    not extractable with upx
    checking for 7z... yes
    not extractable with 7z
    checking for UEFIDump... yes
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parseVolumeHeader: unaligned volume
    parsePadFileBody: non-UEFI data found in pad-file
    found UEFI image
    extracted. filtering modules...
    got 4266 modules
    finding vbios
    4 possible candidates
    checking for rom-parser... yes
    Found VBIOS for device 10de:1c8c!
    Found VBIOS for device 8086:0406!
    Found VBIOS for device 10de:139b!
    Found VBIOS for device 10de:1c8e!
    Job done. Extracted files can be found in /usr/local/src/VBiosFinder-master/tmp-vbiosfinder/../output
    Cleaning up garbage

VBIOS files extracted for further verification

OS: Debian Stretch
ID of the onboard GeForce 1050 Ti is 10de:1c8c
Official Packages: build-essential cmake ruby innoextract upx-ucl
Self build: rom-parser, UEFIDump (move to /usr/local/bin after built)

Workaround for cannot open output file UEFIDump: Is a directory when building UEFIDump

HP pavilion power 15 cb006ng

Hello. Trying to extract vbio for gpu passthrough (Error 43).
Arch based system
My laptop https://support.hp.com/my-en/drivers/selfservice/hp-pavilion-power-15-cb000-laptop-pc/15551388/model/17104409

Bios: https://ftp.hp.com/pub/softpaq/sp96501-97000/sp96680.exe
Dependencies installed.
VBiosFinder
├── 3rdparty
│   ├── rom-parser
│   └── UEFIExtract
├── Gemfile
├── Gemfile.lock
├── _init.rb
├── LICENSE.txt
├── output
├── README.md
├── sp96680.exe
├── src
│   ├── cli.rb
│   ├── extract-7z.rb
│   ├── extract-innosetup.rb
│   ├── extraction.rb
│   ├── extract-polyglot.rb
│   ├── extract-uefi.rb
│   ├── extract-upx.rb
│   ├── extract-zlib.rb
│   ├── methods.rb
│   └── utils.rb
├── vbiosfinder
└── vendor
└── bundle

Get output...
~/.../roms/VBiosFinder >>> ./vbiosfinder extract /home/user/vm/roms/VBiosFinder/sp96680.exe ±[●][master]
output will be stored in '/home/user/vm/roms/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./sp96680.exe
found zlib archive
wrong guess :(
extracting uefi data
trying to extract ./mkmf.log
found UEFIExtract archive
trying to extract ./sp96680.exe
found UEFIExtract archive
filtering for modules...
got 2 modules
finding vbios
no candidates found :(
input contains uefi data but no vbios could be found
the vbios might not be baked into the input!
Cleaning up garbage

What is "wrong guess :(" ? Thank you

command not found error trying to read an Acer BIOS

upx: ./A4DBH119.exe: IOException: upx-./A4DBH119.exe: No such file or directory
found 7z archive
trying to extract ./Ding.wav
trying to extract ./FWUpdLcl.exe
trying to extract ./FlsHook.exe
trying to extract ./FlsHookDll.dll
trying to extract ./H2OFFT-W.exe
trying to extract ./Vpro.fd
trying to extract ./iscflash.dll
trying to extract ./iscflash.sys
trying to extract ./iscflashx64.sys
trying to extract ./platform.ini
trying to extract ./xerces-c_2_7.dll
extracting uefi data
trying to extract ./A4DBH119.exe
Cleaning up garbage
Traceback (most recent call last):
        12: from _init.rb:7:in `<main>'
        11: from /home/exodist/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
        10: from /home/exodist/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
         9: from /home/exodist/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
         8: from /home/exodist/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
         7: from /home/exodist/VBiosFinder/src/cli.rb:36:in `extract'
         6: from /home/exodist/VBiosFinder/src/methods.rb:43:in `run'
         5: from /home/exodist/VBiosFinder/src/methods.rb:43:in `each'
         4: from /home/exodist/VBiosFinder/src/methods.rb:45:in `block in run'
         3: from /home/exodist/VBiosFinder/src/extraction.rb:8:in `attempt'
         2: from /home/exodist/VBiosFinder/src/extraction.rb:8:in `call'
         1: from /home/exodist/VBiosFinder/src/extract-uefi.rb:20:in `uefi'
/home/exodist/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/cocaine-0.5.8/lib/cocaine/command_line.rb:82:in `run': Cocaine::CommandNotFoundError (Cocaine::CommandNotFoundError)

Works on T530 with pull request #33

output will be stored in '/home/zacc/src/VBiosFinder-patch/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... no
Install 'innoextract' on your system (required for Inno Installers)
checking for upx... yes
checking for 7z... yes
trying to extract ./g4uj41us.iso
extracting uefi data
trying to extract ./g4uj41us.iso
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 6204 modules
finding vbios
4 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0106!
Found VBIOS for device 10de:1057!
Found VBIOS for device 10de:0dfe!
Found VBIOS for device 10de:0def!
Job done. Extracted files can be found in /home/zacc/src/VBiosFinder-patch/tmp-vbiosfinder/../output
Cleaning up garbage

8086:0166 worked for cpu and 10de:0def worked for gpu. Thank you
(required #33)

Bad error messages when dependencies are missing

If I don't have innoextract I get the
/var/lib/gems/2.3.0/gems/cocaine-0.5.8/lib/cocaine/command_line.rb:82:in `run': Cocaine::CommandNotFoundError (Cocaine::CommandNotFoundError)

which others have reported before. So apparently it is not optional as indicated in the instructions. Or if it is optional in some cases, a clarification might be needed.

Great tool otherwise! Thanks for your hard work!

Duplicate files should not overwrite existing files

When saving files, append _{NUM} to the filename before the file extension where NUM is the number of the duplicate

e.g.: vbios_dead:beef.bin should become vbios_dead:beef_2.bin when the former already exists in the path, and 3 when the latter exists, and so on

Relevant issues:
#27
#22
#20

techpowerup rom file

i try to extract the bios from this https://www.techpowerup.com/vgabios/208785/gigabyte-gtx1660ti-6144-190113. but it get:

[root@game]: /opt/sources/VBiosFinder># ./vbiosfinder extract /opt/vm/bios/vga/Gigabyte.GTX1660Ti.6144.190113_2.rom
output will be stored in '/opt/sources/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./Gigabyte.GTX1660Ti.6144.190113_2.rom
extracting uefi data
trying to extract ./Gigabyte.GTX1660Ti.6144.190113_2.rom
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 2 modules
finding vbios
no candidates found :(
input contains uefi data but no vbios could be found
the vbios might not be baked into the input!
Cleaning up garbage

Instead please use `bundle config set --local path 'vendor/bundle'`, and stop using this flag

bundle install --path=vendor/bundle
[DEPRECATED] The --path flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use bundle config set --local path 'vendor/bundle', and stop using this flag
Could not locate Gemfile

bundle install --local path 'vendor/bundle'
ERROR: "bundle install" was called with arguments ["path", "vendor/bundle"]
Usage: "bundle install [OPTIONS]"

how to fix? thx

Zbook not supported?

Hi,

I tried to extract the VBIOS from Zbook G5.
I get the following output:

`hp@HP:/mnt/c/Users/hp/Desktop/VBiosFinder$ ./vbiosfinder extract /mnt/c/Users/hp/Desktop/VBiosFinder/Q70_010700.bin
output will be stored in '/mnt/c/Users/hp/Desktop/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./Q70_010700.bin
extracting uefi data
trying to extract ./Q70_010700.bin
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 3034 modules
finding vbios
no candidates found :(
input contains uefi data but no vbios could be found
the vbios might not be baked into the input!
Cleaning up garbage
Traceback (most recent call last):
1: from /mnt/c/Users/hp/Desktop/VBiosFinder/src/cli.rb:27:in block in extract' /usr/lib/ruby/2.5.0/fileutils.rb:629:in remove_entry_secure': parent directory is world writable, FileUtils#remove_entry_secure does not work; abort: "/mnt/c/Users/hp/Desktop/VBiosFinder/tmp-vbiosfinder" (parent directory mode 40777) (ArgumentError)`

I got the image from here: https://ftp.hp.com/pub/softpaq/sp95501-96000/sp95877.exe

vbioses used to be there on these laptops, maybe using tool wrong way?

Works on Acer Nitro AN515-52

Thanks for this tool!

Using this on the Asus BIOS image is a bit tricky since you have to pull a few punches to get the actual Efi image first:

  • Download the efi update from https://www.acer.com/ac/de/DE/content/support-product/7572
  • extract the .exe using 7Zip
  • You will find files ending in .fd. These contain the efi. IDK why there are two
  • run binwalk -dd ".*" on both
  • binwalk will find another "Microsoft executable, portable (PE)" around ~0x5300
  • that is the actual file you need to pass to VBiosFinder

Output:

$ ./vbiosfinder extract $(pwd)/53d8_f0.exe
output will be stored in '/mnt/workfs/johannes/randomstuff/bios/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

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 ./53d8_f0.exe
extracting uefi data
trying to extract ./53d8_f0.exe
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 4537 modules
finding vbios
7 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!
Found VBIOS for device 8086:0406!
Found VBIOS for device 8086:0406!
Found VBIOS for device 10de:1c8c!
Found VBIOS for device 10de:1c8d!
Found VBIOS for device 10de:1c20!
Found VBIOS for device 10de:1c20!
Job done. Extracted files can be found in /mnt/workfs/johannes/randomstuff/bios/VBiosFinder/tmp-vbiosfinder/../output

I extracted both BIOSes found in the update, the files are identical.
Also issue #20 is present here.

Custom saving needs improvement

Whenever it cannot determine vbios type, it seems to only take into consideration the name of the image for the saved file. I've hit a case when there are multiple instances of the same name, so I end up with a single file e.g.:

can't determine vbios type of body.bin, saving as 'vbios_unknown_body.bin'
can't determine vbios type of body.bin, saving as 'vbios_unknown_body.bin'
can't determine vbios type of body.bin, saving as 'vbios_unknown_body.bin'
can't determine vbios type of body.bin, saving as 'vbios_unknown_body.bin'

Maybe a random UUID should be used for the file name? You can reproduce this with Zbook 17 G2 bios.

Lenovo Y50-70 FullHD gtx960m 4GB works.

FYI!

Lenovo Y50-70 Fullhd, no touch, GTX960m 4G, extract log if needed.

Fedora 34, needed the extra packages from repo:
# dnf install ruby ruby-devel p7zip p7zip-plugins upx innoextract cmake

Extra stuff compiled under 3rd-party dir: rom-parser, UEFIExtract (new_engine brach)
git clone https://github.com/LongSoft/UEFITool --branch=new_engine
git clone https://github.com/awilliam/rom-parser

Needed to update bundler gem:
$ gem install bundler:1.17.3

Actual run:

VBiosFinder]$ ./vbiosfinder extract 9ecn43ww.exe 
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:29: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:29: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/user/.local/share/gem/ruby/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
output will be stored in '/home/user/Downloads/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./9ecn43ww.exe
found innoextract archive
Extracting "Lenovo BIOS Update Utility" - setup data version 5.5.0 (unicode)
 - "app/9ECN43WW.exe" - overwritten
 - "app/9ECN43WW.exe"
Done.
trying to extract ./app/9ECN43WW.exe
found 7z archive
trying to extract ./Ding.wav
trying to extract ./FWUpdLcl.exe
trying to extract ./FlsHook.exe
trying to extract ./FlsHookDll.dll
trying to extract ./InsydeFlash.exe
trying to extract ./WinZIVY2X64_8M.rom
trying to extract ./iscflash.dll
trying to extract ./iscflash.sys
trying to extract ./iscflashx64.sys
trying to extract ./platform.ini
trying to extract ./xerces-c_2_7.dll
extracting uefi data
trying to extract ./9ecn43ww.exe
found UEFIExtract archive
trying to extract ./Ding.wav
found UEFIExtract archive
trying to extract ./FWUpdLcl.exe
found UEFIExtract archive
trying to extract ./FlsHook.exe
found UEFIExtract archive
trying to extract ./FlsHookDll.dll
found UEFIExtract archive
trying to extract ./InsydeFlash.exe
found UEFIExtract archive
trying to extract ./WinZIVY2X64_8M.rom
found UEFIExtract archive
trying to extract ./app/9ECN43WW.exe
found UEFIExtract archive
trying to extract ./iscflash.dll
found UEFIExtract archive
trying to extract ./iscflash.sys
found UEFIExtract archive
trying to extract ./iscflashx64.sys
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
trying to extract ./platform.ini
found UEFIExtract archive
trying to extract ./xerces-c_2_7.dll
found UEFIExtract archive
filtering for modules...
got 3076 modules
finding vbios
4 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!
Found VBIOS for device 10de:13af!
Found VBIOS for device 10de:1392!
Found VBIOS for device 10de:139b!
Job done. Extracted files can be found in /home/user/Downloads/VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

[user@notebook VBiosFinder]$ cd output/
[user@notebook output]$ ll
total 5308
-rwxrwxr-x. 1 user user 5047976 Mar  5 13:33 bios_9ecn43ww.exe
-rw-rw-r--. 1 user user  103936 Mar  5 13:33 vbios_10de_1392_1.rom
-rw-rw-r--. 1 user user  103936 Mar  5 13:33 vbios_10de_139b_1.rom
-rw-rw-r--. 1 user user  104448 Mar  5 13:33 vbios_10de_13af_1.rom
-rw-rw-r--. 1 user user   65536 Mar  5 13:33 vbios_8086_0406_1.rom

And a very big thank you for this work!

Terrapin Command not found error

Hi, when i try to run the scrip it gives me /usr/lib/ruby/gems/2.7.0/gems/terrapin-0.6.0/lib/terrapin/command_line.rb:82:in `run': Terrapin::CommandNotFoundError (Terrapin::CommandNotFoundError), i'm on void and i installed all of the dependencies.

extract-zlib.rb:8:in `inflate': incorrect header check (Zlib::DataError)

I am trying to use the script to extract the vbios of this https://pcsupport.lenovo.com/be/en/products/laptops-and-netbooks/yoga-series/yoga-720-15ikb/downloads/ds120623

However the script craches, here is the output

output will be stored in '/home/eizanprime/AUR/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./bioslenovo.exe
found zlib archive
Cleaning up garbage
Traceback (most recent call last):
        19: from _init.rb:7:in `<main>'
        18: from /home/eizanprime/AUR/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
        17: from /home/eizanprime/AUR/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
        16: from /home/eizanprime/AUR/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
        15: from /home/eizanprime/AUR/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
        14: from /home/eizanprime/AUR/VBiosFinder/src/cli.rb:36:in `extract'
        13: from /home/eizanprime/AUR/VBiosFinder/src/methods.rb:36:in `run'
        12: from /home/eizanprime/AUR/VBiosFinder/src/methods.rb:36:in `each'
        11: from /home/eizanprime/AUR/VBiosFinder/src/methods.rb:37:in `block in run'
        10: from /home/eizanprime/AUR/VBiosFinder/src/methods.rb:24:in `extract'
         9: from /home/eizanprime/AUR/VBiosFinder/src/methods.rb:24:in `each'
         8: from /home/eizanprime/AUR/VBiosFinder/src/methods.rb:24:in `block in extract'
         7: from /home/eizanprime/AUR/VBiosFinder/src/extraction.rb:10:in `attempt'
         6: from /home/eizanprime/AUR/VBiosFinder/src/extraction.rb:10:in `call'
         5: from /home/eizanprime/AUR/VBiosFinder/src/extract-zlib.rb:6:in `zlib'
         4: from /home/eizanprime/AUR/VBiosFinder/src/extract-zlib.rb:6:in `open'
         3: from /home/eizanprime/AUR/VBiosFinder/src/extract-zlib.rb:7:in `block in zlib'
         2: from /home/eizanprime/AUR/VBiosFinder/src/extract-zlib.rb:7:in `open'
         1: from /home/eizanprime/AUR/VBiosFinder/src/extract-zlib.rb:8:in `block (2 levels) in zlib'
/home/eizanprime/AUR/VBiosFinder/src/extract-zlib.rb:8:in `inflate': incorrect header check (Zlib::DataError)

Thank you very much for your help !

Report: T430 successful, but invalid PCI ID found(?)

Great software, thank you!

The specified integrated graphics on a T430 is the Intel HD Graphics 4000 (PCI ID: 8086:0166) yet the VBIOS found is for Intel HD Graphics (8086:0106).

Tested using the vbios_8086_0106.rom with PCI ID 8086:0166 which worked.

BIOS update link:
https://download.lenovo.com/pccbbs/mobiles/g1uj48us.iso

Program output:

output will be stored in '/home/usr/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./g1uj48us.exe
found innoextract archive
Extracting "version 2.81-1.13 (G1ETC1WW-G1HT35WW)" - setup data version 5.4.2

  • "app/WINUPTP.EXE" - overwritten
  • "app/WINUPTP.EXE"
  • "app/206A7.PAT"
  • "app/306A4.PAT"
  • "app/306A5.PAT"
  • "app/306A6.PAT"
  • "app/306A8.PAT"
  • "app/306A9.PAT"
  • "app/BCP.evs"
  • "app/BIOS_LOGO.TXT"
  • "app/chklogo.exe"
  • "app/chklogo.exe.config"
  • "app/WinFlash32.exe"
  • "app/WinFlash32s.exe"
  • "app/WinFlash64.exe"
  • "app/WinFlash64s.exe"
  • "app/wininfo.exe"
  • "app/32bit/tpnflhlp.sys"
  • "app/64bit/tpnflhlp.sys"
  • "app/G1ETC1WW/$01D2000.FL1"
  • "app/G1ETC1WW/$01D2000.FL2"
  • "app/G1ETC1WW/206a7.HSH"
  • "app/G1ETC1WW/306a4.HSH"
  • "app/G1ETC1WW/306a5.HSH"
  • "app/G1ETC1WW/306a6.HSH"
  • "app/G1ETC1WW/306a8.HSH"
  • "app/G1ETC1WW/306a9.HSH"
    Done.
    trying to extract ./app/206A7.PAT
    trying to extract ./app/306A4.PAT
    trying to extract ./app/306A5.PAT
    trying to extract ./app/306A6.PAT
    trying to extract ./app/306A8.PAT
    trying to extract ./app/306A9.PAT
    trying to extract ./app/32bit/tpnflhlp.sys
    trying to extract ./app/64bit/tpnflhlp.sys
    trying to extract ./app/BCP.evs
    trying to extract ./app/BIOS_LOGO.TXT
    trying to extract ./app/G1ETC1WW/$01D2000.FL1
    trying to extract ./app/G1ETC1WW/$01D2000.FL2
    trying to extract ./app/G1ETC1WW/206a7.HSH
    trying to extract ./app/G1ETC1WW/306a4.HSH
    trying to extract ./app/G1ETC1WW/306a5.HSH
    trying to extract ./app/G1ETC1WW/306a6.HSH
    trying to extract ./app/G1ETC1WW/306a8.HSH
    trying to extract ./app/G1ETC1WW/306a9.HSH
    trying to extract ./app/WINUPTP.EXE
    trying to extract ./app/WinFlash32.exe
    trying to extract ./app/WinFlash32s.exe
    trying to extract ./app/WinFlash64.exe
    trying to extract ./app/WinFlash64s.exe
    trying to extract ./app/chklogo.exe
    trying to extract ./app/chklogo.exe.config
    trying to extract ./app/wininfo.exe
    extracting uefi data
    trying to extract ./app/206A7.PAT
    found UEFIExtract archive
    trying to extract ./app/306A4.PAT
    found UEFIExtract archive
    trying to extract ./app/306A5.PAT
    found UEFIExtract archive
    trying to extract ./app/306A6.PAT
    found UEFIExtract archive
    trying to extract ./app/306A8.PAT
    found UEFIExtract archive
    trying to extract ./app/306A9.PAT
    found UEFIExtract archive
    trying to extract ./app/32bit/tpnflhlp.sys
    found UEFIExtract archive
    trying to extract ./app/64bit/tpnflhlp.sys
    found UEFIExtract archive
    trying to extract ./app/BCP.evs
    found UEFIExtract archive
    trying to extract ./app/BIOS_LOGO.TXT
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/$01D2000.FL1
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/$01D2000.FL2
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/206a7.HSH
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/306a4.HSH
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/306a5.HSH
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/306a6.HSH
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/306a8.HSH
    found UEFIExtract archive
    trying to extract ./app/G1ETC1WW/306a9.HSH
    found UEFIExtract archive
    trying to extract ./app/WINUPTP.EXE
    found UEFIExtract archive
    trying to extract ./app/WinFlash32.exe
    found UEFIExtract archive
    trying to extract ./app/WinFlash32s.exe
    found UEFIExtract archive
    trying to extract ./app/WinFlash64.exe
    found UEFIExtract archive
    trying to extract ./app/WinFlash64s.exe
    found UEFIExtract archive
    trying to extract ./app/chklogo.exe
    found UEFIExtract archive
    trying to extract ./app/chklogo.exe.config
    found UEFIExtract archive
    trying to extract ./app/wininfo.exe
    found UEFIExtract archive
    trying to extract ./g1uj48us.exe
    found UEFIExtract archive
    trying to extract ./mkmf.log
    found UEFIExtract archive
    filtering for modules...
    got 10535 modules
    finding vbios
    8 possible candidates
    checking for rom-parser... yes
    Found VBIOS for device 8086:0106!
    Found VBIOS for device 10de:1057!
    Found VBIOS for device 10de:0dfe!
    Found VBIOS for device 10de:0def!
    Found VBIOS for device 8086:0106!
    Found VBIOS for device 10de:1057!
    Found VBIOS for device 10de:0dfe!
    Found VBIOS for device 10de:0def!
    Job done. Extracted files can be found in /home/usr/VBiosFinder/tmp-vbiosfinder/../output
    Cleaning up garbage

error to install

```/usr/local/bundle/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:272:in search_up': undefined method untaint' for "/data/VBiosFinder":String (NoMethodError)

  current  = File.expand_path(SharedHelpers.pwd).untaint
                                                ^^^^^^^^
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:259:in `find_file'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:251:in `find_gemfile'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:27:in `root'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler.rb:234:in `root'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler.rb:244:in `app_config_path'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler.rb:273:in `settings'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/feature_flag.rb:21:in `block in settings_method'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/cli.rb:97:in `<class:CLI>'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/cli.rb:7:in `<module:Bundler>'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/cli.rb:6:in `<top (required)>'
    from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from /usr/local/bundle/gems/bundler-1.17.3/exe/bundle:23:in `block in <top (required)>'
    from /usr/local/bundle/gems/bundler-1.17.3/lib/bundler/friendly_errors.rb:124:in `with_friendly_errors'
    from /usr/local/bundle/gems/bundler-1.17.3/exe/bundle:22:in `<top (required)>'
    from /usr/local/bin/bundle:25:in `load'
    from /usr/local/bin/bundle:25:in `<main>'```

Works on P53

This tool helped me allot on my P53. Successfully extracted vBIOS with it. You can add it to the list.
Thanks allot for this great tool!

Latitude E5570 Precision not supported

downloaded BIOS update from here

> ./vbiosfinder extract Latitude_E5x70_Precision_3510_1.19.3.exe

output will be stored in '/home/jamie/git/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

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... no
Install '7z' on your system (required for 7z (self-extracting) archives)
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe
found polyglot archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot
found polyglot archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot
found polyglot archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot-polyglot
found zlib archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot-polyglot-zlib
found polyglot archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot-polyglot-zlib-polyglot
extracting uefi data
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe
found UEFIExtract archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot
found UEFIExtract archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot
found UEFIExtract archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot-polyglot
found UEFIExtract archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot-polyglot-zlib
found UEFIExtract archive
trying to extract ./Latitude_E5x70_Precision_3510_1.19.3.exe-polyglot-polyglot-polyglot-zlib-polyglot
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 504 modules
finding vbios
no candidates found :(
input contains uefi data but no vbios could be found
the vbios might not be baked into the input!
Cleaning up garbage

Works on Asus F541UJ laptop

I had too much trouble extracting the vbios of the Nvidia Geforce 920M in my Asus F541UJ laptop (which is from late-2016 or early-2017). However, when I found VBiosFinder, I tried running it with a BIOS update from 2019, which extracted the vbios... and it works! I could hardcode the vbios inside edk2, and GPU passthrough is working alongside the Intel iGPU thanks to GVT-d. So I thought it could be interesting to put my laptop model in the compatibility list. Thanks for making this tool!

Terrapin

Hello,

Unsure what i'm doing wrong here

./vbiosfinder extract '/home/phill/E1771IMS.70G'
output will be stored in '/home/phill/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./E1771IMS.70G
extracting uefi data
trying to extract ./E1771IMS.70G
Cleaning up garbage
Traceback (most recent call last):
12: from _init.rb:7:in <main>' 11: from /home/phill/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/base.rb:466:in start'
10: from /home/phill/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor.rb:387:in dispatch' 9: from /home/phill/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in invoke_command'
8: from /home/phill/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/command.rb:27:in run' 7: from /home/phill/VBiosFinder/src/cli.rb:36:in extract'
6: from /home/phill/VBiosFinder/src/methods.rb:43:in run' 5: from /home/phill/VBiosFinder/src/methods.rb:43:in each'
4: from /home/phill/VBiosFinder/src/methods.rb:45:in block in run' 3: from /home/phill/VBiosFinder/src/extraction.rb:8:in attempt'
2: from /home/phill/VBiosFinder/src/extraction.rb:8:in call' 1: from /home/phill/VBiosFinder/src/extract-uefi.rb:20:in uefi'
/home/phill/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/terrapin-0.6.0/lib/terrapin/command_line.rb:82:in `run': Terrapin::CommandNotFoundError (Terrapin::CommandNotFoundError)

Works on ASUS N580GD

Thanks for the software!

ASUS N580GD
Debian Buster

./vbiosfinder extract /usr/local/src/VBiosFinder/X580GD-AS.313

output will be stored in '/usr/local/src/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./X580GD-AS.313
extracting uefi data
trying to extract ./X580GD-AS.313
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 4041 modules
finding vbios
2 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!
Found VBIOS for device 10de:1c8d!
Job done. Extracted files can be found in /usr/local/src/VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

The file is 169472 bytes

Bios can be found here
https://dlcdnets.asus.com/pub/ASUS/nb/X580GD/X580GDAS313.zip
Unzip first

A simple way to do it:

UEFIExtract X580GD-AS.313 dump
cp "$(grep -lr GP107 X580GD-AS.313.dump)" vbios.rom
rm -r X580GD-AS.313 dump

Stuck on extract vbios

The program stuck on extract files.

output will be stored in '/home/xiaojiuwo/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./BIOS-4KCN45WW.exe
found innoextract archive
Extracting "Lenovo BIOS Update Utility" - setup data version 5.5.7
 - "app/0KCN36WW.exe" - overwritten
 - "app/0KCN36WW.exe"
 - "app/0KCN32WW.exe"
 - "app/0KCN33WW.exe"
 - "app/0KCN34WW.exe"
 - "app/0KCN35WW.exe"
Done.
trying to extract ./app/0KCN32WW.exe
found 7z archive
trying to extract ./app/0KCN33WW.exe
found 7z archive

My computer is Lenovo-Rescuer-15ISK
BIOS update exe link https://driverdl.lenovo.com.cn/lenovo/DriverFilesUploadFloder/50203/BIOS[0KCN36WW].exe

Cocaine::CommandNotFoundError

Crashed with the following output:

[mauch@M80 VBiosFinder]$ ./vbiosfinder extract /home/mauch/mx150rom/n22uj05w.exe
output will be stored in '/home/mauch/mx150rom/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

trying to extract ./n22uj05w.exe
checking for innoextract... yes
Cleaning up garbage
Traceback (most recent call last):
12: from _init.rb:7:in `<main>'
11: from /home/mauch/mx150rom/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
10: from /home/mauch/mx150rom/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
9: from /home/mauch/mx150rom/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
8: from /home/mauch/mx150rom/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
7: from /home/mauch/mx150rom/VBiosFinder/src/cli.rb:32:in `extract'
6: from /home/mauch/mx150rom/VBiosFinder/src/methods.rb:20:in `run'
5: from /home/mauch/mx150rom/VBiosFinder/src/methods.rb:20:in `each'
4: from /home/mauch/mx150rom/VBiosFinder/src/methods.rb:20:in `block in run'
3: from /home/mauch/mx150rom/VBiosFinder/src/extraction.rb:8:in `attempt'
2: from /home/mauch/mx150rom/VBiosFinder/src/extraction.rb:8:in `call'
1: from /home/mauch/mx150rom/VBiosFinder/src/extract-innosetup.rb:19:in `innosetup'
/home/mauch/mx150rom/VBiosFinder/vendor/bundle/ruby/2.5.0/gems/cocaine-0.5.8/lib/cocaine/command_line.rb:82:in `run': Cocaine::CommandNotFoundError (Cocaine::CommandNotFoundError)
  • Arch Linux x86_64
  • ruby 2.5.1p57
  • rom-fixer, rom-parser, UEFITool placed in ./3rdparty
  • Lenovo Thinkpad T480s (NVIDIA MX150)
  • BIOS Update 1.12 (n22uj05w.exe)

solution for Terrapin::CommandNotFoundError (Terrapin::CommandNotFoundError)

the name of tool UEFIExtract needs to be case-sensitive!

i was using arch linux with uefitool.. but i always run into this error:

.../VBiosFinder/vendor/bundle/ruby/3.0.0/gems/terrapin-0.6.0/lib/terrapin/command_line.rb:82:in `run': Terrapin::CommandNotFoundError (Terrapin::CommandNotFoundError)
	from /home/demlak/lala/VBiosFinder/src/extract-uefi.rb:20:in `uefi'
	from /home/demlak/lala/VBiosFinder/src/extraction.rb:8:in `call'
	from /home/demlak/lala/VBiosFinder/src/extraction.rb:8:in `attempt'
	from /home/demlak/lala/VBiosFinder/src/methods.rb:46:in `block in run'
	from /home/demlak/lala/VBiosFinder/src/methods.rb:44:in `each'
	from /home/demlak/lala/VBiosFinder/src/methods.rb:44:in `run'
	from /home/demlak/lala/VBiosFinder/src/cli.rb:36:in `extract'
	from /home/demlak/lala/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
	from /home/demlak/lala/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
	from /home/demlak/lala/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
	from /home/demlak/lala/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
	from _init.rb:7:in `<main>'

solution: copy /usr/bin/uefiextract to folder 3rdparty and rename it to UEFIExtract

and yes.. /usr/bin is in path
and no, it's not working by just copy into 3rdparty, you HAVE TO rename it.

p.s. thx for creating this tool..

Seems to have worked on the Lenovo Ideacentre (310S-08ASR Type 90G9)!

~/work/VBiosFinder > ./vbiosfinder extract ~/BIOS.rom
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
output will be stored in '/home/ceris/work/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... no
Install 'upx' on your system (required for UPX executables)
checking for 7z... yes
trying to extract ./BIOS.rom
extracting uefi data
trying to extract ./BIOS.rom
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 6042 modules
finding vbios
1 possible candidates
checking for rom-parser... yes
Found VBIOS for device 1002:98e0!
Job done. Extracted files can be found in /home/ceris/work/VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

It is worth noting that I had to extract the BIOS ROM using flashmap and could not use the update .exe provided here (https://pcsupport.lenovo.com/us/en/products/desktops-and-all-in-ones/300-series/310s-08asr/90g9/downloads/driver-list/component?name=BIOS%2FUEFI). ((I suspect the updater there is not actually for my device as my device claims to be version "T5" where the updater has version "T3"?)) Once copied with flashmap, the extraction went fine and produced the following file:

~/work/VBiosFinder/output > ls -alh ./vbios_1002_98e0_1.rom
-rw-r--r-- 1 ceris ceris 63K Mar 15 18:11 ./vbios_1002_98e0_1.rom

I believe that's a wrap.

I tried to extract but i get this error.

./vbiosfinder extract /home/greenhacker/Downloads/ASUS_X512FL_309_BIOS_Update.exe
output will be stored in '/home/greenhacker/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./ASUS_X512FL_309_BIOS_Update.exe
found innoextract archive
Extracting "ASUS X512FL BIOS" - setup data version 6.0.0 (unicode)

  • "tmp/ASUS_X512FL_309_BIOS_Update/AsusBusinessIntelligenceCPlusLib.dll" [temp]
  • "tmp/ASUS_X512FL_309_BIOS_Update/AsusInstallerBI.exe" [temp]
  • "tmp/ASUS_X512FL_309_BIOS_Update/BusinessIntelligenceCPlusLib.dll" [temp]
  • "tmp/ASUS_X512FL_309_BIOS_Update/README.txt" [temp]
  • "app/Install.bat" [temp]
  • "app/pnputil.exe" [temp]
  • "app/X512FL.309" [temp]
  • "app/x512fl_309.cat" [temp]
  • "app/X512FL_309.inf" [temp]
  • "app/License.txt" [temp]
    Done with 1 warning.
    trying to extract ./app/Install.bat
    trying to extract ./app/License.txt
    trying to extract ./app/X512FL.309
    trying to extract ./app/X512FL_309.inf
    trying to extract ./app/pnputil.exe
    trying to extract ./app/x512fl_309.cat
    trying to extract ./tmp/ASUS_X512FL_309_BIOS_Update/AsusBusinessIntelligenceCPlusLib.dll
    trying to extract ./tmp/ASUS_X512FL_309_BIOS_Update/AsusInstallerBI.exe
    trying to extract ./tmp/ASUS_X512FL_309_BIOS_Update/BusinessIntelligenceCPlusLib.dll
    trying to extract ./tmp/ASUS_X512FL_309_BIOS_Update/README.txt
    extracting uefi data
    trying to extract ./ASUS_X512FL_309_BIOS_Update.exe
    Cleaning up garbage
    /home/greenhacker/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/terrapin-0.6.0/lib/terrapin/command_line.rb:82:in run': Terrapin::CommandNotFoundError (Terrapin::CommandNotFoundError) from /home/greenhacker/VBiosFinder/src/extract-uefi.rb:20:in uefi'
    from /home/greenhacker/VBiosFinder/src/extraction.rb:8:in call' from /home/greenhacker/VBiosFinder/src/extraction.rb:8:in attempt'
    from /home/greenhacker/VBiosFinder/src/methods.rb:46:in block in run' from /home/greenhacker/VBiosFinder/src/methods.rb:44:in each'
    from /home/greenhacker/VBiosFinder/src/methods.rb:44:in run' from /home/greenhacker/VBiosFinder/src/cli.rb:36:in extract'
    from /home/greenhacker/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/command.rb:27:in run' from /home/greenhacker/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in invoke_command'
    from /home/greenhacker/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor.rb:387:in dispatch' from /home/greenhacker/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/base.rb:466:in start'
    from _init.rb:7:in `'

Extract don't work (Errno::ENOENT)

Trying to unpack bios from Dell Vostro 15. (Also tested with lenovo aforementioned in readme). Steps to reproduce:
Download all dependencies to 3dparty and run ./vbiosfinder extract mybiosname.exe report such an error:
/usr/share/ruby/fileutils.rb:1291:in `initialize': No such file or directory @ rb_sysopen - r0muj09w.exe (Errno::ENOENT)

OS: Fedora 29 (Also tested on Ubuntu 18.04)

Any help?

undefined method `has_key?' for ..:Integer / Acer Aspire V17 Nitro / VN7-792G / GTX965M

Hi,

first: thank you for this software!!

It seems to work quite far for the Acer V17, but sadly I get an error (near the end I think).

Sorry if it's a rookie error, but Ruby is not on my language stack, so a hint would be appreciated :) :

#sysinfo
root@76de7e5b61c1:/work/opt/edk2# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal
root@76de7e5b61c1:/work/opt/edk2# dpkg -l | grep ruby
ii  libruby2.7:amd64                     2.7.0-5ubuntu1.2                  amd64        Libraries necessary to run Ruby 2.7
ii  rake                                 13.0.1-4                          all          ruby make-like utility
ii  ruby                                 1:2.7+1                           amd64        Interpreter of object-oriented scripting language Ruby (default version)
ii  ruby-bundler                         2.1.4-1                           all          Manage Ruby application dependencies (runtime)
ii  ruby-dev:amd64                       1:2.7+1                           amd64        Header files for compiling extension modules for Ruby (default version)
ii  ruby-minitest                        5.13.0-1                          all          Ruby test tools supporting TDD, BDD, mocking, and benchmarking
ii  ruby-molinillo                       0.6.4-1                           all          generic dependency resolution algorithm
ii  ruby-net-http-persistent             2.9.4-2                           all          Manages persistent connections using Net::HTTP
ii  ruby-net-telnet                      0.1.1-2                           all          telnet client library
ii  ruby-power-assert                    1.1.7-1                           all          library showing values of variables and method calls in an expression
ii  ruby-test-unit                       3.3.5-1                           all          unit testing framework for Ruby
ii  ruby-thor                            0.19.4-1                          all          Ruby scripting framework
ii  ruby-xmlrpc                          0.3.0-2                           all          XMLRPC library for Ruby
ii  ruby2.7                              2.7.0-5ubuntu1.2                  amd64        Interpreter of object-oriented scripting language Ruby
ii  ruby2.7-dev:amd64                    2.7.0-5ubuntu1.2                  amd64        Header files for compiling extension modules for the Ruby 2.7
ii  ruby2.7-doc                          2.7.0-5ubuntu1.2                  all          Documentation for Ruby 2.7
ii  rubygems-integration                 1.16                              all          integration of Debian Ruby packages with Rubygems


root@76de7e5b61c1:/work/VBiosFinder# ./vbiosfinder extract /work/VBiosFinder/BIOS_109.exe 
output will be stored in '/work/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./BIOS_109.exe
found 7z archive
trying to extract ./BiosImageProcx64.dll
trying to extract ./Ding.wav
trying to extract ./FWUpdLcl.exe
trying to extract ./FlsHook.exe
trying to extract ./FlsHookDll.dll
trying to extract ./H2OFFT-Wx64.exe
trying to extract ./iscflashx64.dll
trying to extract ./iscflashx64.sys
trying to extract ./isflash.bin
trying to extract ./platform.ini
trying to extract ./xerces-c_2_7.dll
extracting uefi data
trying to extract ./BIOS_109.exe
found UEFIExtract archive
trying to extract ./BiosImageProcx64.dll
found UEFIExtract archive
trying to extract ./Ding.wav
found UEFIExtract archive
trying to extract ./FWUpdLcl.exe
found UEFIExtract archive
trying to extract ./FlsHook.exe
found UEFIExtract archive
trying to extract ./FlsHookDll.dll
found UEFIExtract archive
trying to extract ./H2OFFT-Wx64.exe
found UEFIExtract archive
trying to extract ./iscflashx64.dll
found UEFIExtract archive
trying to extract ./iscflashx64.sys
found UEFIExtract archive
trying to extract ./isflash.bin
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
trying to extract ./platform.ini
found UEFIExtract archive
trying to extract ./xerces-c_2_7.dll
found UEFIExtract archive
filtering for modules...
got 4026 modules
finding vbios
6 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!
Cleaning up garbage
Traceback (most recent call last):
	11: from _init.rb:7:in `<main>'
	10: from /usr/lib/ruby/vendor_ruby/thor/base.rb:444:in `start'
	 9: from /usr/lib/ruby/vendor_ruby/thor.rb:369:in `dispatch'
	 8: from /usr/lib/ruby/vendor_ruby/thor/invocation.rb:126:in `invoke_command'
	 7: from /usr/lib/ruby/vendor_ruby/thor/command.rb:27:in `run'
	 6: from /work/VBiosFinder/src/cli.rb:36:in `extract'
	 5: from /work/VBiosFinder/src/methods.rb:61:in `run'
	 4: from /work/VBiosFinder/src/methods.rb:61:in `each'
	 3: from /work/VBiosFinder/src/methods.rb:69:in `block in run'
	 2: from /work/VBiosFinder/src/methods.rb:98:in `check_cpy'
	 1: from /work/VBiosFinder/src/methods.rb:98:in `each'
/work/VBiosFinder/src/methods.rb:100:in `block in check_cpy': undefined method `has_key?' for 1698888344561385327:Integer (NoMethodError)

Finder is overwriting files if few matches found.

Hi,
Your finder is overwriting files if few matches found.
My bios contains more than one vbios for my card and I'd like to have both matches extracted, it seems to overwrite first with second.
One is not valid bios for my card (that one, which was extracted), it's probably for other variant.

Lenovo Y50-70 Touch Compatibility

Hello,
I am running Arch 4.16.3-1-ARCH with ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] and had no success in dumping the vbios using vbiosfinder

Bios is v3.03 9ecn43ww from the official lenovo support page

Here is the output of ./vbiosfinder

./vbiosfinder extract '/home/silver/Downloads/9ecn43ww.exe' 
output will be stored in '/home/silver/Downloads/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

trying to extract ./9ecn43ww.exe
checking for innoextract... yes
found innoextract archive
Extracting "Lenovo BIOS Update Utility" - setup data version 5.5.0 (unicode)
 - "app/9ECN43WW.exe" (4.61 MiB) - overwritten
 - "app/9ECN43WW.exe" (4.61 MiB)
Done.
checking for upx... yes
not extractable with upx
checking for 7z... yes
not extractable with 7z
checking for UEFIDump... yes
not an uefi image

trying to extract ./app/9ECN43WW.exe
checking for innoextract... yes
not extractable with innoextract
checking for upx... yes
not extractable with upx
checking for 7z... yes
found 7z archive
checking for UEFIDump... yes
not an uefi image

Thinkpad P51 not supported

Hi,

I tried to extract the VBIOS from an Thinkpad P51.
I get the following output:

output will be stored in '/home/work/rom/VBiosFinder/tmp-vbiosfinder'                                                                                                                                                                                         
checking for ruby... yes                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                              
checking for innoextract... yes                                                                                                                                                                                                                               
checking for upx... yes                                                                                                                                                                                                                                       
checking for 7z... yes                                                                                                                                                                                                                                        
trying to extract ./n1uuj21w.exe                                                                                                                                                                                                                              
found innoextract archive                                                                                                                                                                                                                                     
Extracting "version 1.46-1.09 (N1UET72W-N1UHT26W)" - setup data version 5.6.0                                                                                                                                                                                 
 - "app/WINUPTP.EXE" - overwritten                                                                                                                                                                                                                            
 - "app/WINUPTP.EXE"                                                                                                                                                                                                                                          
 - "app/406E3.PAT"                                                                                                                                                                                                                                            
 - "app/406E8.PAT"                                                                                                                                                                                                                                            
 - "app/506E3.PAT"                                                                                                                                                                                                                                            
 - "app/506E8.PAT"                                                                                                                                                                                                                                            
 - "app/806E9.PAT"
 - "app/906E9.PAT"
 - "app/BCP.evs"
 - "app/BIOS_LOGO.TXT"
 - "app/BootX64.efi"
 - "app/chklogo.exe"
 - "app/chklogo.exe.config"
 - "app/Instruction JP - BIOS flash USB memory key.txt"
 - "app/Instruction US - BIOS flash USB memory key.txt"
 - "app/mkusbkey.bat"
 - "app/SHELLFLASH.EFI"
 - "app/WinFlash32.exe"
 - "app/WinFlash32s.exe"
 - "app/WinFlash64.exe"
 - "app/WinFlash64s.exe"
 - "app/wininfo.exe"
 - "app/wininfo64.exe"
 - "app/WINUPTP64.EXE"
 - "app/32bit/tpnflhlp.sys"
 - "app/64bit/tpnflhlp.sys"
 - "app/N1UET72W/$0AN1U00.FL1"
 - "app/N1UET72W/$0AN1U00.FL2"
Done.
trying to extract ./app/32bit/tpnflhlp.sys
trying to extract ./app/406E3.PAT
trying to extract ./app/406E8.PAT
trying to extract ./app/506E3.PAT
trying to extract ./app/506E8.PAT
trying to extract ./app/64bit/tpnflhlp.sys
trying to extract ./app/806E9.PAT
trying to extract ./app/906E9.PAT
trying to extract ./app/BCP.evs
trying to extract ./app/BIOS_LOGO.TXT
trying to extract ./app/BootX64.efi
trying to extract ./app/Instruction JP - BIOS flash USB memory key.txt
trying to extract ./app/Instruction US - BIOS flash USB memory key.txt
trying to extract ./app/N1UET72W/$0AN1U00.FL1
trying to extract ./app/N1UET72W/$0AN1U00.FL2
trying to extract ./app/SHELLFLASH.EFI
trying to extract ./app/WINUPTP.EXE
trying to extract ./app/WINUPTP64.EXE
trying to extract ./app/WinFlash32.exe
trying to extract ./app/WinFlash32s.exe
trying to extract ./app/WinFlash64.exe
trying to extract ./app/WinFlash64s.exe
trying to extract ./app/chklogo.exe
trying to extract ./app/chklogo.exe.config
trying to extract ./app/mkusbkey.bat
trying to extract ./app/wininfo.exe
trying to extract ./app/wininfo64.exe
extracting uefi data
trying to extract ./app/32bit/tpnflhlp.sys
trying to extract ./app/406E3.PAT
trying to extract ./app/406E8.PAT
trying to extract ./app/506E3.PAT
trying to extract ./app/506E8.PAT
trying to extract ./app/64bit/tpnflhlp.sys
trying to extract ./app/806E9.PAT
trying to extract ./app/906E9.PAT
trying to extract ./app/BCP.evs
trying to extract ./app/BIOS_LOGO.TXT
trying to extract ./app/BootX64.efi
trying to extract ./app/Instruction JP - BIOS flash USB memory key.txt
trying to extract ./app/Instruction US - BIOS flash USB memory key.txt
trying to extract ./app/N1UET72W/$0AN1U00.FL1
trying to extract ./app/N1UET72W/$0AN1U00.FL2
trying to extract ./app/SHELLFLASH.EFI
trying to extract ./app/WINUPTP.EXE
trying to extract ./app/WINUPTP64.EXE
trying to extract ./app/WinFlash32.exe
trying to extract ./app/WinFlash32s.exe
trying to extract ./app/WinFlash64.exe
trying to extract ./app/WinFlash64s.exe
trying to extract ./app/chklogo.exe
trying to extract ./app/chklogo.exe.config
trying to extract ./app/mkusbkey.bat
trying to extract ./app/wininfo.exe
trying to extract ./app/wininfo64.exe
trying to extract ./mkmf.log
trying to extract ./n1uuj21w.exe
filtering for modules...
got 0 modules
finding vbios
no candidates found :(
Cleaning up garbage

I got the file from here: https://download.lenovo.com/pccbbs/mobiles/n1uuj21w.exe
I tried it on an uptodate Debian buster.

Trying on P50 with success !

Thanks for your software, i'm trying on P50 without success yet.

Everything looks good except this error at the end.

/opt/VBiosFinder-master/src/methods.rb:99:in `read': Is a directory @ io_fread - n1euj45w.exe.dump (Errno::EISDIR)

root@gu-ThinkPad-P50:/opt/VBiosFinder-master# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.2 LTS
Release:	20.04
Codename:	focal

root@gu-ThinkPad-P50:/opt/VBiosFinder-master# lspci -nnk -d 10de:13b0
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM107GLM [Quadro M2000M] [10de:13b0] (rev a2)
	Subsystem: Lenovo GM107GLM [Quadro M2000M] [17aa:222e]
	Kernel driver in use: nouveau
	Kernel modules: nvidiafb, nouveau
root@gu-ThinkPad-P50:/opt/VBiosFinder-master# ./vbiosfinder extract /home/gu/Downloads/n1euj45w.exe
output will be stored in '/opt/VBiosFinder-master/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./n1euj45w.exe
found zlib archive
wrong guess :(
found innoextract archive
Extracting "version 1.63-1.18 (N1EET90W-N1EHT38W)" - setup data version 5.5.7 (unicode)
 - "codeGetExtractPath/WINUPTP.EXE" - overwritten
 - "codeGetExtractPath/406E1.PAT"
 - "codeGetExtractPath/406E2.PAT"
 - "codeGetExtractPath/406E3.PAT"
 - "codeGetExtractPath/506E2.PAT"
 - "codeGetExtractPath/506E3.PAT"
 - "codeGetExtractPath/BCP.evs"
 - "codeGetExtractPath/BIOS_LOGO.TXT"
 - "codeGetExtractPath/BootX64.efi"
 - "codeGetExtractPath/chklogo.exe"
 - "codeGetExtractPath/chklogo.exe.config"
 - "codeGetExtractPath/DeleteFolder.xml"
 - "codeGetExtractPath/DeleteTasks.xml"
 - "codeGetExtractPath/Instruction JP - BIOS flash USB memory key.txt"
 - "codeGetExtractPath/Instruction US - BIOS flash USB memory key.txt"
 - "codeGetExtractPath/manifest.readme"
 - "codeGetExtractPath/mkusbkey.bat"
 - "codeGetExtractPath/SHELLFLASH.EFI"
 - "codeGetExtractPath/WinFlash32.exe"
 - "codeGetExtractPath/WinFlash32s.exe"
 - "codeGetExtractPath/WinFlash64.exe"
 - "codeGetExtractPath/WinFlash64s.exe"
 - "codeGetExtractPath/wininfo.exe"
 - "codeGetExtractPath/wininfo64.exe"
 - "codeGetExtractPath/WINUPTP.EXE"
 - "codeGetExtractPath/WINUPTP64.EXE"
 - "codeGetExtractPath/32bit/tpnflhlp.sys"
 - "codeGetExtractPath/64bit/tpnflhlp.sys"
 - "codeGetExtractPath/N1EET90W/$0AN1E00.FL1"
 - "codeGetExtractPath/N1EET90W/$0AN1E00.FL2"
 - "codeGetExtractPath/N1EET90W/CpuManifest.xml"
 - "codeGetExtractPath/N1EET90W/Manifest.xml"
Done.
trying to extract ./codeGetExtractPath/32bit/tpnflhlp.sys
trying to extract ./codeGetExtractPath/406E1.PAT
trying to extract ./codeGetExtractPath/406E2.PAT
trying to extract ./codeGetExtractPath/406E3.PAT
trying to extract ./codeGetExtractPath/506E2.PAT
trying to extract ./codeGetExtractPath/506E3.PAT
trying to extract ./codeGetExtractPath/64bit/tpnflhlp.sys
trying to extract ./codeGetExtractPath/BCP.evs
trying to extract ./codeGetExtractPath/BIOS_LOGO.TXT
trying to extract ./codeGetExtractPath/BootX64.efi
trying to extract ./codeGetExtractPath/DeleteFolder.xml
trying to extract ./codeGetExtractPath/DeleteTasks.xml
trying to extract ./codeGetExtractPath/Instruction JP - BIOS flash USB memory key.txt
trying to extract ./codeGetExtractPath/Instruction US - BIOS flash USB memory key.txt
trying to extract ./codeGetExtractPath/N1EET90W/$0AN1E00.FL1
found zlib archive
wrong guess :(
trying to extract ./codeGetExtractPath/N1EET90W/$0AN1E00.FL2
trying to extract ./codeGetExtractPath/N1EET90W/CpuManifest.xml
trying to extract ./codeGetExtractPath/N1EET90W/Manifest.xml
trying to extract ./codeGetExtractPath/SHELLFLASH.EFI
trying to extract ./codeGetExtractPath/WINUPTP.EXE
trying to extract ./codeGetExtractPath/WINUPTP64.EXE
trying to extract ./codeGetExtractPath/WinFlash32.exe
trying to extract ./codeGetExtractPath/WinFlash32s.exe
trying to extract ./codeGetExtractPath/WinFlash64.exe
trying to extract ./codeGetExtractPath/WinFlash64s.exe
trying to extract ./codeGetExtractPath/chklogo.exe
trying to extract ./codeGetExtractPath/chklogo.exe.config
trying to extract ./codeGetExtractPath/manifest.readme
trying to extract ./codeGetExtractPath/mkusbkey.bat
trying to extract ./codeGetExtractPath/wininfo.exe
trying to extract ./codeGetExtractPath/wininfo64.exe
extracting uefi data
trying to extract ./codeGetExtractPath/32bit/tpnflhlp.sys
found UEFIExtract archive
trying to extract ./codeGetExtractPath/406E1.PAT
found UEFIExtract archive
trying to extract ./codeGetExtractPath/406E2.PAT
found UEFIExtract archive
trying to extract ./codeGetExtractPath/406E3.PAT
found UEFIExtract archive
trying to extract ./codeGetExtractPath/506E2.PAT
found UEFIExtract archive
trying to extract ./codeGetExtractPath/506E3.PAT
found UEFIExtract archive
trying to extract ./codeGetExtractPath/64bit/tpnflhlp.sys
found UEFIExtract archive
trying to extract ./codeGetExtractPath/BCP.evs
found UEFIExtract archive
trying to extract ./codeGetExtractPath/BIOS_LOGO.TXT
found UEFIExtract archive
trying to extract ./codeGetExtractPath/BootX64.efi
found UEFIExtract archive
trying to extract ./codeGetExtractPath/DeleteFolder.xml
found UEFIExtract archive
trying to extract ./codeGetExtractPath/DeleteTasks.xml
found UEFIExtract archive
trying to extract ./codeGetExtractPath/Instruction JP - BIOS flash USB memory key.txt
found UEFIExtract archive
trying to extract ./codeGetExtractPath/Instruction US - BIOS flash USB memory key.txt
found UEFIExtract archive
trying to extract ./codeGetExtractPath/N1EET90W/$0AN1E00.FL1
found UEFIExtract archive
trying to extract ./codeGetExtractPath/N1EET90W/$0AN1E00.FL2
found UEFIExtract archive
trying to extract ./codeGetExtractPath/N1EET90W/CpuManifest.xml
found UEFIExtract archive
trying to extract ./codeGetExtractPath/N1EET90W/Manifest.xml
found UEFIExtract archive
trying to extract ./codeGetExtractPath/SHELLFLASH.EFI
found UEFIExtract archive
trying to extract ./codeGetExtractPath/WINUPTP.EXE
found UEFIExtract archive
trying to extract ./codeGetExtractPath/WINUPTP64.EXE
found UEFIExtract archive
trying to extract ./codeGetExtractPath/WinFlash32.exe
found UEFIExtract archive
trying to extract ./codeGetExtractPath/WinFlash32s.exe
found UEFIExtract archive
trying to extract ./codeGetExtractPath/WinFlash64.exe
found UEFIExtract archive
trying to extract ./codeGetExtractPath/WinFlash64s.exe
found UEFIExtract archive
trying to extract ./codeGetExtractPath/chklogo.exe
found UEFIExtract archive
trying to extract ./codeGetExtractPath/chklogo.exe.config
found UEFIExtract archive
trying to extract ./codeGetExtractPath/manifest.readme
found UEFIExtract archive
trying to extract ./codeGetExtractPath/mkusbkey.bat
found UEFIExtract archive
trying to extract ./codeGetExtractPath/wininfo.exe
found UEFIExtract archive
trying to extract ./codeGetExtractPath/wininfo64.exe
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
trying to extract ./n1euj45w.exe
found UEFIExtract archive
filtering for modules...
got 5417 modules
finding vbios
7 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!
Cleaning up garbage
Traceback (most recent call last):
	12: from _init.rb:7:in `<main>'
	11: from /usr/lib/ruby/vendor_ruby/thor/base.rb:444:in `start'
	10: from /usr/lib/ruby/vendor_ruby/thor.rb:369:in `dispatch'
	 9: from /usr/lib/ruby/vendor_ruby/thor/invocation.rb:126:in `invoke_command'
	 8: from /usr/lib/ruby/vendor_ruby/thor/command.rb:27:in `run'
	 7: from /opt/VBiosFinder-master/src/cli.rb:36:in `extract'
	 6: from /opt/VBiosFinder-master/src/methods.rb:61:in `run'
	 5: from /opt/VBiosFinder-master/src/methods.rb:61:in `each'
	 4: from /opt/VBiosFinder-master/src/methods.rb:69:in `block in run'
	 3: from /opt/VBiosFinder-master/src/methods.rb:98:in `check_cpy'
	 2: from /opt/VBiosFinder-master/src/methods.rb:98:in `each'
	 1: from /opt/VBiosFinder-master/src/methods.rb:99:in `block in check_cpy'
/opt/VBiosFinder-master/src/methods.rb:99:in `read': Is a directory @ io_fread - n1euj45w.exe.dump (Errno::EISDIR)

Thanks in advance for your help

Results with HP OMEN 16 (2021, AMD)

The extraction is successful... somehow.
TL;DR: Only the VBIOSs for AMD integrated GPU is contained in the BIOS. If you are looking for VBIOS of the NVIDIA GPU, no luck here.

For anyone that might be interested:

  1. Download the BIOS update package from HP support.
  2. Run it, and wait for the AMI BIOS update screen to pop up.
  3. Click Next, and wait for a second in the next screen, there should be 3 choices, select Copy.
  4. Save the BIOS file to some place. There should be a BIN file, such as 088FF.bin
  5. Extract that BIN file with VBiosFinder.

Results:

pi@zhang-pi:~/VBiosProject/VBiosFinder $ ./vbiosfinder extract ~/VBiosProject/VBiosFinder/088FF.bin
output will be stored in '/home/pi/VBiosProject/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... no
Install '7z' on your system (required for 7z (self-extracting) archives)
trying to extract ./088FF.bin
extracting uefi data
trying to extract ./088FF.bin
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 5822 modules
finding vbios
4 possible candidates
checking for rom-parser... yes
Found VBIOS for device 1002:1638!
Found VBIOS for device 1002:15e7!
Found VBIOS for device 1002:1636!
Found VBIOS for device 1002:1636!
Job done. Extracted files can be found in /home/pi/VBiosProject/VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

If you inspect the Device ID of one of the extracted VBIOSs, 1002:1636 for example, you will realise they are the integrated graphics of Zen 3 (Renoir) APUs, in my case 5800H.

So... if you really need the VBIOS for them for whatever reason, then that's it. Otherwise I believe these manufacturers are no longer bundling the actual NVIDIA VBIOSs into the BIOS these days.

Latitude E7450 not supported

Hi,

https://www.dell.com/support/home/fr/fr/frbsdt1/drivers/driversdetails?driverid=47grd&oscode=wb64a&productcode=latitude-e7450-ultrabook

~/vbios/VBiosFinder master*
❯ ./vbiosfinder extract ~/downloads/E7450A23.exe
output will be stored in '/home/user/vbios/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./E7450A23.exe
found polyglot archive
trying to extract ./E7450A23.exe-polyglot
found polyglot archive
trying to extract ./E7450A23.exe-polyglot-polyglot
found polyglot archive
trying to extract ./E7450A23.exe-polyglot-polyglot-polyglot
found zlib archive
trying to extract ./E7450A23.exe-polyglot-polyglot-polyglot-zlib
extracting uefi data
trying to extract ./E7450A23.exe
found UEFIExtract archive
trying to extract ./E7450A23.exe-polyglot
found UEFIExtract archive
trying to extract ./E7450A23.exe-polyglot-polyglot
found UEFIExtract archive
trying to extract ./E7450A23.exe-polyglot-polyglot-polyglot
found UEFIExtract archive
trying to extract ./E7450A23.exe-polyglot-polyglot-polyglot-zlib
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 264 modules
finding vbios
no candidates found :(
input contains uefi data but no vbios could be found
the vbios might not be baked into the input!
Cleaning up garbage

is that normal ?

Found two VBioses from T440p's image but only the last one is saved.

The T440p's bios image https://download.lenovo.com/pccbbs/mobiles/gluj42us.iso contains two intel 8086:0406 vbioses. I checked it with UEFITool and it appears they are different in version one is 2171 and another is 2179. But using this VBiosFinder, the output folder only has the second one which is the 2179 one.

Here is the output.

[pc@pc VBiosFinder]$ ./vbiosfinder extract /home/pc/T440pCorebooting/VBiosFinder/gluj42us.iso 
/home/pc/.gem/ruby/2.7.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
/home/pc/.gem/ruby/2.7.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
output will be stored in '/home/pc/T440pCorebooting/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./gluj42us.iso
extracting uefi data
trying to extract ./gluj42us.iso
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 5713 modules
finding vbios
4 possible candidates
checking for rom-parser... yes
Found VBIOS for device 8086:0406!
Found VBIOS for device 8086:0406!
Found VBIOS for device 10de:1290!
Found VBIOS for device 10de:1290!
Job done. Extracted files can be found in /home/pc/T440pCorebooting/VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

Works on Asus TUF FX505DY

Works fine without any error
Just a weird thing i noticed was that, it gave out 2 vbios for the iGpu

-bash: ./vbiosfinder: No such file or directory

Hello,

I installed all elements but I've a problem with the method with
vbiosfinder.
Command:

root@pve:~# ./vbiosfinder extract /download/vbios/ASUS_G10DK_309_BIOS_Update.exe
-bash: ./vbiosfinder: No such file or directory

Have you a solution

Thank you

Best regards

Dell XPS BIOS updater format not supported {XPS 9560, XPS 9550, ...}

I've attempted to extract the nVidia GPU BIOS from the following Dell XPS 9560 Bios update files with out success:

In both cases I had innoextract, upx, 7z, and UEFIDump installed and available to vbiosfinder.

OS: Debian 9.4
Ruby: 2.5.0

./vbiosfinder extract ~/Downloads/XPS_15_9560_1.8.1.exe 
output will be stored in '/home/bill/Development/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

trying to extract ./XPS_15_9560_1.8.1.exe
checking for innoextract... yes
not extractable with innoextract
checking for upx... yes
not extractable with upx
checking for 7z... yes
not extractable with 7z
checking for UEFIDump... yes
not an uefi image
Cleaning up garbage

Works on Razer Blade 15 advanced (mid 2021)

Was able to extract VBIOS for my razer blade 15 without any problem. The only thing I have unpacked Razer BIOS updater myself in order to extract BIOS.

Thank you for the great tool. Would spend all day finding vbios myself.

Thinkpad T440p "can't determine vbios type"

Hello,

Thanks for creating this tool.

I'm trying to use it to extract the VBIOS of the GT730m in the Thinkpad T440p. Unfortunately, no matter how I try it, it fails with "can't determine vbios type" (It says it succeeded, but the output folder only contains the input file).

Lenovo offers an updater from within Windows and a standalone bootable updater. Here is the result of each:

https://download.lenovo.com/pccbbs/mobiles/gluj41us.exe

output will be stored in '/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./gluj41us.exe
found innoextract archive
Extracting "version 2.53 (GLET99WW)" - setup data version 5.5.7
 - "app/WINUPTP.EXE" - overwritten
 - "app/WINUPTP.EXE"
 - "app/306C1.PAT"
 - "app/306C2.PAT"
 - "app/306C3.PAT"
 - "app/40650.PAT"
 - "app/40651.PAT"
 - "app/BCP.evs"
 - "app/BIOS_LOGO.TXT"
 - "app/chklghd2.exe"
 - "app/chklogo.exe"
 - "app/chklogo.exe.config"
 - "app/WinFlash32.exe"
 - "app/WinFlash32s.exe"
 - "app/WinFlash64.exe"
 - "app/WinFlash64s.exe"
 - "app/wininfo.exe"
 - "app/wininfo64.exe"
 - "app/WINUPTP64.EXE"
 - "app/32bit/tpnflhlp.sys"
 - "app/64bit/tpnflhlp.sys"
 - "app/GLET99WW/$01E0000.FL1"
 - "app/GLET99WW/$01E0000.FL2"
Done.
trying to extract ./app/306C1.PAT
trying to extract ./app/306C2.PAT
trying to extract ./app/306C3.PAT
trying to extract ./app/32bit/tpnflhlp.sys
trying to extract ./app/40650.PAT
trying to extract ./app/40651.PAT
trying to extract ./app/64bit/tpnflhlp.sys
trying to extract ./app/BCP.evs
trying to extract ./app/BIOS_LOGO.TXT
trying to extract ./app/GLET99WW/$01E0000.FL1
trying to extract ./app/GLET99WW/$01E0000.FL2
trying to extract ./app/WINUPTP.EXE
trying to extract ./app/WINUPTP64.EXE
trying to extract ./app/WinFlash32.exe
trying to extract ./app/WinFlash32s.exe
trying to extract ./app/WinFlash64.exe
trying to extract ./app/WinFlash64s.exe
trying to extract ./app/chklghd2.exe
trying to extract ./app/chklogo.exe
trying to extract ./app/chklogo.exe.config
trying to extract ./app/wininfo.exe
trying to extract ./app/wininfo64.exe
extracting uefi data
trying to extract ./app/306C1.PAT
found UEFIExtract archive
trying to extract ./app/306C2.PAT
found UEFIExtract archive
trying to extract ./app/306C3.PAT
found UEFIExtract archive
trying to extract ./app/32bit/tpnflhlp.sys
found UEFIExtract archive
trying to extract ./app/40650.PAT
found UEFIExtract archive
trying to extract ./app/40651.PAT
found UEFIExtract archive
trying to extract ./app/64bit/tpnflhlp.sys
found UEFIExtract archive
trying to extract ./app/BCP.evs
found UEFIExtract archive
trying to extract ./app/BIOS_LOGO.TXT
found UEFIExtract archive
trying to extract ./app/GLET99WW/$01E0000.FL1
found UEFIExtract archive
trying to extract ./app/GLET99WW/$01E0000.FL2
found UEFIExtract archive
trying to extract ./app/WINUPTP.EXE
found UEFIExtract archive
trying to extract ./app/WINUPTP64.EXE
found UEFIExtract archive
trying to extract ./app/WinFlash32.exe
found UEFIExtract archive
trying to extract ./app/WinFlash32s.exe
found UEFIExtract archive
trying to extract ./app/WinFlash64.exe
found UEFIExtract archive
trying to extract ./app/WinFlash64s.exe
found UEFIExtract archive
trying to extract ./app/chklghd2.exe
found UEFIExtract archive
trying to extract ./app/chklogo.exe
found UEFIExtract archive
trying to extract ./app/chklogo.exe.config
found UEFIExtract archive
trying to extract ./app/wininfo.exe
found UEFIExtract archive
trying to extract ./app/wininfo64.exe
found UEFIExtract archive
trying to extract ./gluj41us.exe
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 5755 modules
finding vbios
4 possible candidates
checking for rom-parser... yes
can't determine vbios type
can't determine vbios type
can't determine vbios type
can't determine vbios type
Job done. Extracted files can be found in /VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

https://download.lenovo.com/pccbbs/mobiles/gluj41us.iso

output will be stored in '/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./gluj41us.iso
extracting uefi data
trying to extract ./gluj41us.iso
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
filtering for modules...
got 5727 modules
finding vbios
4 possible candidates
checking for rom-parser... yes
can't determine vbios type
can't determine vbios type
can't determine vbios type
can't determine vbios type
Job done. Extracted files can be found in /VBiosFinder/tmp-vbiosfinder/../output
Cleaning up garbage

I tried with the current version of UEFIExtract, as well as a specific old version you recommended in another issue. The result was exactly the same.

What does this error message mean? How does the tool recognize something as a VBIOS without at the same time knowing what type it is? Do you have any suggestions how I could fix this?

No such file or directory @ rb_sysopen - 8auj30us.exe (Errno::ENOENT)

Facing this error, tried it in 2 different distros.
May be something to do with the new ruby.

naan@clrhost ~/Source_Installs/VBiosFinder $ ./vbiosfinder extract 8auj30us.exe
output will be stored in '/home/naan/Source_Installs/VBiosFinder/tmp-vbiosfinder'
checking for ruby... yes
Cleaning up garbage
/usr/lib64/ruby/3.0.0/fileutils.rb:1414:in initialize': No such file or directory @ rb_sysopen - 8auj30us.exe (Errno::ENOENT) from /usr/lib64/ruby/3.0.0/fileutils.rb:1414:in open'
from /usr/lib64/ruby/3.0.0/fileutils.rb:1414:in copy_file' from /usr/lib64/ruby/3.0.0/fileutils.rb:514:in copy_file'
from /usr/lib64/ruby/3.0.0/fileutils.rb:433:in block in cp' from /usr/lib64/ruby/3.0.0/fileutils.rb:1597:in block in fu_each_src_dest'
from /usr/lib64/ruby/3.0.0/fileutils.rb:1611:in fu_each_src_dest0' from /usr/lib64/ruby/3.0.0/fileutils.rb:1595:in fu_each_src_dest'
from /usr/lib64/ruby/3.0.0/fileutils.rb:432:in cp' from /home/naan/Source_Installs/VBiosFinder/src/cli.rb:34:in extract'
from /home/naan/Source_Installs/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/command.rb:27:in run' from /home/naan/Source_Installs/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in invoke_command'
from /home/naan/Source_Installs/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor.rb:387:in dispatch' from /home/naan/Source_Installs/VBiosFinder/vendor/bundle/ruby/3.0.0/gems/thor-0.20.0/lib/thor/base.rb:466:in start'
from _init.rb:7:in `

'

HP Omen 17 - ck0000

Hi
I need to extract vbios for omen 17 (ck0000), but i have 0,00001 experience under linux. Is there someone, who can help me little? Give me hand or guide me a little ? :-)

Thank you

LittleGuyHenry

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.