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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
moonwalk — العثور على عناوين قاعدة DLL دون التنقل عبر PEB | Kitploit
أدوات/GitHubGitHub/teach2breach/moonwalk
ما بعد الاستغلالتحليل الملفات الثنائيةالتعلم والتعليمالفريق الأحمرتطوير الحمولات
GitHubteach2breach/moonwalk

moonwalk

العثور على عناوين قاعدة DLL دون التنقل عبر PEB

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

الأكثر شعبية

عرض الكل →

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

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

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

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

moonwalk: أداة العثور على العنوان الأساسي لمكتبات DLL

تقدّم هذه المكتبة وأداة سطر الأوامر المكتوبة بلغة Rust طريقة بديلة للعثور على العنوان الأساسي لمكتبات DLL المحمّلة دون استخدام اجتياز كتلة بيئة العملية (PEB walk). تُعد هذه التقنية مفيدة بشكل خاص في السيناريوهات التي قد يتم فيها اكتشاف أو حظر اجتياز PEB.

اختلافات الفروع

يحتوي هذا المستودع على فرعين بأساليب مختلفة:

الفرع الرئيسي (Main Branch)

  • يستخدم حزمة winapi ودالة VirtualQuery للتحقق من الذاكرة
  • دوال المكتبة (lib.rs) لا تحتوي على عبارات طباعة لضمان تكامل نظيف
  • أداة سطر الأوامر (main.rs) تتضمن مخرجات تصحيح لإثبات المفهوم
  • مناسبة للتعلّم وفهم التقنية

فرع OPSEC

  • لا تبعيات خارجية - مكتفٍ ذاتياً بالكامل
  • لا استدعاءات لواجهة برمجة تطبيقات Windows - يستخدم وصولاً مباشراً إلى الذاكرة مع معالجة الاستثناءات بدلاً من VirtualQuery
  • لا عبارات طباعة في دوال المكتبة
  • تخفٍّ محسّن - لا يقوم بأي استدعاءات API
  • أفضل للزرعات/الأدوات - يترك آثاراً أقل ويصعب اكتشافه

كلا الفرعين آمنان للاستخدام، لكن فرع OPSEC يوفر مزايا أمان تشغيلي إضافية للسيناريوهات التي قد تتم فيها مراقبة استدعاءات API أو حظرها.

كيفية العمل

يستخدم البرنامج أسلوب فحص المكدس (stack walking) للعثور على مكتبات DLL من خلال:

  1. الوصول إلى كتلة بيئة الخيط (TEB):

    • يستخدم التجميع المضمّن (inline assembly) لقراءة مؤشر TEB من سجل المقطع GS (GS:[0x30])
    • يسترجع قاعدة المكدس (GS:[0x08]) وحد المكدس (GS:[0x10]) من TEB
  2. فحص المكدس (Stack Walking):

    • يبدأ من مؤشر المكدس الحالي (RSP)
    • يصعد عبر المكدس بحثاً عن عناوين الإرجاع
    • يفحص كل عنوان بحثاً عن ذاكرة قابلة للتنفيذ
    • الفرع الرئيسي: يستخدم VirtualQuery للتحقق من مناطق الذاكرة
    • فرع OPSEC: يستخدم وصولاً مباشراً إلى الذاكرة مع معالجة الاستثناءات
  3. تحديد الوحدة النمطية:

    • لكل عنوان إرجاع محتمل، يتحقق مما إذا كان يشير إلى ذاكرة قابلة للتنفيذ
    • عند العثور على ذاكرة قابلة للتنفيذ، يتراجع للخلف للعثور على ترويسة PE
    • يتحقق من صحة الوحدة من خلال فحص:
      • توقيع MZ (ترويسة DOS)
      • توقيع PE
      • خصائص DLL
      • بنية 64-بت
      • اسم الوحدة من دليل التصدير
  4. التحقق:

    • يتحقق من أن الوحدة هي DLL الهدف من خلال فحص اسمها في دليل التصدير
    • يؤكد أن جميع هياكل ترويسة PE صالحة

لماذا هذا الأسلوب؟

غالباً ما تتضمن الطرق التقليدية للعثور على مكتبات DLL اجتياز قائمة الوحدات في PEB. ورغم فعاليتها، إلا أن هذا الأسلوب قد يكون:

  • مكتشفاً بواسطة برامج الأمان
  • محظوراً في بعض البيئات

توفّر طريقة فحص المكدس هذه بديلاً:

  • لا يعتمد على PEB
  • يمكن أن يعمل في البيئات التي يتم فيها حظر اجتياز PEB
  • فرع OPSEC: لا يقوم بأي استدعاءات API

المتطلبات

  • Rust (سلسلة أدوات nightly)
  • Windows x64
  • الفرع الرئيسي: حزمة winapi
  • فرع OPSEC: لا تبعيات خارجية

الاستخدام

كمكتبة

أضف إلى ملف Cargo.toml الخاص بك:

الفرع الرئيسي:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }

فرع OPSEC:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }

مثال على الاستخدام في الكود الخاص بك:

root@kitploit:~
use moonwalk::find_dll_base;

fn main() {
    // Find ntdll.dll
    if let Some(ntdll_base) = find_dll_base("ntdll.dll") {
        println!("ntdll.dll base: 0x{:X}", ntdll_base);
    }

    // Case-insensitive, .dll extension optional
    if let Some(kernel32_base) = find_dll_base("KeRNEl32") {
        println!("kernel32.dll base: 0x{:X}", kernel32_base);
    }
}

كأداة سطر أوامر

البناء:

root@kitploit:~
cargo build --release

التشغيل:

root@kitploit:~
# Find ntdll.dll (default)
cargo run --release

# Find specific DLL (case insensitive, .dll extension optional)
cargo run --release kernel32.dll
cargo run --release KeRNEl32
cargo run --release USER32

مثال

لم تعد عبارات الطباعة مضمنة. هذه الصورة مُدرجة لأغراض تعليمية.

عرض توضيحي لأداة Moonwalk للعثور على العنوان الأساسي لمكتبات DLL

ملاحظات

  • أسماء DLL غير حساسة لحالة الأحرف وامتداد .dll اختياري
  • يعمل فقط مع مكتبات DLL الموجودة في مكدس الاستدعاءات
  • الفرع الرئيسي: يستخدم VirtualQuery للتحقق الآمن من الوصول إلى الذاكرة
  • فرع OPSEC: يستخدم وصولاً مباشراً إلى الذاكرة مع معالجة الاستثناءات لأقصى درجات التخفّي
  • كلا الفرعين يوفران واجهات مكتبة نظيفة دون أي مخرجات تصحيح
تنزيل الأداة