如何從此 DOS exe BIOS 更新程式中提取 ROM 檔案?

如何從此 DOS exe BIOS 更新程式中提取 ROM 檔案?

我正在嘗試更新我的 DELL VOSTRO 260 BIOS。我正在努力去任何地方,請參閱以了解更多資訊:

我決定直接提取flashrom。我並不是要執行刷新步驟,只是從 exe 中提取 ROM。因此,如果我下載 exe 並嘗試使用osemu 運行它,我會得到以下結果:

$ 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

這意味著什麼?有人設法從這些 exe 中提取實際的韌體嗎?我找不到任何有效的東西:

$ unrar l MS-A10.exe 

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

MS-A10.exe is not RAR archive

或者

$ 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.

以供參考:

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

如何從這個自解壓縮 DOS exe 中提取 ROM 檔案?

答案1

其實這很簡單,只需在 wine 下運行即可:

$ wine MS-A10.exe

輸出將在 .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

和:

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

我想這對於嘗試進行此 BIOS 更新的人來說沒什麼興趣,您應該知道使用 Win7/32 位元修復碟不是一個選擇(我按照以下說明進行操作)這裡)。事實上,運行時所需的 DLL 需要找到 oledlg.dll:

$ 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

顯然 Win7/32 位元修復盤中不存在此 DLL。

答案2

有一個命令列開關可以提取 ROM(可能需要 Windows):

MS-A10.exe /writeromfile

答案3

當您執行帶有額外參數“-”的 EXE 檔案時,輸出是什麼? ?
您可能會獲得可用命令列選項的清單。

如果它是用舊版的 DOS 版 RAR 製作的,那麼通常「-x」只會執行提取操作,而不會在之後立即嘗試執行 BIOS 刷新程式。

無論如何:您將永遠無法在 Linux 環境中執行基於 DOS 的快閃記憶體實用程式。這實際上是導致您看到的 SMBios 訊息的原因。這意味著它無法找到 BIOS 晶片。像 dosmu 這樣的模擬器不會有幫助。它無法為 DOS 命令提供對硬體的必要低階存取。

最好的選擇似乎是使用 FreeDOS 建立 USB 啟動棒或可啟動 CD,並從中運行 EXE。這根本不需要解壓縮 EXE。 (從只讀媒體運行時,您必須設定 FreeDOS 來製作 RAM 磁碟並從那裡運行 EXE。它將需要一個可寫工作目錄來將 BIOS 檔案提取到其中。)

相關內容