UEFI BIOSの変更、パート2:便利な変更

この記事では、UEFI BIOSの最も一般的で有用な変更、それらの使用条件および検索方法について説明します。 さらに、 第1部で説明したUEFIToolユーティリティのライトはまだ機能していません。そのため、さまざまなメーカーのUEFI BIOSを変更するために使用される他のプログラムについて説明します。

このトピックに興味がある場合は、catにようこそ。



はじめにおよび別の免責事項



SPIプログラマーの必要性と、すべての変更を自分の危険とリスクで行うという事実について、私が繰り返し言ったくないので、突然読んでいない場合は、 読んで戻ってください。

この時点から、失敗したファームウェアからの回復に問題はなく、UEFIToolにも精通していると思うので、「イメージからファイルを抽出する方法」や「そのとき挿入する方法」などの技術的な問題については触れません。 。



必要なツール



UEFI BIOSイメージを正常に変更するには、次のツールが必要になる場合があります。

  1. お好みの16進エディタ。
  2. UEFIイメージエディターは、明らかな理由でUEFIToolを使用しますが、PhoenixTool(ユニバーサルで十分にデバッグされていますが、制限はありません)またはMMTool(多かれ少なかれAMI Aptioイメージでのみ動作します)も使用できます。
  3. 必要な変更のための永続的なパターンがない場合、x86-64をサポートするアセンブラーと逆アセンブラーが必要になる場合があります。 アセンブラーは非常にオンラインですが、逆アセンブラーには通常のアセンブラーが必要です。そうしないと、変更点の検索に時間がかかる可能性があります。

    残念ながら、無料版のIDA Proは64ビットPEファイルの解析をサポートしていないため、Windowsの場合はMicrosoftコンパイラに含まれるdumpbinユーティリティを使用することをお勧めします。MacOSXの場合はobjdumpまたはHopper Disassemblerの試用版を使用します。
  4. UEFIプラットフォームのメーカーのユーティリティで変更を実行できる場合は、それを実行します。手動で行うよりも信頼性が高くなります。 残念ながら、「これらの革命家の輪は狭く、人々からひどく遠い」ため、ほとんどの場合、メーカーからの適切なユーティリティはありません。




修正



序文はこれで十分ですので、修正自体に進みましょう。 ここでは、自分でテストした変更のみを説明するため、リスト必ずしも不完全です。 他のmodを試した場合は、コメントで結果を共有してください。 記述形式は次のとおりです。修正の名前または修正のクラス、目的、および必要な手順の簡単な説明。 行こう



CPU PMパッチ、MSR 0xE2ロックの削除

内容 :POSTを渡した後、LOCKビット(0x0F)の設定をレジスタMSR_PMG_CST_CONFIG_CONTROL(0xE2)にバイパスする

理由 :オープンレジスタ0xE2は、MacOS XのCPU電源管理サブシステムの動作に必要です。クローズすると、カーネルパニックが発生します。 インストールする予定がないか、Unified C-State MSRがUEFI BIOSに存在する場合、この変更は不要です。

参照先 :CPU関連のUEFIドライバー。 古いBIOSでは、ロックインストールコードはCpuPeiモジュール、新しいBIOSでは、PowerManagementモジュールにあります(PowerManagement2.efiまたはPowerMgmtDxe.efiと呼ばれることもあります)。

変更方法 :CpuPeiでは、変更するコードは次のようになります。

  81 FB D0 06 02 00 cmp ebx、206D0h
 75 0C jne FFFE426E
 0D 00 80 00 18またはeax、18008000h; ビット15(LOCK)がここに設定されます。
 EB 05 jmp FFFE426E
 0D 00 80 00 00またはeax、8000h; またはここ
 6A FFプッシュ0FFFFFFFFh
 6A F8プッシュ0FFFFFFF8h
 6A 00プッシュ0
 50プッシュeax
 56プッシュESI
 E8 DC 0F 00 00呼び出しFFFE5257; そして、この関数の中にはwrmsrがあります 
ロックのインストールをバイパスするには、この場所で00800018を00000018に、00800000を00000000に置き換えるだけで十分です。



PowerManagementでは、コードは異なって見えますが、ほとんどの場合、次のようになります。

  80 FB 01 cmp bl、1;  BL == 1の場合
 75 08 jne 0000000180002700; 次の2つのチームを飛び越える
 0F BA E8 0F bts eax、0Fh; ビット15(ロック)を設定
 89 44 24 30 mov dword ptr [rsp + 30h]、eax; 結果をスタックの変数に保存する 
 48 8B 54 24 30 mov rdx、qword ptr [rsp + 30h]; この変数からRDXに値をロードします
 B9 E2 00 00 00 mov ecx、0E2h;  ECXのMSR番号
 E8 79 0C 00 00コール0000000180003388; そして、内部でwrmsrで関数を呼び出します 
JNEをJMPに、BTSをBTRに、または単にすべてのロック設定コードを「スクープ」することができます。 最初に行う最も簡単な方法、つまり 75 08をEB 08に変更します。



UEFI BIOSでそのようなコードが見つからなかった場合は、CPU Power Managementに関連するドライバーで0xE2を探し、15番目のビットを設定するためにコード全体を確認します。 最新の一部のデスクトップAMIボードの最新のBIOSバージョンでは、このレジスタをロックしなくなったため、このコードはもう見つかりません-メーカーがこのmodを作成したことを考慮してください。



AES NIロック解除

内容 :LOCKビット(0x02)のMSRレジスタ0x13Cへの設定のバイパス

理由 :輸出制限のあるシステムでAESハードウェアアクセラレーションを有効にする

参照先 :CPU関連のUEFIドライバー、ほとんどの場合PowerManagement

変更方法 :PMパッチとはほとんど異なり( Habréで既に説明されています )、詳細については説明しません。



ホワイトリストの削除

内容 :一部のラップトップメーカーがUEFI BIOSで使用する互換性のあるハードウェアのホワイトリストをバイパスします。

理由 :メーカーのアイデアは明確です-「互換性のない」機器の所有者に、互換性のある互換性のあるブランド変更を販売することもできます。 あなた自身があなたのラップトップと互換性のある機器を決定したい場合-この変更はあなたのためです。

参照先 :PCIeデバイスに関連するUEFIドライバー。 HPの場合、このドライバーは通常BiosLockPcieと呼ばれ、Lenovoの場合はLenovoWmaPolicyDxe.efiですが、別の名前で呼ばれることもあります。

変更方法 : ノートブックメーカーはホワイトリストの検証コードをより頻繁に変更しようとしていますが、永続的な方法を説明するのはかなり困難です。

一般的な検索戦略は次のとおりです。
  1. 互換性のないカードをノートブックに挿入し、ロードできないことに関するメッセージを待って、それを覚えておいてください。
  2. FFSファイルの1つでこのメッセージを見つけます。
  3. このメッセージを参照するコードを見つけます。
  4. このコードを調べて、チェックが常に正常に終了するように変更してください。 これには2つの方法があります。移行にパッチを適用するか、ベンダーIDとデバイスIDをホワイトリストに追加します。


HPの例の修正の詳細は、モダーサークルで広く知られているDonovan6000 同志によってここで詳しく説明されています。LenovoX121Eの例の修正の変形について説明します。

検証はLenovoWmaPolicyDxe.efiドライバーによって実行されます。ここにアクセスする必要があります。

  44 38 0D F0 0F 00 00 cmpバイトptr [00001BF0h]、r9b
 75 18 jne 0000000000000C1A
 E8 35 FD FF FFコール000000000000093C
 48 85 C0テストrax、rax
 4C 8B C8 mov r9、rax
 0F 88 77 FF FF FF js 0000000000000B8A
 C6 05 D6 0F 00 00 01 movバイトptr [00001BF0h]、1
 49 8B C1 mov rax、r9
 E9 68 FF FF FF jmp 0000000000000B8A 
このコードへの移行はすべて無条件にパッチを適用する必要があり、コード自体では、1行目と2行目を「スクープ」する必要があります。その後、チェックは常に正常に終了します。



BIOSロックの削除

内容 :組み込みのプログラマーによる、変更されたUEFIイメージのファームウェアからの保護の削除。

理由 :UEFIでの多数の実験では、プログラマーの獲得は毎回すぐに退屈し、組み込みプログラマーではファームウェアが高速になります(外部プログラマーの場合は通常のSPIではなくQuadSPIプロトコル操作のため)。

参照先 :チップセットドライバー、ほとんどの場合PchInitDxe(modの別のバージョンはBiosWriteProtectにあります)

変更方法 :PchInitDxeの変更バリアントは、 ここでは英語で完全に説明さているため、アイデアのみを示します。 チップセットのBIOS_CNTLレジスタでBIOSロックイネーブル(BLE)ビットレコードを見つけて防止する必要があります。 これは、たとえば次のようないくつかの場所で実行できます。

  48 8B 4C 24 40 mov rcx、qword ptr [rsp + 40h];  PchPlatformData構造体アドレスをRCXにロードします
 48 8B 41 50 mov rax、qword ptr [rcx + 50h];  RAXでは、LockdownConfig子構造のアドレス
 F6 00 10テストバイトptr [rax]、10h;  5番目のビットが設定されているかどうかを確認します(BiosLock) 
 74 25 je 0000000180001452; インストールされていない場合は、以下のすべてのコードを飛び越えてください
 8A 50 01 mov dl、バイトptr [rax + 1]
 B9 B2 00 00 00 mov ecx、0B2h; 
 E8 A2 5A 00 00コール0000000180006EDC
 4C 8D 87 DC 00 00 00 lea r8、[rdi + 000000DCh];  RDIはチップセットのLPCレジスタのベースアドレスであり、0xDCはBIOS_CNTLレジスタオフセットです。
 33 C9 xor ecx、ecx
 4C 8B CD mov r9、rbp
 33 D2 xor edx、edx
 4C 89 44 24 20 mov qword ptr [rsp + 20h]、r8
 E8 AA 76 00 00 call 0000000180008AFC; ロックを設定 
JEをJMPに変更できますが、場合によってはショートジャンプの代わりにオフセットを追加で計算する必要がある長いジャンプを取得するため、テストをZFフラグを設定するコマンド(xor rax、rax(48 31 C0)、および可能なサイズの違いなど)に変更することをお勧めしますNOPを追加して修正するコマンド。

必要なコードがPchInitDxeで見つからなかった場合、その中にあるSMIハンドラーの登録をバイパスするようにBiosWriteProtectドライバーを変更できます。これにより、リセットしようとするとBLEビットが設定されます。その後、このビットをクリアしてファームウェアをアンロックします。 上記の方法はうまく機能するので、このオプションはまだ試していません。したがって、詳しく説明しません。



詳細設定のロック解除

内容 :非表示のBIOSセットアップ設定へのアクセスのロック解除。

理由 :これらの設定の中で、何か面白いものに出くわすことがありますが、通常は理由が隠されています。

探す場所 :PhoenixおよびInsydeの場合、メニューはSetupMain、SetupAdvancedなどの名前でHIIファイルに保存されます。 AMIの場合、メニューはセットアップファイルに保存され、設定はAMITSEに保存されます。 さらに、AMIはそのエンドユーザー製品をAMIBCPプログラムに提供しますが、そのバージョンはしばしば公開されます。 それでの作業は非常に簡単なので、それを説明する意味がわかりません-ダウンロードして試してください。

修正方法 :AMIの場合-AMIBCPで画像を開き、デフォルト設定を変更し、保存、フラッシュ、工場出荷時設定へのリセット、完了。 InsydeとPhoenixの場合、事態はもう少し複雑です。 NVRAMへの書き込みアクセスが拒否されない場合は、 この記事で説明されているFalseclock同志の方法を使用できますが、アクセスがない場合は、ファームウェアを変更する必要があります。 HIIフォームファイル形式を手動で解析するか、上記の記事で説明したスクリプト、またはUEFIイメージから抽出されたHIIファイルに設定する必要があるユニバーサルIFR Extractorユーティリティにこれを提供する必要があります。 その後、抽出されたHIIフォームファイルのSUPRESS_IF条件を変更して、実行されず、すべてのメニューが使用可能になるようにします。



CPUマイクロコード、OptionROM、ドライバーおよびイメージの更新

内容 :CPUのマイクロコード、各種周辺機器のファームウェア、EFIドライバー、およびブート時およびBIOSセットアップで表示されるイメージの更新。

理由 :更新はシステムのエラーの修正に役立つ場合があり、重要な機能(たとえば、RAID0のSSDのトリム)のサポートが追加される場合がありますが、ほとんどの場合、新しいバージョンが最終的にリリースされたために更新が行われます。

探す場所 :メーカーに大きく依存し、EFIドライバーは名前で簡単に見つけることができます(たとえば、SataDriver)、マイクロコードは設計対象のプロセッサーのモデルIDで、OROMは提供するデバイスのVID / DIDで、フォーマットの写真でJPEGは、文字列「JFIF」、GIF、「GIF8」などで見つけることができます。

修正方法 :簡単に変更できます-パブリックドメインで新しいバージョンを見つけ、古いバージョンがイメージ内のどこにあるかを見つけ、別のバージョンに置き換えます。 MMToolユーティリティに基づく自動更新のコンパニオンはLS_29によってAMI用に作成されました。overs に関するトピックからダウンロードできます。 PhoenixやInsydeの自動化されたソリューションについて聞いたことがありません。

画像の置換は、AMI ChangeLogoなどのユーティリティを使用するか、手動で行うことができますが、多くの場合、特別に準備された画像ではないため、画像がフリーズします。 画像形式デコーダーは非常に限られています。 一般に、事前にEXIFデータを削除することをお勧めします。



おわりに



この記事では、自分の手で成功したMODのみを説明しました。 コメントや追加がある場合-私はあなたのコメントに喜んでいるでしょう。

繰り返しになりますが、Habr政権とUFOに個人的にUEFIハブの作成について質問します。これは非常に幅広いトピックであり、文字通り記事を掲載する場所がないためです。

ご清聴ありがとうございました。変更が成功することを願っています。



All Articles