BIOSの隠しメニューへアクセスして設定変更する方法(1) BIOS ROMダンプ

2023-01-14
  • B!

PC

Windows以外のOSを動かす時や規格外のパーツを取り付ける場合、BIOS設定のカスタマイズが必要となることがあります。(注)ここで言うBIOS設定とは昔の伝統的なBIOSではなくUEFI起動時の設定画面のことです。

BIOS config
自作用マザーボードはBIOS設定でカスタムできる項目がたくさん

マザーボードを買ってきて自作したPCであれば、このスクリーンショットのようにBIOS設定を細かくカスタマイズできるのですが、、、問題は市販の特にノートPC。既製品のPCはWindowsを安定動作させることが優先ですからBIOS画面に入っても設定変更ができる項目は多くありません。メーカー推奨値のBIOS設定に内部値が固定されておりカスタマイズはほとんどできないことが基本です。

(例えばGPD Pocket 3の場合、TDP設定ぐらいしかカスタマイズができません)

まぁ実際のところカスタマイズなどできなくても普段使いで困ることはないのですが、、、市販PCにWindows以外のOSをインストールしたり、特殊な周辺機器を接続するときにBIOS設定のカスタマイズが必要となることがあるのですよ。

目次

BIOSメニューにない項目の設定変更の方法

手順のコンセプト

手順をざっくり先に書くと、BIOS設定画面に出ていない項目は通常とは異なる方法でBIOSへアクセスすることで変更することができます。このようの方法は昔のBIOSでは難しかったのですが、UEFIで比較的楽にできるようになりました。

UEFIはソフトウェアのアーキテクチャが規格化されていて、設定画面のUIはフロントエンドのレイヤとして仕様が定義されています。UIのレイヤがあるおかげで、例えばRAID PCIカードをマザーボードに挿して電源を入れるとUEFIにRAIDカードの設定メニュが追加で出てくる・・・というような柔軟な運用が可能となるのです。

このように設定画面のUIレイヤが分離されているメリットは大きく、メーカーPCのBIOS画面の開発にも柔軟性が出るのです。世の中に出回っているマザーボードや既製品PCのUEFIのほとんどはAMI(American Megatrends Inc.)社やAward社製で、各メーカーのPCはそれら標準的なUEFIソフトウェアから不要なUI項目を非表示にさせた状態にして出荷されています。ということは、UEFIの詳細設定は設定画面に表示されていないだけで内部をいじれば設定変更が可能なのです。

すなわちUEFI画面に表示されていない設定パラメーターに対して設定画面UIではない別の方法でアクセスすることができれば、BIOS隠しメニューの設定変更が可能になります。

手順の概要

BIOS隠しメニューへたどり着くための詳しい手順は、次のように4ステップになります。

  1. BIOSのROMデータのダンプを入手
  2. ダンプデータからUEFIのUI設定情報を取得
  3. 非表示のUI設定項目のアドレスを解析
  4. BIOSのUIを介さずにUEFIのCUIから直接BIOS設定を変更
さらっと書いていますが始めるとそれなりに手数が多い手順になるので、順を追って詳しく説明していきます。では「1.のBIOS ROMデータのダンプを入手」をやってみます。

BIOS ROMダンプの入手

BIOS設定の調整

BIOS ROM吸い出しのソフトウェアを使用する前に、BIOS画面でSecure BootをOFFにしておきます。こうしておくとBIOSのプロテクトが外れ、BIOSをhackするソフトウェアが使用可能になります。

CHIPSECを入手

吸い出し作業に使用するCHIPSECというツールを入手します。CHIPSECとはBIOSやキーバッファレベルのセキュリティチェックをするためのツールです。

ホームページのダウンロードリンクをたどり、CHIPSECのgithubレポジトリから一式を入手します。Releasesからソースコードzipをダウンロードするのが手っ取り早いです。

CHIPSEC起動USBメモリを作る

CHIPSECのソースファイル一式を入手したら、UEFI Shellから起動する手順の通りにセットアップします。

FAT32フォーマットのUSBメモリを用意して、以下のようなディレクトリ構成でファイルを配置します。

CHIPSEC dir

最初にUSBメモリ直下にフォルダを作ります

/chipsec
/EFI
/EFI/BOOT

CHIPSECソース内の__install__/UEFI/chipsec_py368_uefi_x64.zipを解凍すると出てくる2つのフォルダStdLibとToolsを/EFI配下に置きます。

以下からダウンロードしたShell.efiを"BOOTx64.efi"にリネームして、/EFI/BOOT内に置きます。USB起動するとUEFI Shellが起動するようになります。

https://github.com/tianocore/edk2/blob/UDK2018/ShellBinPkg/UefiShell/X64/Shell.efi

CHIPSECのソースコード直下にあるchipsecフォルダをUSBメモリの/chipsec配下におきます。同様にchipsec_main.pyとchipsec_util.pyも配置します。それ以外のソースファイルは使用しません。

以上で起動USBの準備は完了です。

USBメモリから起動する

作成したUSBメモリからPCを起動します。BIOSでUSBメモリ起動を有効にしておくことをお忘れなく。

BIOS ROM吸い出し

UEFI Shellが起動します。UEFI ShellとはOSが起動する前にUEFIレベルで使用することができるShellです。レガシーBIOS起動と異なりUEFIブートはIシェルのような外部ソフトウェアを走らせることができるのです(若い人はUEFIのパソコンしか見たことがないと思うので年寄り向けの情報です)。

USBディスクへ移動
> fs0:

CHIPSECを実行。BIOSダンプファイルbios.binを保存
> cd chipsec
> python368.efi chipsec_util.py spi dump bios.bin

これでBIOS ROMダンプデータbios.binがUSBメモリに保存されます。この後、取得したBIOSダンプを解析してBIOS設定UIを経由せずに直接設定を変更する裏口を探す作業を行います。

それにしてもUEFI shell上でPythonが動くとは軽く驚きました。

先ほど書いた一連のコマンドを実行した画面を参考に載せておきます。UEFIシェル画面のスクリーンショットです。

UEFI shell

以上の手順で無事にBIOS ROMダンプを取得できました。続きの次回ではBIOS ROMダンプを解析して隠しメニュー情報を抽出します。<次回へ続くリンクはこちら>

Profile

Profile header image


ampspeed

炎上している開発プロジェクトの火消し屋をやってます。

サイト内検索