Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
BugChecker — مصحح نواة يشبه SoftICE لنظام Windows 11 | Kitploit
أدوات/GitHubGitHub/vitoplantamura/bugchecker
التحليل الديناميكي (عزل)الهندسة العكسيةمصممي الأخطاءتحليل الملفات الثنائية
GitHubvitoplantamura/bugchecker

BugChecker

مصحح نواة يشبه SoftICE لنظام Windows 11

عرض المستودع
1.1k144منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

BugChecker

مقدمة

BugChecker هو مصحح أخطاء kernel ومستخدم يشبه SoftICE لنظام Windows 11 (ويدعم أيضًا Windows XP: فهو يدعم إصدارات Windows من XP إلى 11، لكل من x86 وx64). لا يتطلب BugChecker جهازًا ثانيًا متصلًا بالنظام الذي يتم تصحيحه، كما هو الحال في WinDbg وKD. تستفيد هذه النسخة من BugChecker (على عكس النسخة الأصلية التي تم تطويرها قبل 20 عامًا) من واجهة برمجة التطبيقات الداخلية غير الموثقة KD في NTOSKRNL. تسمح واجهة برمجة التطبيقات KD لـ WinDbg/KD بإجراء استدعاءات مثل قراءة/كتابة الذاكرة الظاهرية، قراءة/كتابة السجلات، وضع نقطة توقف في عنوان، إلخ.

على النقيض من ذلك، كان BugChecker الأصلي، مثل SoftICE، "يستولي" على النظام عن طريق ربط العديد من واجهات برمجة التطبيقات kernel (سواء المصدرة أو الخاصة)، والتحكم في APIC، وإرسال IPIs، إلخ. هذا النهج يزيد من التعقيد بشكل هائل (ويقلل من استقرار النظام)، حيث يجب أن يكون التنفيذ متوافقًا مع جميع الإصدارات والإصدارات الفرعية المدعومة من Windows (على مستوى توقيع الوظيفة) بالإضافة إلى جميع تكوينات الأجهزة المدعومة الممكنة. علاوة على ذلك، بعد 20 عامًا، يجعل PatchGuard هذا الحل مستحيلًا.

على النقيض من ذلك، تقدم هذه النسخة من BugChecker نفسها للجهاز الذي يتم تصحيحه كنظام ثانٍ يقوم بتشغيل مصحح أخطاء kernel خارجي، عن طريق اعتراض استدعاءات KdSendPacket وKdReceivePacket في kernel، ولكن في الواقع، كل شيء يحدث على نفس الجهاز. عادةً ما يتم تحقيق ذلك عن طريق استبدال KDCOM.DLL (وهي الوحدة التي تنفذ اتصال الكابل التسلسلي لواجهة برمجة التطبيقات KD في Windows) وبدء تشغيل النظام في وضع تصحيح أخطاء kernel. هذا النهج (المستوحى من VirtualKD) يقلل من التعقيد ويزيد من الاستقرار والتوافق (وقابلية النقل، على سبيل المثال، إلى ARM - والنمطية، حيث يتم تنفيذ قدرات مصحح الأخطاء منخفضة المستوى خلف KdXxxPacket ويمكن استبدالها بتنفيذ مخصص). علاوة على ذلك، فإن وجود مصحح أخطاء kernel في وقت التمهيد (وإن كان "مزيفًا") يجعل Windows يعطل PatchGuard.

في الوقت الحالي، يتطلب BugChecker لوحة مفاتيح PS/2 للإدخال ومخزن إطارات خطي لكتابة مخرجاته. يرجى ملاحظة أن لوحة المفاتيح المدمجة في العديد من أجهزة الكمبيوتر المحمولة الحديثة لا تزال PS/2.

الميزات

  • دعم Windows XP حتى Windows 11، x86 وx64، ونوى SMP. دعم عمليات WOW64 على x64.
  • تكامل QuickJSPP، وهو منفذ QuickJS إلى MSVC++. قبل استدعاء QuickJS، يحفظ BugChecker حالة FPU (على x86) ويحول إلى مكدس موسع بحجم 128 كيلوبايت.
  • الأوامر تقبل تعبيرات JS. على سبيل المثال، "U rip+rax*4" و "U MyJsFn(rax+2)" هما أمران صالحان. يمكن تعريف وظائف مخصصة في نافذة البرنامج النصي. يتم الإعلان عن سجلات وحدة المعالجة المركزية كمتغيرات نطاق عامة تلقائيًا بواسطة BugChecker.
  • دعم ملفات رموز PDB. يمكن تحديد ملفات PDB يدويًا أو يمكن لـ Symbol Loader تنزيلها من خادم الرموز.
  • يمكن لرمز JavaScript استدعاء الوظائف غير المتزامنة التالية: WriteReg, ReadMem, WriteMem.
  • يمكن أن تحتوي نقاط التوقف على شرط JS: إذا كان الشرط يساوي 0، فلن يحدث "اختراق". هذا يسمح بتعيين "Logpoints" ونقاط توقف يمكنها تغيير تدفق التنفيذ.
  • نافذة السجل تعرض الرسائل المرسلة إلى مصحح أخطاء kernel (على سبيل المثال رسائل DbgPrint).
  • نافذة JavaScript مع تمييز بناء الجملة.
  • مفتاح التبويب يسمح، مع بضعة أرقام، بالتنقل عبر جميع الأرقام السداسية العشرية على الشاشة، أو مع بضعة أحرف، بالتنقل عبر جميع الرموز التي تحتوي على تلك الأحرف.
  • EASTL و coroutines C++20 يجعلان إنشاء أوامر جديدة أمرًا سهلاً. لا تتردد في إرسال طلبات السحب الخاصة بك!

فيديوهات (يوتيوب)

عرض توضيحي لـ BugChecker على Windows 11 22H2، داخل VirtualBox 7.0.4. تمت كتابة شرط نقطة توقف JavaScript يغير تدفق التنفيذ في خيط وضع المستخدم.

شاهد الفيديو

BugChecker يعمل في بيئة مقيدة للغاية: Raspberry Pi 4 (ذاكرة 4 جيجابايت)، عبر QEMU على Windows XP (ذاكرة 512 ميجابايت). يتم استخدام نقطة توقف لتسجيل جميع استدعاءات SYSENTER من وضع المستخدم إلى kernel. يتم تخزين فهرس الخدمة في مصفوفة JavaScript.

شاهد الفيديو

تشغيل BugChecker مباشرة على الأجهزة الحقيقية، على كمبيوتر HP Pavilion Dv2000، وهو كمبيوتر قديم بلوحة مفاتيح PS/2. نظام التشغيل هو Windows 7 Home 32 بت.

شاهد الفيديو

تعليمات التثبيت

مقدمة

تأكد من تعطيل التمهيد الآمن عند تثبيت واستخدام BugChecker. يمكنك عادةً إعادة تمكينه لاحقًا. إذا كنت تستخدم VMware أو VirtualBox، يمكن تعطيل التمهيد الآمن في إعدادات الجهاز الظاهري.

ضع في اعتبارك أيضًا تمكين قائمة التمهيد القديمة، إذا كنت تستخدم Windows 8 أو 10 أو 11، باستخدام الأمر: bcdedit /set "{current}" bootmenupolicy legacy. يسمح ذلك بتجربة أكثر سلاسة أثناء التمهيد، من خلال السماح بتحديد خيار تمهيد BugChecker ثم تعطيل فرض توقيع برنامج التشغيل في نفس الوقت.

التعليمات

الخطوة الأولى هي بدء تشغيل Symbol Loader:

Symbol Loader

إذا لزم الأمر، قم بتعطيل برامج تشغيل العرض، بالنقر فوق الزر "Disable Display Drvs". يمكن أيضًا القيام بنفس الشيء في إدارة أجهزة Windows. بعد تعطيل برامج تشغيل العرض، تظل معطلة حتى بعد إعادة تشغيل النظام. يمكن إعادة تمكينها في أي وقت لاحق عند عدم استخدام BugChecker.

النقطة هنا هي أن BugChecker يحتاج إلى مخزن إطارات خطي بتنسيق 32 بت لكل بكسل، لرسم واجهته. عند تعطيل برامج تشغيل العرض، يقوم Windows بإلغاء تسريع الأجهزة لرسم واجهة المستخدم الخاصة به ويعود إلى وضع التوافق VGA. إذا كنت تعمل على أجهزة حقيقية أو VMware، فيجب عليك تعطيل برامج تشغيل العرض. إذا كنت تعمل على VirtualBox، فيجب عليك تعطيل برامج تشغيل العرض أو تعيين إعداد vm_screen في BugChecker.dat، كما هو موضح أدناه. إذا كنت تعمل على QEMU، فلن تحتاج إلى تعطيل برامج تشغيل العرض ولكن تأكد من تحديد جهاز العرض "-vga std".

لاحظ أن وضع التوافق VGA قد يحد من دقة الشاشة القصوى. VMware مقيد بدقة قصوى تبلغ 1152x864. QEMU مع جهاز العرض "-vga std" لا يعاني من هذا القيد.

ومن المثير للاهتمام، إذا تم تثبيت BugChecker على نظام يحتوي على أكثر من بطاقة رسوميات واحدة، فمن الممكن تعطيل برامج تشغيل العرض لبطاقة رسوميات واحدة فقط، والتي ستكون البطاقة المتصلة بالشاشة التي ستعرض واجهة مستخدم BugChecker. ستحتفظ البطاقة الثانية (المعينة كشاشة رئيسية) بجميع ميزات تسريع 2D و 3D الخاصة بها، بما في ذلك دعم OpenGL و DirectX (ملاحظة: تم اختباره على VMware، مع Windows 11 وشاشة DisplayLink).

ثم انقر فوق "Start Driver"، ثم فوق "Auto Detect" وأخيراً فوق "Save". يجب أن يكون "Auto Detect" قادراً على تحديد العرض والارتفاع والعنوان الفعلي وطول الخطوة للمخزن المؤقت للإطارات تلقائياً. ومع ذلك، يمكنك تحديد هذه الإعدادات يدويًا (لا تنس النقر فوق "Save" عند الانتهاء). إذا كان "Stride" يساوي 0، فسيتم حسابه على أنه "Width" * 4 تلقائياً عند بدء تشغيل برنامج التشغيل. يمكن الحصول على "Address" (أي العنوان الفعلي للمخزن المؤقت للإطارات) في إدارة أجهزة Windows، من خلال النقر على "Properties" لجهاز العرض، ضمن علامة التبويب "Resources".

ثم انقر فوق "Callback" في قسم "KDCOM Hook Method"، ثم فوق "Copy/Replace Kdcom" وأخيراً يمكنك إعادة تشغيل النظام.

يجب القيام بهذه العملية مرة واحدة فقط ويمكن إعادة تمكين برامج تشغيل العرض، إذا لزم الأمر. عند استخدام BugChecker، يجب تعطيل برامج تشغيل العرض مرة أخرى، إذا كان ذلك مطلوبًا بواسطة التكوين الخاص بك.

إعداد vm_screen لـ VirtualBox (تجريبي)

يسمح إعداد vm_screen في BugChecker.dat بفتح واجهة مستخدم مصحح أخطاء BugChecker في VirtualBox دون تحديد دقة الشاشة مسبقًا في Symbol Loader ودون تعطيل برامج تشغيل العرض.

الفكرة هي الكتابة مباشرة إلى منافذ الإدخال/الإخراج ومخزن الأوامر لجهاز العرض الظاهري من أجل الحصول على دقة الشاشة الحالية وإخطار المشرف الفائق بأي تحديث في المخزن المؤقت للإطارات.

هذا الحل مستوحى من برنامج تشغيل X.org xf86-video-vmware.

يعمل هذا الحل فقط لأجهزة VirtualBox الافتراضية وبتحرير ملف BugChecker.dat يدويًا:

vm_screen

  • في Symbol Loader، قم بتعيين عرض وارتفاع المخزن المؤقت للإطارات يدويًا إلى أقصى دقة ممكنة (أي أبعاد شاشة الكمبيوتر الخاص بك). اضبط طول الخطوة على 0.
  • يتم إنشاء ملف BugChecker.dat بواسطة Symbol Loader في "C:\Windows\BugChecker".
  • يجب إضافة إعداد vm_screen ضمن "settings->framebuffer".
  • يتم تحديد التسلسل الهرمي للإعدادات في هذا الملف بواسطة أحرف الجدولة (وليس المسافات).
  • تنسيق الإعداد هو Command_Buffer_Start_Address (فاصلة) Command_Buffer_End_Address (فاصلة) I/O_Port_Base
  • هام: في إعداد الجهاز الظاهري، ضمن Display، حدد "VBoxSVGA" كوحدة تحكم الرسومات وقم بإلغاء تحديد "Enable 3D Acceleration".

هذه ميزة تجريبية. في المستقبل، سيتم إضافة هذا الإعداد تلقائيًا بواسطة Symbol Loader.

الأوامر المنفذة

يتم اختيار اسم الأمر وبناء الجملة ليكون قريبًا قدر الإمكان من تلك الخاصة بـ SoftICE الأصلي لـ NT:

  • ? javascript-expression: تقييم تعبير جافا سكريبت.
  • ADDR eprocess: التبديل إلى سياق العملية (يعيد التحكم إلى نظام التشغيل).
  • BC list|*: مسح نقطة توقف واحدة أو أكثر.
  • BD list|*: تعطيل نقطة توقف واحدة أو أكثر.
  • BE list|*: تمكين نقطة توقف واحدة أو أكثر.
  • BL (بدون معلمات): سرد جميع نقاط التوقف.
  • BPX address [-t|-p|-kt thread|-kp process] [WHEN js-expression]: تعيين نقطة توقف عند التنفيذ.
  • CLS (بدون معلمات): مسح نافذة السجل.
  • COLOR [normal bold reverse help line]|[reset]: عرض أو تعيين أو إعادة تعيين ألوان الشاشة.
  • DB/DW/DD/DQ [address] [-l len-in-bytes]: عرض الذاكرة كقيم 8/16/32/64 بت.
  • EB/EW/ED/EQ address -v space-separated-values: تحرير الذاكرة كقيم 8/16/32/64 بت.
  • KL EN|IT: تعيين تخطيط لوحة المفاتيح.
  • LINES [rows-num]: عرض أو تعيين عدد الصفوف الحالي للشاشة.
  • MOD [-u|-s] [search-string]: عرض معلومات الوحدة.
  • P [RET]: تنفيذ خطوة برنامج واحدة.
  • PAGEIN address: فرض ترحيل صفحة من الذاكرة (يعيد التحكم إلى نظام التشغيل).
  • PROC [search-string]: عرض معلومات العملية.
  • R register-name -v value: تغيير قيمة سجل.
  • STACK [stack-ptr]: فحص المكدس بحثًا عن عناوين الإرجاع.
  • T (بدون معلمات): تتبع تعليمة واحدة.
  • THREAD [-kt thread|-kp process]: عرض معلومات الخيط.
  • U address|DEST: إلغاء تجميع التعليمات.
  • VER (بدون معلمات): عرض معلومات الإصدار.
  • WD [window-size]: تبديل نافذة مفكك التجميع أو تعيين حجمها.
  • WIDTH [columns-num]: عرض أو تعيين عدد الأعمدة الحالي للشاشة.
  • WR (بدون معلمات): تبديل نافذة السجلات.
  • WS [window-size]: تبديل نافذة البرنامج النصي أو تعيين حجمها.
  • X (بدون معلمات): الخروج من شاشة BugChecker.

تعليمات البناء

المتطلبات الأساسية

  • Visual Studio 2019
  • Windows Driver Kit 7.1.0

ملاحظة: يجب تثبيت WDK في موقعه الافتراضي، أي X:\WinDDK، حيث X هو محرك الأقراص الذي تم حفظ ملفات مصدر BugChecker فيه.

يتوفر دليل خطوة بخطوة لبناء برنامج تشغيل kernel هنا.

وصف مشاريع Visual Studio

  • BugChecker: هذا هو برنامج تشغيل kernel لـ BugChecker، حيث يتم تنفيذ المصحح بالكامل. يتم تضمين ملفات الإخراج "Release|x86" و "Release|x64" في الحزمة النهائية. أثناء التهيئة، يقوم برنامج التشغيل بتحميل ملف التكوين الخاص به في "\SystemRoot\BugChecker\BugChecker.dat" (يتم تخزين جميع ملفات الرموز في هذا الدليل أيضًا) ثم يحاول تحديد موقع "KDCOM.dll" في مساحة kernel. إذا تم العثور عليه، فإنه يحاول استدعاء وظيفته المصدرة "KdSetBugCheckerCallbacks"، وبالتالي ربط KdSendPacket و KdReceivePacket.
  • SymLoader: هذا هو Symbol Loader. يتم تضمين ملف الإخراج "Release|x86" فقط في الحزمة النهائية. يتم استخدام Symbol Loader لتغيير تكوين BugChecker (تتم كتابة التكوين في "\SystemRoot\BugChecker\BugChecker.dat")، لتنزيل ملفات PDB ولتثبيت وحدة KDCOM.dll المخصصة.
  • KDCOM: هذه هي وحدة KDCOM.dll المخصصة التي يقوم NTOSKRNL بتحميلها عند بدء تشغيل النظام. تقوم بتصدير وظيفة "KdSetBugCheckerCallbacks" التي يستدعيها برنامج التشغيل لربط KdSendPacket و KdReceivePacket.
  • pdb: هذا هو مشروع Ghidra "pdb". يقوم الإصدار الأصلي بإخراج محتويات ملف PDB إلى الإخراج القياسي بتنسيق xml. تم تعديل الكود لإنشاء ملف BCS بدلاً من ذلك.
  • NativeUtil: نظرًا لأن Symbol Loader هو تطبيق WOW64 في Windows x64، فقد تم نقل استدعاءات واجهات برمجة التطبيقات التي يجب إجراؤها من الصور الأصلية للهندسة المعمارية إلى هنا (على سبيل المثال استدعاءات واجهة برمجة تطبيقات تثبيت الجهاز وبرنامج التشغيل).
  • HttpToHttpsProxy: هذا تطبيق ASP.NET Core وظيفته العمل كخادم وكيل إنترنت لـ Symbol Loader عند تشغيله في Windows XP. نظرًا لأن XP يدعم TLS قديمًا، لا يمكن لـ Symbol Loader تنزيل الملفات من خادم رموز عشوائي. بعد نشر هذا التطبيق في IIS على نفس الشبكة، يصبح من الممكن تنزيل الملفات من خادم رموز في Windows XP عن طريق إضافة "http://<YOUR_IIS_SERVER_IP>/HttpToHttpsProxy/" إلى عنوان URL للخادم في Symbol Loader.

الاعتمادات

  • VirtualKD: تم بناء أول POC لـ BugChecker عن طريق تعديل VirtualKD.
  • BazisLib: الكود وراء زر "Copy/Replace Kdcom + Add Boot Entry" في Symbol Loader مأخوذ من VirtualKD ويستخدم BazisLib.
  • EASTL: لا توجد طريقة لاستخدام MSVC++ STL هنا. EASTL هو بديل ممتاز.
  • Ghidra: مشروع "pdb" في BugChecker مأخوذ من Ghidra. تم تعديله لإنشاء ملفات BCS.
  • Zydis: لنافذة مفكك التجميع في BugChecker.
  • QuickJSPP، وهو منفذ QuickJS إلى MSVC++: لمحرك JavaScript المدمج في برنامج تشغيل kernel.
  • ReactOS: لتعريفات أنواع kernel الداخلية لنظام Windows KD.
  • SerenityOS: لوظائف معالجة البت منخفضة المستوى المستخدمة من قبل مخصص ذاكرة BugChecker. نظرًا لأنني بدأت BugChecker بعد مشاهدة فيديو لـ Andreas (بعد 10 سنوات من الامتناع عن C/C++ وأي نوع من البرمجة منخفضة المستوى)، أردت تضمين قطعة صغيرة من SerenityOS في BugChecker.
تنزيل الأداة