Como faço para extrair o arquivo ROM deste atualizador de BIOS DOS exe?

Como faço para extrair o arquivo ROM deste atualizador de BIOS DOS exe?

Estou tentando atualizar meu BIOS do DELL VOSTRO 260. Estou lutando para chegar a algum lugar, veja para mais informações:

Decidi simplesmente extrair o flashrom diretamente. Não estou tentando executar a etapa de flashing, simplesmente extrair a ROM do exe. Então, se eu baixar o exe e tentar executá-lo usando o Dosesmu, aqui está o que recebo:

$ wget http://downloads.dell.com/FOLDER01639275M/1/MS-A10.exe
$ dosemu -dumb MS-A10.exe > log
$ cat log
SfxDos v2.11. [2012/06/25]
Extracting Files: [6174382 / 6174382] 100%  
Missing SMBIOS Table

O que isso significa ? Alguém conseguiu extrair o firmware real desses exe? Não consegui encontrar nada funcionando:

$ unrar l MS-A10.exe 

UNRAR 5.00 beta 8 freeware      Copyright (c) 1993-2013 Alexander Roshal

MS-A10.exe is not RAR archive

ou

$ unzip -l MS-A10.exe 
Archive:  MS-A10.exe
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of MS-A10.exe or
        MS-A10.exe.zip, and cannot find MS-A10.exe.ZIP, period.

Para referência:

$ file MS-A10.exe 
MS-A10.exe: MS-DOS executable

Como faço para extrair o arquivo ROM deste exe DOS auto-extraível?

Responder1

Na verdade, isso foi trivial, basta executá-lo no vinho:

$ wine MS-A10.exe

A saída será encontrada no diretório .wine:

$ find $HOME/.wine | grep MS-A10
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AFUWIN.EXE
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AMIFLDRV.VXD
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AMIFLDRV64.SYS
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AMIFLDRV32.SYS
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/RosaBUU.exe
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/Pmxdll.dll
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/Idrvdll.dll
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/FWUpdLcl.exe
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/settings.ini
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/error.log
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/1176upd.BIN
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AFUWINx64.EXE
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/RosaBUU.log
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/MS-A10.BIN
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/FWUpdLcl64.exe

com:

$ file MS-A10.BIN
MS-A10.BIN: Intel serial flash for PCH ROM

Eu acho que isso tem pouco interesse para quem está tentando fazer esta atualização do BIOS, você deve estar ciente de que usar um disco de reparo Win7/32bits não é uma opção (segui as instruções deaqui). Na verdade, a DLL necessária em tempo de execução requer que oledlg.dll seja encontrado:

$ objdump -x RosaBUU.exe  | grep DLL
 vma:            Hint    Time      Forward  DLL       First
    DLL Name: dbghelp.dll
    DLL Name: KERNEL32.dll
    DLL Name: USER32.dll
    DLL Name: GDI32.dll
    DLL Name: COMDLG32.dll
    DLL Name: WINSPOOL.DRV
    DLL Name: ADVAPI32.dll
    DLL Name: SHELL32.dll
    DLL Name: COMCTL32.dll
    DLL Name: SHLWAPI.dll
    DLL Name: oledlg.dll
    DLL Name: ole32.dll
    DLL Name: OLEAUT32.dll

Aparentemente, esta DLL não está presente em um disco de reparo Win7/32bits.

Responder2

Há uma opção de linha de comando para extrair a ROM (pode exigir Windows):

MS-A10.exe /writeromfile

Responder3

Qual é a saída quando você executa o arquivo EXE com parâmetro extra "-?" ?
Você pode obter uma lista de opções de linha de comando utilizáveis.

Se for feito com uma versão antiga do RAR para DOS, normalmente "-x" faria apenas uma extração, sem tentar executar o pisca-pisca do BIOS imediatamente depois.

De qualquer forma: você nunca será capaz de executar o utilitário flash baseado em DOS em um ambiente Linux. Na verdade, isso está causando a mensagem SMBios que você está vendo. Isso significa que não é possível localizar o chip BIOS. Um emulador como o Dosesmu não ajudará. Ele não pode fornecer ao comando DOS o acesso de baixo nível necessário ao hardware.

A melhor opção seria criar um stick de inicialização USB ou CD inicializável com FreeDOS e executar o EXE a partir dele. Isso não exigirá a descompactação do EXE. (Ao executar a partir de uma mídia somente leitura, você terá que configurar o FreeDOS para criar um disco RAM e executar o EXE a partir daí. Será necessário um diretório de trabalho gravável para extrair o arquivo BIOS.)

informação relacionada