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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
DbgShell — واجهة أمامية لـ PowerShell لمحرك تصحيح أخطاء Windows. | Kitploit
أدوات/GitHubGitHub/microsoft/dbgshell
الهندسة العكسيةالبرمجة النصية والأتمتةمصممي الأخطاءالأدوات والمكوناتتحليل الملفات الثنائية
GitHubmicrosoft/dbgshell

DbgShell

واجهة أمامية لـ PowerShell لمحرك تصحيح أخطاء Windows.

عرض المستودع
698915منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

DbgShell

واجهة أمامية لـ PowerShell لمحرك مصحح أخطاء Windows.

هل أنت مستعد للتنقل باستخدام مفتاح التبويب لتحقيق الإنجاز؟ للحصول على مقدمة أسرع، ألق نظرة على البدء.

Build status

إخلاء المسؤولية

  1. هذا المشروع ليس من إنتاج أو اعتماد أو مراقبة فريق مصحح أخطاء Windows. يرحب فريق المصحح بالملاحظات حول واجهة برمجة التطبيقات (API) والواجهات الأمامية الخاصة بهم (windbg، kd، وغيرها)، لكن لا توجد لهم أي صلة بهذا المشروع. لا تقم بتقديم تقارير الأخطاء أو الملاحظات إلى فريق المصحح بخصوص هذا المشروع.

  2. هذا ليس مشروعًا ممولًا: لا توجد له موارد رسمية مخصصة، ولا يعمل عليه سوى المتطوعين. لا تعتمد على هذا المشروع في أي تبعيات إنتاجية إلا إذا كنت على استعداد لدعمه بالكامل بنفسك. لا تتردد في تقديم المشكلات (Issues) وإرسال طلبات السحب (Pull Requests)، لكن ضع في اعتبارك أنه مع الموارد التطوعية المحدودة، قد يستغرق الأمر بعض الوقت قبل معالجة مساهماتك.

  3. هذا مشروع تجريبي: لم يكتمل بعد، ويجب أن تتوقع حدوث تغييرات جذرية غالبًا.

نتيجة لإخلاء المسؤولية أعلاه: سأتجنب ربط DbgShell بأهداف حية عالية القيمة.

الملفات الثنائية

https://aka.ms/dbgshell-latest

الدافع

هل سبق لك أن حاولت أتمتة أي شيء في المصحح؟ (cdb/ntsd/kd/windbg) كيف كانت النتيجة؟

الدافع الرئيسي لـ DbgShell هو أنه من الصعب جدًا أتمتة أي شيء في المصحح. هناك إمكانيات اليوم للمساعدة في أتمتة المصحح بالطبع. لكن في رأيي، لا تلبي احتياجات الناس.

  • استخدام لغة البرمجة النصية المضمنة أمر غامض ومحدود ويصعب تنفيذه بشكل صحيح، ويصعب الحصول على مساعدة فيه.
  • كتابة ملف DLL امتداد كامل للمصحح أمر قوي جدًا، لكنه استثمار كبير—مكلف جدًا لحل المشكلات السريعة "التي تحدث لمرة واحدة" أثناء تصحيح الأخطاء في مشكلات حقيقية عشوائية. على الرغم من التكلفة، هناك عدد كبير من امتدادات المصحح الموجودة. أعتقد أنه لا ينبغي أن يكون هناك هذا العدد الكبير؛ أعتقد أن السبب الوحيد لوجود الكثير هو عدم وجود بدائل قابلة للتطبيق.
  • المحاولات الحالية لتوفير واجهة أفضل (مثل PowerDbg) تعتمد على "الكشط" وتحليل النصوص، وهو أمر مقيد للغاية (ناهيك عن كونه مزعجًا من الناحية الأيديولوجية) وبالتالي لا يمكنها الوفاء بوعد واجهة أفضل حقًا (فهي أفضل قليلاً فقط، في أحسن الأحوال).
  • المحاولات الحالية لتوفير طريقة أسهل لكتابة امتداد للمصحح هي مجرد حل مؤقت يعالج ألم تطوير امتداد المصحح؛ إنها لا تحل المشكلة الأكبر حقًا. (على سبيل المثال، اثنان من أوجه القصور الرئيسية هما: أنها لا تزال منخفضة المستوى جدًا (يجب عليك التعامل مع COM API الخاص بـ dbgeng)، ولا يوجد REPL)
  • قدم فريق المصحح مؤخرًا البرمجة النصية بلغة JavaScript. JavaScript أفضل بكثير (وأكثر تحديدًا) من لغة البرمجة النصية القديمة لـ windbg، لكنني أعتقد أن PowerShell لها بعض المزايا، أكبرها أنه لا أحد يستخدم بالفعل شل JavaScript—PowerShell أفضل بكثير كشل مدمج ولغة برمجة نصية.

الهدف من مشروع DbgShell هو جلب فوائد عالم PowerShell القائم على الكائنات إلى عالم تصحيح الأخطاء. عندما تقوم بـ 'dt' لتفريغ 'كائن'، يجب أن تحصل على كائن فعلي. يجب أن تكون البرمجة النصية سهلة مثل كتابة سكربت PowerShell.

يوفر مشروع DbgShell واجهة أمامية لـ PowerShell لـ dbgeng.dll، بما في ذلك:

  • "نموذج كائن" مُدار (قابل للاستخدام من C# إذا أردت)، وهو أعلى مستوى من COM API الخاص بـ dbgeng،
  • "موفر تنقل" PowerShell، الذي يعرض جوانب هدف التصحيح كمساحة اسم هرمية (حتى تتمكن من "cd" إلى سلسلة محادثات معينة، وكتابة "dir" لرؤية المكدس، و"cd" إلى إطار، وعمل "dir" آخر لرؤية المتغيرات المحلية/السجلات/إلخ)؛
  • cmdlets لمعالجة الهدف،
  • مضيف PowerShell مخصص يسمح بتحكم أفضل في تجربة CLI الخاصة بالمصحح، بالإضافة إلى توفير ميزات غير متوفرة في مضيف powershell.exe القياسي (أي دعم تلوين النص باستخدام رموز الهروب ANSI (على غرار ISO/IEC 6429))

المضيف المخصص لا يزال برنامجًا قائمًا على سطر الأوامر (conhost.exe) (مماثل لـ ntsd/cdb/kd)، ولكن يمكن استدعاؤه من windbg (!DbgShell).

بالإضافة إلى جعل الأتمتة أسهل وأكثر قوة، سيعالج أيضًا مخاوف أخرى، مثل سهولة الاستخدام للأشخاص الذين لا يضطرون إلى استخدام المصححات كثيرًا. (شكوى سمعتها هي أنه "عندما ينتهي بي الأمر بحاجة لاستخدام windbg، أقضي كل وقتي في .CHM")

بالنسبة لمستخدمي windbg المتمرسين، من ناحية أخرى، هدف آخر هو جعل الانتقال سلسًا قدر الإمكان. لذلك، على سبيل المثال، موفر مساحة الاسم ليس الطريقة الوحيدة للوصول إلى البيانات؛ لا يزال بإمكانك استخدام الأوامر التقليدية مثل "~3 s"، "k"، إلخ.

ماذا تقصد بـ "الأتمتة" و "البرمجة النصية"؟

أنا لا أتحدث فقط عن النوع الذي تفتح فيه محرر نصوص وتكتب سكربت كبير لفعل شيء معقد—أنا أتحدث أيضًا عن القدرة على كتابة أشياء بسيطة نسبيًا مباشرة على سطر الأوامر. هناك العديد من المواقف التي قد ترغب فيها في استخدام القليل من المنطق، ولكن ليس شيئًا كبيرًا أو قابلاً لإعادة الاستخدام لدرجة أنك قد ترغب في حفظه. يجب أن يكون من السهل كتابة "أوامر سطر واحد" مثل "توقف عند CreateFile إذا كان الملف الذي يتم فتحه على سطح المكتب وكانت الدالة Blah موجودة على المكدس."

لماذا PowerShell؟

دعني أوضح: استغرق مني حوالي 4 سنوات حتى "أعتاد" على PowerShell. أشعر أن له حوافًا حادة، وجوانب صعبة بكل بساطة، والكثير من الأخطاء، سواء في التصميم أو التنفيذ. أحيانًا يزعجني حقًا. ومع ذلك، فوائد PowerShell مقنعة، وأقنعتني أنه أفضل شيء لاستخدامه لهذا المشروع:

  • إنه بيئة برمجة نصية وبيئة CLI في نفس الوقت. حقيقة أنه يجب أن يقوم بكلا الأمرين تؤدي إلى بعض الأشياء السلبية مثل منحنى تعلم أكثر انحدارًا، لكن في النهاية، إنها مريحة للغاية، لأنك تريد أن تكون قادرًا على فعل الأشياء بسرعة في REPL سطر الأوامر، وكذلك كتابة سكربتات كاملة الميزات وقوية.
  • إنه قابل للاكتشاف بدرجة كبيرة—أشياء مثل Get-Command، وإكمال علامة التبويب، والقدرة على عرض البيانات الهرمية مثل نظام الملفات، والمرافق لتوفير وتجميع المساعدة، جيدة جدًا.
  • إكمال علامة التبويب. أعلم أنني ذكرته في النقطة السابقة، لكنه رائع بما يكفي ليحصل على نقطته الخاصة.
  • خط الأنابيب الكائني: الطبيعة الموجهة للكائنات لخط أنابيب PowerShell أقوى بكثير وأسهل في الاستخدام من الأيام السيئة القديمة للبرمجة النصية القائمة على تحليل السلاسل النصية، لدرجة أنها ليست مضحكة. تخيل عمل "dt" "لتفريغ" "كائن"، والحصول فعليًا على كائن. DbgShell يفعل ذلك.
  • الناس يعرفونه: أقدر أن عدد الأشخاص الذين يعرفون PowerShell و/أو C# أكبر بعدة مرات من عدد الأشخاص الذين يعرفون تقنيات البرمجة النصية لـ windbg. وهذا يعني أن المزيد من الناس سيكونون قادرين على "التقاط" مصحح أخطاء قائم على PowerShell بسهولة؛ ويعني أيضًا أنه عندما يحتاج الناس إلى المساعدة، فإن مجموعة المساعدين المحتملين أكبر بكثير (لمشكلات البرمجة النصية على أي حال).
  • PowerShell لا يزال شلًا عامًا: عند استخدام DbgShell، لديك إمكانية الوصول ليس فقط لأوامر المصحح، ولكن يمكنك "cd" إلى نظام الملفات، السجل، Active Directory، إلخ؛ يمكنك تنفيذ Send-MailMessage، Get-WmiObject، Invoke-WebRequest، Invoke-RestMethod، تشغيل البرامج التعسفية، إلخ.

الحالة الحالية

DbgShell كان في "وضع النمذجة الأولية" لفترة طويلة. لقد أمضيت الكثير من الوقت في معرفة كيف يمكن أو ينبغي فعل شيء ما، ولكن ليس بالضرورة "إنهاء" كل شيء. هناك عدد كبير من المهام المعلقة (TODOs) في الكود الحالي. لذا، على الرغم من أنه بدأ يصبح مفيدًا فعليًا، إلا أن المشروع لا يزال أخضرًا جدًا. ومع ذلك، يمكنه بالتأكيد إظهار ما يكفي ليعطيك فكرة جيدة عما ينبغي أن يكون عليه.

فيما يلي بعض لقطات الشاشة. من المهم ملاحظة أن لا شيء تراه هو إخراج نص من dbgeng. على الرغم من أن بعض الأشياء في المخرجات ستبدو مألوفة، فإن ذلك فقط لأنني استخدمت ميزات تنسيق وإخراج PowerShell لتخصيص كيفية عرض كائنات معينة—جميع المخرجات التي تراها تتوافق فعليًا مع كائنات .NET حقيقية وكاملة. على سبيل المثال، رسائل ModLoad تلك تتوافق كل منها مع كائن MS.Dbg.ModuleLoadedEventArgs، الذي يحتوي على خصائص أكثر مما يتم عرضه عند إرساله إلى Out-Default. لا يوجد تحليل سلاسل نصية لأي شيء من dbgeng على الإطلاق. (حسنًا... تقريبًا. لقد قمت ببعض التنازلات حيث لا توجد طريقة أخرى للحصول على المعلومات. على سبيل المثال، تفكيك الأشياء، أو تحليل الاسم الرمزي لدالة معدلة (adjustor thunk) للعثور على الإزاحة).

هذا نوع من سيناريو "hello world": الاتصال بمثيل من cmd.exe. أستخدم أولاً الأمر المدمج في PowerShell Start-Process، ثم أوجه الإخراج إلى أمر DbgShell Connect-Process، ثم أتجول في مساحة الاسم:

Hello DbgShell

هنا قمت بالاتصال ببرنامج اختبار، ونظرت إلى المكدس، وانتقلت إلى إطار مكدس معين، وأفرغت المتغيرات المحلية، وفحصت قيمة std::map محلية، وفحصت بعض معلومات النوع لقيمة تعداد محلية. لاحظ عرض قيمة التعداد: لا يتعامل DbgShell فقط مع البحث عن الاسم الرمزي للمفردات المفردة، ولكن أيضًا عندما يتم دمج عدة مفردات معًا بواسطة OR. لا يمكنك معرفة ذلك من لقطة الشاشة، ولكن هناك إكمال بعلامة التبويب لكل هذه الأشياء.

tbd

الميزات البارزة

  • الألوان: دعم تلوين النص باستخدام رموز الهروب ANSI (على غرار ISO/IEC 6429)
  • محرك التنسيق المخصص: لا تحب ملفات .ps1xml؟ أنا أيضًا. بالإضافة إلى العروض القياسية للجداول والقوائم والعروض المخصصة، يمكنك تعريف عروض "سطر واحد" مفيدة جدًا لتخصيص عرض قيم الرموز.
  • تحويل قيمة الرمز المخصص: بالنسبة لمعظم المتغيرات، التحويل الافتراضي والعرض جيدان. لكن في بعض الأحيان، ترغب في أن يقوم المصحح بعمل أكثر قليلاً من أجلك. تتيح ميزة تحويل قيمة الرمز، على سبيل المثال، تحويل كائنات مجموعة STL إلى كائنات مجموعة .NET التي يسهل التعامل معها.
  • كشف النوع المشتق: عندما يكون المتغير الخاص بك من النوع IFoo، ولكن الكائن الفعلي هو FooImpl.
  • معلومات نوع غنية: مكشوفة لمتعتك البرمجية.
  • سؤال: هل يعمل في WinDbg؟ سأستخدم WinDbg فقط. إجابة: نعم—قم بتحميل ملف DLL الامتداد DbgShellExt.dll، ثم قم بتشغيل "!dbgshell" لفتح وحدة تحكم DbgShell.

أوجه القصور الحالية

  • أكبر عيب حاليًا هو أنه لا يدعم وضع kernel بشكل جيد (إذا كنت بالفعل في السياق المناسب، يمكنك عرض القيم، لكن لا يمكنك تغيير السياق من داخل DbgShell، ومساحة الاسم غير موصلة).
  • على الرغم من أنه يمكنك تحميل وتنفيذ امتدادات المصحح التقليدية بالطريقة المعتادة، إلا أنه لا يزال هناك العديد من أوامر windbg المفقودة.
  • الأجهزة البعيدة غير مدعومة: تدعم واجهة برمجة تطبيقات dbgeng الاتصال بمصحح أخطاء بعيد. لسوء الحظ، فإن معلومات الرمز والنوع التي تعرضها واجهة برمجة تطبيقات dbgeng غير كافية بشكل خطير لاحتياجات DbgShell، لذلك يستخدم DbgShell واجهة برمجة تطبيقات dbghelp. لسوء الحظ، لا يوجد شيء مثل dbghelp عن بعد. سنحتاج إلى العمل مع فريق المصحح لحل هذه المشكلة.

الترخيص

مرخص بموجب رخصة MIT.

المساهمة

يرحب هذا المشروع بالمساهمات والاقتراحات. تتطلب معظم المساهمات منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في، وأنك تمنحنا بالفعل، الحقوق لاستخدام مساهمتك. للحصول على التفاصيل، قم بزيارة https://cla.microsoft.com.

عند تقديم طلب سحب، سيقوم روبوت CLA تلقائيًا بتحديد ما إذا كنت بحاجة إلى تقديم CLA وتزيين طلب السحب بشكل مناسب (على سبيل المثال، تسمية، تعليق). ما عليك سوى اتباع التعليمات المقدمة من الروبوت. ستحتاج فقط إلى القيام بذلك مرة واحدة عبر جميع المستودعات التي تستخدم CLA الخاص بنا.

انظر المساهمة لمزيد من المعلومات حول المساهمة في المشروع.

مدونة قواعد السلوك

اعتمد هذا المشروع مدونة قواعد السلوك مفتوحة المصدر من Microsoft.

لمزيد من المعلومات، راجع الأسئلة الشائعة حول مدونة قواعد السلوك أو اتصل بـ [email protected] مع أي أسئلة أو تعليقات إضافية.

مواضيع أخرى

  • البدء مع DbgShell

  • الألوان

  • محرك التنسيق المخصص

  • تحويل قيمة الرمز المخصص

  • كشف النوع المشتق

  • معلومات نوع غنية

  • الاختراق في DbgShell

  • DbgEngWrapper

يمكنك العثور على مقدمة فيديو قصيرة (3 دقائق) هنا: https://youtu.be/ynbg2zZ1Igc

تنزيل الأداة