
تعطيل PatchGuard وDriver Signature Enforcement عند الإقلاع
EfiGuard هو بوتكيت UEFI محمول بتقنية x64 يقوم بتصحيح مدير الإقلاع ومُحمل الإقلاع ونواة ويندوز أثناء الإقلاع لتعطيل PatchGuard و Driver Signature Enforcement (DSE).
إذا كنت تبحث فقط عن تجربة EfiGuard، انتقل إلى الاستخدام.
يدعم حاليًا جميع إصدارات ويندوز x64 المتوافقة مع EFI التي تم إصدارها على الإطلاق، من Vista SP1 إلى Windows 11.
سهل الاستخدام: يمكن الإقلاع من USB أو من قسم EFI في ويندوز عبر مُحمل يقوم تلقائيًا بإيجاد وتشغيل ويندوز. يمكن أيضًا تحميل وتهيئة برنامج التشغيل يدويًا باستخدام إما UEFI shell أو المُحمل.
يستخدم مكتبة مفكك الشفرة Zydis بشكل مكثف لفك ترميز التعليمات السريع في وقت التشغيل لدعم تحليل أكثر قوة مما هو ممكن مع مطابقة التوقيعات، والتي غالبًا ما تتطلب تغييرات مع تحديثات النظام الجديدة.
يعمل بشكل سلبي: لا يقوم برنامج التشغيل بتحميل أو بدء تشغيل مدير إقلاع ويندوز. بدلاً من ذلك، يتفاعل مع تحميل bootmgfw.efi بواسطة مدير إقلاع البرامج الثابتة عبر قائمة اختيار الإقلاع أو تطبيق EFI مثل المُحمل. إذا تم إقلاع نظام تشغيل غير ويندوز، سيقوم برنامج التشغيل تلقائيًا بإلغاء تحميل نفسه.
يدعم التصحيح على أربع مراحل عندما يبدأ bootmgfw.efi تشغيل bootmgr.efi بدلاً من winload.efi. هذا هو الحال عند تحميل ملف WIM لتشغيل WinPE أو إعداد ويندوز أو وضع استرداد ويندوز.
استرداد سلس: في حالة فشل التصحيح، سيعرض برنامج التشغيل معلومات الخطأ ويطالب إما بمتابعة الإقلاع أو إعادة التشغيل بالضغط على ESC. هذا صحيح حتى مرحلة تصحيح النواة النهائية، لأن مرحلة التصحيح الأخيرة تحدث قبل استدعاء ExitBootServices. العديد من بوتكيتات UEFI لويندوز تقوم بربط OslArchTransferToKernel، والتي بالرغم من سهولة العثور عليها عبر مطابقة الأنماط، إلا أنها دالة تنفذ في الوضع المحمي بعد ExitBootServices. هذا يعني عدم توفر خدمات الإقلاع لإعلام المستخدم بوجود مشكلة.

محاكاة فشل التصحيح مع معلومات الخطأ
قابل للتصحيح: يمكنه إخراج الرسائل إلى مصحح النواة والشاشة (وإن كانت مخزنة مؤقتًا) أثناء مرحلة تصحيح النواة، وإلى منفذ تسلسلي أو الشاشة دون تخزين مؤقت أثناء مراحل تصحيح مدير الإقلاع ومُحمل الإقلاع. إذا تم تجميع برنامج التشغيل مع معلومات تصحيح PDB، فمن الممكن تحميل رموز التصحيح في أي نقطة بعد تهيئة HAL عن طريق تحديد قاعدة برنامج تشغيل DXE الافتراضي وتصحيحه كما تفعل مع برنامج تشغيل NT عادي.
تجاوزات DSE: متاحة إما كتعطيل DSE بنمط UPGDSED مباشر عند الإقلاع أو كخطاف على خدمة SetVariable() EFI runtime. هذا الأخير يعمل كباب خلفي لقراءة/كتابة في وضع النواة يمكن استدعاؤه من ويندوز باستخدام NtSetSystemEnvironmentValueEx ويسمح بتعيين g_CiEnabled/g_CiOptions إلى القيمة المطلوبة. يتم توفير تطبيق صغير بنمط DSEFix باسم EfiDSEFix.exe يمكن استخدامه لهذا الغرض. من الممكن أيضًا ترك DSE مفعلًا وتعطيل PatchGuard فقط. سيستخدم المُحمل طريقة خطاف SetVariable بشكل افتراضي، نظرًا لحقيقة أن بعض برامج مكافحة الغش ومكافحة الفيروسات لا تفهم الفرق بين الغش أو البرامج الضارة وبرامج التشغيل الموقعة ذاتيًا بشكل عام وتستهدف إصلاح UPGDSED.
يدعم النوى ومُحملي الإقلاع المعدلة على القرص عن طريق تصحيح ImgpValidateImageHash في كل مرحلة بالإضافة إلى ImgpFilterValidationFailure، والتي قد تقوم بإبلاغ بعض أنواع الانتهاكات بصمت إلى TPM أو ملف سجل SI.
يسمح بتشغيل Secure Boot مع ويندوز 7 (ليست مزحة!). ويندوز 7 نفسه غير مدرك لـ Secure Boot لأنه لا يدعمه، أو (رسميًا) حتى الإقلاع بدون CSM. هذا مفيد للأشخاص الذين يرغبون في استخدام ويندوز 7 على جهاز مقفل يتطلب WHQL Secure Boot. مقالة الويكي حول كيفية جعل هذا يعمل هنا.

WinObjEx64 على ويندوز 7 مع Secure Boot مفعل
SetVariable سيسبب خطأ SECURE_KERNEL_ERROR إذا تم استخدامه للكتابة إلى g_CiOptions.هناك طريقتان لاستخدام EfiGuard: الإقلاع باستخدام تطبيق المُحمل، الذي سيقوم بتحميل برنامج التشغيل وتشغيل ويندوز نيابة عنك، أو تثبيت برنامج التشغيل كإدخال UEFI driver ليتم تحميله تلقائيًا بواسطة البرامج الثابتة.
يمكن أن يكون تثبيت برنامج التشغيل أفضل في بعض التكوينات المتقدمة مثل الإقلاع المتعدد، لكن المُحمل هو الأسهل استخدامًا ويجب أن يعمل بشكل جيد في جميع التكوينات. انظر الجدول أدناه لأهم الاختلافات بين الطريقتين. إذا كنت غير متأكد، اختر تطبيق المُحمل.
| الموقع | التثبيت | قابلية التخطي؟ | أي نظام تشغيل يتم إقلاعه؟ | |
|---|---|---|---|---|
| UEFI Driver Entry | يجب أن يكون على ESP | عبر UEFI Shell | ❌ | نفس السابق |
| Loader | في أي مكان | غير مطلوب | ✔️ | ويندوز |
مقارنة المُحمل مقابل UEFI driver entry
EFI/Boot/Loader.efi إلى bootx64.efi.X:، يجب أن تكون مسارات الملفين الآن X:/EFI/Boot/{bootx64|EfiGuardDxe}.efiSetVariable (الافتراضي)، قم بتشغيل EfiDSEFix.exe -d من موجه أوامر المسؤول بعد الإقلاع لتعطيل DSE، أو قم بتشغيل EfiDSEFix.exe لرؤية القائمة الكاملة للخيارات.لاحظ أنك لا تحتاج إلى استخدام محرك أقراص منفصل للمُحمل. إذا كان مفضلاً، يمكنك تثبيت EfiGuard على ESP المثبت عليه ويندوز بالفعل. ومع ذلك، هذا أكثر تعقيدًا إلى حد ما حيث ستحتاج إلى إضافة إدخال إقلاع UEFI للمُحمل.
للقيام بذلك، قم بتثبيت ESP عند X: باستخدام mountvol X: /S واتبع الخطوات أعلاه، لكن لا تقم بإعادة تسمية المُحمل وانسخ كلا الملفين ببساطة إلى X:/EFI/Boot. بعد ذلك، ستحتاج إلى إضافة إدخال إقلاع UEFI يدويًا من UEFI Shell باستخدام bcfg boot addp 0 Loader.efi "EfiGuard"، أو بدلاً من ذلك باستخدام efibootmgr (لينكس)، أو EasyUEFI (ويندوز)، أو ما شابه ذلك.
X: باستخدام mountvol X: /S.EfiGuardDxe.efi إلى X:/EFI/Boot/EfiGuardDxe.efi.bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe".SetVariable (الافتراضي)، قم بتشغيل EfiDSEFix.exe -d من موجه أوامر المسؤول بعد الإقلاع لتعطيل DSE، أو قم بتشغيل EfiDSEFix.exe لرؤية القائمة الكاملة للخيارات.ملاحظة: اعتمادًا على البرامج الثابتة الخاصة بك، قد تحتاج إلى استخدام "addp" في الخطوة 3 بدلاً من "add". يُعرف أن VirtualBox يتطلب ذلك، وربما بعض البرامج الثابتة للوحات الأم أيضًا.