coderobe / VBiosFinder

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

Thinkpad P51 not supported #7

Open brandsimon opened 5 years ago

brandsimon commented 5 years ago

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.

coderobe commented 5 years ago

Works for me. The update contains VBIOS data for the 8086:0406, 10de:13b6, and 10de:1436 video cards in the app/N1UET72W/$0AN1U00.FL1 blob, correctly identified and stripped by UEFIExtract.

Do you have UEFIExtract in your PATH or the 3rdparty directory? That's required for most extractions - the README of VBiosFinder has more information regarding dependencies.

brandsimon commented 5 years ago

Thank you for the hint. I ran it in a VM via ssh.

qt.qpa.screen: QXcbConnection: Could not connect to display 
Could not connect to any X display.

Now I ran it in an X-Session and it is trying to open every file. It says a lot: 'UEFI volumes not found', and two files open correctly, but I dont know, where I should extract them to with this tool.

coderobe commented 5 years ago

Ran what in an X session? VBiosFinder does not require X, and you don't need to do any part of the extraction manually.

brandsimon commented 5 years ago

Ah sorry, I made a mistake, now I copied the correct UEFIExtract (before I had UEFITool). Still It does not find the VBIOS:

$ ./vbiosfinder extract /home/work/rom/VBiosFinder/n1uuj21w.exe                                                                                                                                                                                              
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                                                                                                                                                                                                                    
found UEFIExtract archive                                                                                                                                                                                                                                     
trying to extract ./app/406E3.PAT                                                                                                                                                                                                                             
found UEFIExtract archive
trying to extract ./app/406E8.PAT
found UEFIExtract archive
trying to extract ./app/506E3.PAT
found UEFIExtract archive
trying to extract ./app/506E8.PAT
found UEFIExtract archive
trying to extract ./app/64bit/tpnflhlp.sys
found UEFIExtract archive
trying to extract ./app/806E9.PAT
found UEFIExtract archive
trying to extract ./app/906E9.PAT
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/BootX64.efi
found UEFIExtract archive
trying to extract ./app/Instruction JP - BIOS flash USB memory key.txt
found UEFIExtract archive
trying to extract ./app/Instruction US - BIOS flash USB memory key.txt
found UEFIExtract archive
trying to extract ./app/N1UET72W/$0AN1U00.FL1
found UEFIExtract archive
trying to extract ./app/N1UET72W/$0AN1U00.FL2
found UEFIExtract archive
trying to extract ./app/SHELLFLASH.EFI
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/chklogo.exe
found UEFIExtract archive
trying to extract ./app/chklogo.exe.config
found UEFIExtract archive
trying to extract ./app/mkusbkey.bat
found UEFIExtract archive
trying to extract ./app/wininfo.exe
found UEFIExtract archive
trying to extract ./app/wininfo64.exe
found UEFIExtract archive
trying to extract ./mkmf.log
found UEFIExtract archive
trying to extract ./n1uuj21w.exe
found UEFIExtract archive
filtering for modules...
got 2872 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
coderobe commented 5 years ago

Ah, indeed - now that's a different issue - UEFITool new_engine HEAD appears to be broken or behave differently, the last known working commit of UEFITool is 616464ba2901880942cd8d8e5685b510db985719.

I'll have to bisect UEFITool and figure out why this is happening. In the mean time you can build UEFIExtract from the tree at that commit to work around this issue.

brandsimon commented 5 years ago

Thank you very much. I have my files now :)

Found VBIOS for device 10de:1436!
Found VBIOS for device 10de:13b6!
Found VBIOS for device 8086:0406!
Found VBIOS for device 10de:13b6!

I used UEFIDump instead of UEFIExtract from that commit, because I was not able to build it UEFIExtract" does not appear to contain CMakeLists.txt

stzokev commented 5 years ago

@brandsimon Why do you need the vbios for P51, when it is soldered to the mobo? I always thought this tool is handy only for people meddling around with MXM based cards..

coderobe commented 5 years ago

@stzokev the connector doesn't really matter, if your vbios is loaded from the firmware you'll have no luck extracting it from the card itself

stzokev commented 5 years ago

@brandsimon @coderobe Linux is not my platform of choice, so I must be missing some simple step. Already followed instructions in README by the letter, but when I try to extract this exact bios (because I know it works, tested by you both) I get nowhere:

silver@Sneak:/mnt/c/Users/Silver/Desktop/VBiosFinder-master$ ./vbiosfinder extract /mnt/c/Users/Silver/Desktop/VBiosFinder-master/n1uuj21w.exe
output will be stored in '/mnt/c/Users/Silver/Desktop/VBiosFinder-master/tmp-vbiosfinder'
checking for ruby... yes

checking for innoextract... yes
checking for upx... yes
checking for 7z... yes
trying to extract ./n1uuj21w.exe
extracting uefi data
trying to extract ./mkmf.log
found UEFIExtract archive
trying to extract ./n1uuj21w.exe
found UEFIExtract archive
filtering for modules...
got 6 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

I can confirm UEFIExtact is added to PATH and also present in 3rdparty folder. I am using prebuild UEFIExtract binary for linux from here (https://github.com/LongSoft/UEFITool/releases/download/t20190120/UEFIExtract_NE_A54_linux_x86_64.zip)

Using Ubuntu subsystem on Windows 10. Appreciate any help!

stzokev commented 5 years ago

I give up .. I re-cloned your repo, built UEFIExtract from the new_engine source and still no cigar. I even tried with the binary from 616464ba2901880942cd8d8e5685b510db985719 commit, which you say is working properly, but still a no-go. Shouldn't VBiosFinder throw an error if it can't find/use one of its dependencies? Cause clearly all it needs is there, but it would not work, which makes it look really unreliable - how is one to know when the tool is quirky and when there is simply no vbios image in the input?

Please help!

coderobe commented 5 years ago

@stzokev i have used vbiosfinder on several laptops running different operating systems and i really can't reproduce your issue. on your last output snippet it looks like innoextract is not working.

anyways, there's a rewrite of vbiosfinder on my to-do list - that one will hopefully be easier to use.

stzokev commented 5 years ago

@coderobe But your dependency notifier checks and says its there. I also tried purging and installing it again, also copied it from /usr/bin to /3rparty .. nothing helped. So apparently your tool checks that it is there, but can't use it for some reason.