BIOSを消してしまい、起動しなくなったパソコンの復旧の記録。
復旧したのは Lenovo G580(26897LJ)。
なお、下記手順を踏まず、ネット上に転がっている他人のBIOSに本ページ後半に記載される 00504624-8A59-4EEB-BD0F-6B36E96128E0 の箇所を自分のPCの情報に書き換えればそれでも復旧できる。
UEFI/BIOSの構成
G580 の UEFI/BIOS のサイズは8MBで、下記3つのリージョンで構成されている。
- Descriptor region(アドレス 0x000000~0x000fff)
各リージョンの位置が設定されている。 - ME region(アドレス 0x001000~0x03ffff)
Intel ME ファームウェア - BIOS region(アドレス 0x040000~0x7ffff)
BIOS
この中でPC固有の情報が格納されているのが BIOS region。
たまたま、OS上からIntel FPTでバックアップしていたため、固有情報が復元できた。
ちなみに、Intel FPTはIntel ME System Toolsに含まれ、下記手順でダウンロード/実行できる。
- Intel ME System Toolsダウンロードページを開く
- 中腹(といってもかなり下)の C2. Intel (CS)ME System Tools にあるIntel ME System Tools v8 r3 をクリックする。
(他のバージョンがあるが、チップセットのシリーズに対応しているため利用不可。新しいバージョンというこではない。) - 遷移したダウンロードページの[ダウンロード]ボタンをクリックし、ダウンロードする。
- ダウンロードしたファイルを任意の場所解凍(rar形式。7zで解凍できる)する。
- 下記ディレクトリの FPT64.exe を コマンドプロンプトから実行する。
Intel ME System Tools v8 r3\Flash Programming Tool\Windows64
下記コマンドで各リージョンのバックアップ。
FPT64.exe -BIOS -D ファイル名
FPT64.exe -DESC -D ファイル名
(MEは読み込みが許可されていないため不可)
Descriptor リージョンの復元
OSからIntel FPTで取得したファイルがあれば、そのまま使用する。
が、無い場合、下記内容のファイルを作る。
G580のチップセットはHM76。Intel 7シリーズに当たる。
SPI Programmingに従った設定となっており、G580は下記の設定となっている。全体のサイズは4096バイトで、ここに出てこないアドレスには 0xFF が埋め込まれている。
Descriptor Signature and Map 0010: 5A A5 F0 0F 03 00 04 02 06 02 10 12 20 01 21 00 0020: 25 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF 0030: 24 00 30 09 00 00 00 00 00 00 00 00 FF FF FF FF 0040: 00 00 00 00 00 04 FF 07 01 00 FF 03 FF 1F 00 00 0050: FF 1F 00 00 FF FF FF FF FF FF FF FF FF FF FF FF 0060: 00 00 0B 0A 00 00 0D 0C 18 01 08 08 FF FF FF FF Flash Descriptor PCH Soft Strap Section 0110: 82 D6 20 08 0F 01 00 00 00 00 56 00 00 00 00 00 0120: 00 E0 C8 00 00 00 00 00 00 00 00 00 00 00 00 00 0130: 00 00 00 00 80 45 00 30 44 00 41 00 97 00 00 95 0140: 00 00 00 00 00 00 00 00 00 00 00 00 3E 03 00 00 0150: 00 00 00 00 02 00 00 00 FF FF FF FF FF FF FF FF Flash Processor Strap Base 0200: 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF Intel® ME Vendor Specific Component Capabilities Table 0DF0: EF 40 17 00 05 20 05 20 C2 20 17 00 05 20 05 20 0E00: 1C 30 17 00 05 20 05 20 20 BA 17 00 05 20 05 20 Descriptor Upper Map Section 0EFC: DF 08 00 00
これをバイナリエディタで作成することで復旧される。
MEリージョン
このリージョンはIntel ME ファームウェアでここからダウンロードしたファイルを元に復旧できる。
ファームウェアバージョンは 8.0.4.1441。
- 開いたページの、「B. Intel (Converged Security) Management Engine Firmware Repository」にある、「Intel ME 8 Firmware Repository r20 – (2018-07-07)」をダウンロードする。
- ダウンロードした Intel ME 8 Firmware Repository r20.rar ファイルを解凍する。
- 「8.0.4.1441_1.5MB_PRD_RGN.bin」をバイナリエディタで開き、全コピーする。
- Descriptorリージョンの直後、つまり、0x001000 にバイナリエディタでペーストする。
- ペーストした次のアドレスから 0x03ffff まで 0xff を埋める。
BIOSリージョン
このリージョンがBIOSを消してしまった場合に問題となるリージョン。
1台1台異なる情報が入っている。
- Lenovo G580(2689) BIOSアップデートサイトから、BIOSアップデートファイル(2020年10月時点 62cn97ww_64.exe)をダウンロードする。
- UEFIToolで開き、BIOS部分を取り出す。
下記のように 6C60EE00-C316-4C95-A684-CDC7E7033311 を右クリックし、”Extract body”を選択する。 - この 00504624-8A59-4EEB-BD0F-6B36E96128E0 が1台1台異なる情報が記録されている。
取り出したBODYは全て FF となっていが、ここに、モデル名、製品名、シリアルナンバー(S/N)、M/O、UUIDを下記のアドレスに値を埋め込む。
本体裏面の情報から復元できるが、UUIDだけはできない。
また、各項目の最後の1バイトはチェックサム(下記赤字箇所)で、項目+チェックサムの合計の00となる。下記以外は FF で問題ない。
02EFB8: 41 21 4B 41 00 00 00 00 00 00 00 00 00 00 00 12 → 識別子? "A!KA" 02EFC0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02EFC9: 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 FE → (不明) 02EFE8: 32 36 38 39 37 4C 4A 00 00 00 00 00 00 00 00 5A → モデル名 "26897LJ" 02EFF8: 57 42 30 37 36 35 34 33 32 31 57 42 30 31 32 33 34 35 36 51 00 00 00 00 00 00 00 00 00 00 00 7C → S/N + M/O "WB07654321WB0123456Q" 02F018: 4C 65 6E 6F 76 6F 20 47 35 38 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89 → 製品名 "Lenovo G580" 02F038: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02F048: 57 42 30 37 36 35 34 33 32 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CB → S/N "WB07654321" 02F088: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02F098: 11 22 33 44 55 66 11 E1 88 99 AA BB CC DD EE FF → UUID 11223344-5566-11E1-8899AABBCCDDEEFF 02F0A8: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
- この編集した 00504624-8A59-4EEB-BD0F-6B36E96128E0 を Replace Body で置き換える。
UEFI/BIOS書き込み
SPI Programmerの使用方法を参照し、生成したファイルを書き込む。