Efiguardは、PatchGuardおよびドライバーの署名施行(DSE)を無効にするために、Windows Boot Manager、Boot Loader、およびKernelにブートタイムにパッチを適用するポータブルX64 UEFI BootKitです。
efiguardを試してみたい場合は、使用してスキップしてください。
現在、Vista SP1からWindows 11まで、これまでにリリースされたWindows X64のすべてのEFI互換バージョンをサポートしています。
使いやすい:Windowsを自動的に見つけて起動するローダーを介して、USBスティックまたはWindows EFIパーティションから起動できます。ドライバーは、UEFIシェルまたはローダーのいずれかを使用して、手動でロードおよび構成することもできます。
Zydis Runasembler Libraryを広範囲に使用して、署名マッチングで可能なものよりも堅牢な分析をサポートするために高速ランタイム命令デコードをサポートします。
受動的に動作する:ドライバーはWindows Boot Managerをロードまたは起動しません。代わりに、ブート選択メニューまたはローダーなどのEFIアプリケーションを介して、ファームウェアブートマネージャーによってbootmgfw.efiの負荷に基づいて動作します。非ワインドOSが起動されている場合、ドライバーは自動的に自動的にアンロードされます。
bootmgfw.efi winload.efiではなくbootmgr.efi起動する場合の4段パッチングをサポートします。これは、WIMファイルがWinpe、Windowsセットアップ、またはWindowsリカバリモードを起動するためにロードされる場合です。
優雅な回復:パッチの障害の場合、ドライバーはエラー情報を表示し、ESCを押して起動を続けるか、再起動するように求められます。最後のパッチステージがExitBootServicesが呼び出される前に行われるため、これは最終カーネルパッチステージまででも当てはまります。多くのuefi Windows BootkitsフックOslArchTransferToKernelは、パターンマッチングで簡単に見つけることができますが、 ExitBootServices後に保護されたモードで実行される関数です。これは、何かがうまくいかなかったことをユーザーに伝えるためのブートサービスが利用できないことを意味します。 efiguardはuefi bootkitですが、1つとしては始まりませんでした。 Efiguardはもともと、PDBシンボルとバージョン固有の署名を使用するのではなく、分解ベースのアプローチの実行可能性をテストすることを目的としたNTで実行されている(UPGDSEDに似ています)。 patchntoskrnl.cは、このオリジナルのデザインに非常によく似ています。このアプローチが成功した後にのみ、1年以上のWindowsアップデートでコードを必要としていないため、機能が能力と使いやすさをさらに向上させる方法として、Uefiが写真に入りました。
Bootkitアプローチによって提供される利点のいくつかは次のとおりです。
bcdeditを使用してブート構成ストアを変更する必要はありません。ImgpValidateImageHashにパッチを適用する必要はありません(ただし、これはまだオプションで行われます)。dbストアに個人的な証明書を追加できる場合、セキュアブートを有効にすることができます。 efiguardのブートキットとしての最初の化身は、Dude719のuefi-bootkitをWindows 10の最近のバージョンで動作させるための試みでした。私は最終的にこれを機能させましたが、主にOslArchTransferToKernel引っ掛ける選択のために結果に満足していませんでしExitBootServices 。これとは別に、私はWindows 10のバージョンのいくつかのパッチを適用できることに満足していませんでした。 Bootkitに、これまでにリリースされたWindows X64のすべてのEFI互換バージョンで作業することを望んでいました。このため、Bootkitを次の目的でゼロから書き直しました。
上記の図に、最終的なエフィガードブートフローの全体像の概要を示しています。個々のコンポーネント固有のフックとパッチについては、ソースファイルのEfiGuardDxe/PatchXxx.c参照してください。ドライバーの初期化/アンロード、EFIブートおよびランタイムサービスフックについては、efiguarddxe.cを参照してください。
EfiguardはGPLV3の下でライセンスされています。 EfiGuardDxe/Zydisサブモジュールのファイルは、MITライセンスの下でライセンスされています。