Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
MOEW — ورقة بيضاء | Kitploit
أدوات/GitHubGitHub/harryeetsource/moew
أدوات دفاعيةالاستغلالالهندسة العكسيةمصممي الأخطاءتحليل البرمجيات الخبيثةالتعلم والتعليماستغلال الملفات الثنائية
GitHubharryeetsource/moew

MOEW

ورقة بيضاء

عرض المستودع
16213منذ 10 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

تهديدات غير مرئية، حلول مرئية.

شلال الأكواد غير المحاذية (MOEW)

إثبات المفهوم لشلال المعالجات الاستثنائية (SEH) ذو 3 مراحل (غير ضار، x86/Wow64)

الخلاصة: يُظهر إثبات المفهوم هذا سلسلة متتالية من المعالجات الاستثنائية المنظمة (SEH) مكونة من 3 مراحل ناتجة عن تنفيذ غير محاذٍ متعمد إلى كتل بايت خام التي أول تعليمة صحيحة فيها هي تعليمة div reg بقسمة على صفر.
كل مرحلة استثناء تقوم بتثبيت معالج SEH التالي، وتؤدي إلى قسمة جديدة غير محاذية على صفر، وتنفذ حمولة مرئية غير ضارة قبل استعادة سلسلة SEH الأصلية والإنهاء النظيف.


1. نظرة عامة

MOEW (شلال الأكواد غير المحاذية) هو عينة بحث دفاعي تُظهر تنفيذًا متعدد المراحل مدفوعًا بالاستثناءات بشكل متحكم به على x86/Wow64 Windows. يُظهر:

  • التلاعب اليدوي بسلسلة SEH عبر fs:[0]
  • عدم المحاذاة المتعمد في تسلسلات بايت مصنوعة يدويًا (blob1، blob2، blob3)
  • معالجات SEH متسلسلة عبر المراحل
  • التكرار متعدد الأعطال من خلال:
    • KiUserExceptionDispatcher
    • RtlDispatchException
    • معالجات وضع المستخدم المخصصة
  • مسار إنهاء نظيف يعيد سلسلة SEH الأصلية

جميع الحمولات غير ضارة:

  • المرحلة 1: تشغيل Notepad
  • المرحلة 2: كتابة ملف علامة إلى %TEMP%
  • المرحلة النهائية: تشغيل الآلة الحاسبة

تم تعطيل إثبات المفهوم عمدًا. لا يتم تشفير أو تعديل أو إتلاف أي بيانات.


2. الميزات

  • تكرار SEH محدد بالكامل من خلال 3 معالجات متدرجة
  • كتل بايت x86 عارية مع مسارات فك تشفير صحيحة متعددة
  • div غير محاذٍ في إزاحات متحكم بها (ECX/EDX/EBX = 0)
  • عداد عالمي لكل مرحلة للتسجيل والتتبع
  • استعادة كاملة لرأس SEH الأصلي (ORIGINAL_SEH)
  • Rust الليلي + التجميع المضمّن + الوظائف العارية
  • "حمولات" غير ضارة ولكن مرئية لاختبار التتبع والمصحح

3. متطلبات البيئة

3.1 العمارة

  • x86 (32 بت) فقط
  • تم التجميع باستخدام سلسلة أدوات MSVC
  • يعمل على Windows 64 بت تحت WoW64 أيضًا

3.2 Rust الليلي

يستخدم إثبات المفهوم ميزات الليلي فقط:

#![feature(asm_experimental_arch)]
#![feature(naked_functions)]

قم بتثبيت المكونات الضرورية:

rustup toolchain install nightly
rustup target add i686-pc-windows-msvc --toolchain nightly

3.3 تعطيل SAFESEH

نظرًا لأن إثبات المفهوم يقوم بتثبيت معالجات SEH مخصصة غير موجودة في جدول SAFESEH، يجب توجيه الرابط لتعطيل التحقق من SAFESEH.

أنشئ .cargo/config.toml:

[target.i686-pc-windows-msvc]
rustflags = [
  "-C", "link-arg=/SAFESEH:NO",
]

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

قم ببناء الثنائي:

cargo +nightly build --target i686-pc-windows-msvc --release

المخرج موجود في:

target\i686-pc-windows-msvc\release\seh_waterfall.exe

5. تشغيل إثبات المفهوم

نفّذ:

seh_waterfall.exe

تدفق التحكم المتوقع:

المرحلة 0 ← blob1 غير محاذٍ ← معالج المرحلة 1
المرحلة 1 ← blob2 غير محاذٍ ← معالج المرحلة 2
المرحلة 2 ← blob3 غير محاذٍ ← المعالج النهائي
النهائي ← استعادة SEH ← خروج

الآثار المرئية:

  • يتم تشغيل notepad.exe (المرحلة 1)
  • يتم إنشاء %TEMP%\moew_stage2.txt (المرحلة 2)
  • يتم تشغيل calc.exe (المعالج النهائي)

6. التحليل الفني

6.1 تنسيق سجل SEH

على Windows 32 بت، تشكل سجلات SEH قائمة مرتبطة مخزنة في fs:[0]:

#[repr(C)]
struct SehRec {
    next: *mut SehRec,
    handler: usize,
}

يستخدم كل معالج توقيع SEH القياسي:

extern "system" fn handler(
    record: *mut u8,
    frame: *mut u8,
    context: *mut u8,
    dispatcher: *mut u8,
) -> i32

6.2 الحالة العالمية

static STAGE_COUNTER: AtomicU32 = AtomicU32::new(0);
static mut ORIGINAL_SEH: *mut SehRec = std::ptr::null_mut();

تستخدم من أجل:

  • حساب عمق التكرار للمعالج
  • استعادة رأس SEH الأصلي في نهاية الشلال

7. منطق المراحل

المرحلة 0 — إعداد الإطار الأولي

  1. حفظ fs:[0] كـ ORIGINAL_SEH.
  2. بناء سجل SEH يشير إلى معالج المرحلة 1.
  3. الكتابة فوق fs:[0] بهذا السجل الجديد.
  4. عدم المحاذاة إلى blob1 + 5، الذي يفك تشفيره كـ div ecx (بعد تعيين ECX = 0).

المرحلة 1 — أول معالج SEH

  1. تشغيل notepad.exe.
  2. بناء سجل SEH لمعالج المرحلة 2 وسلسلته في الأعلى.
  3. عدم المحاذاة إلى blob2 + 3 → div edx (مع EDX = 0).

المرحلة 2 — ثاني معالج SEH

  1. كتابة %TEMP%\moew_stage2.txt.
  2. تثبيت المعالج النهائي على سلسلة SEH.
  3. عدم المحاذاة إلى blob3 + 3 → div ebx (مع EBX = 0).

المعالج النهائي — الإنهاء

  1. تشغيل calc.exe.
  2. استعادة ORIGINAL_SEH إلى fs:[0].
  3. الخروج النظيف من العملية عبر process::exit(0).

8. كتل الأعطال غير المحاذية

8.1 blob1

#[unsafe(naked)]
pub extern "C" fn blob1() {
    naked_asm! {
        ".byte 0xB8, 0x10, 0x00, 0x00, 0x00", // mov eax, 0x10
        ".byte 0xF7, 0xF1",                   // div ecx
        ".byte 0xC3",                         // ret
        ".byte 0x90, 0x90, 0x90",             // nop padding
    }
}
  • فك التشفير المحاذي: mov eax, 0x10; div ecx; ret
  • غير محاذٍ عند +5: div ecx (مع ECX = 0 → #DE)

8.2 blob2

#[unsafe(naked)]
pub extern "C" fn blob2() {
    naked_asm! {
        ".byte 0x55",                         // push ebp
        ".byte 0x8B, 0xEC",                   // mov ebp, esp
        ".byte 0xF7, 0xF2",                   // div edx
        ".byte 0xC3",                         // ret
        ".byte 0x90, 0x90, 0x90",             // nop padding
    }
}
  • فك التشفير المحاذي: push ebp; mov ebp, esp; div edx; ret
  • غير محاذٍ عند +3: div edx (مع EDX = 0 → #DE)

8.3 blob3

#[unsafe(naked)]
pub extern "C" fn blob3() {
    naked_asm! {
        ".byte 0x53",                         // push ebx
        ".byte 0x8B, 0xD8",                   // mov ebx, eax
        ".byte 0xF7, 0xF3",                   // div ebx
        ".byte 0xC3",                         // ret
        ".byte 0x90, 0x90, 0x90",             // nop padding
    }
}
  • فك التشفير المحاذي: push ebx; mov ebx, eax; div ebx; ret
  • غير محاذٍ عند +3: div ebx (مع EBX = 0 → #DE)

9. خط أنابيب الاستثناء

تعيد كل مرحلة متعثرة دخول خط أنابيب استثناء وضع المستخدم في Windows:

KiUserExceptionDispatcher
    → RtlDispatchException
        → اجتياز سلسلة SEH (fs:[0])
            → معالج MOEW

عرض المصحح النموذجي:

seh_waterfall!blobX+offset
ntdll!KiUserExceptionDispatcher
ntdll!RtlDispatchException
seh_waterfall!stageN_handler

الشلال مدفوع بالكامل بأعطال الأجهزة الحقيقية وإرسال SEH؛ لا تُستخدم استثناءات اصطناعية أو مزيفة.


10. إخراج ملف العلامة

يبدو الملف المكتوب في المرحلة 2 كما يلي:

MOEW Stage 2 Marker
-------------------
تم كتابة هذا الملف بواسطة معالج SEH للمرحلة 2
كحمولة توضيحية غير ضارة.

وجودها في %TEMP% يُعد دليلاً بسيطًا ومرئيًا على أن المرحلة 2 تم تنفيذها عبر سلسلة SEH.


11. ملاحظات السلامة

  • إثبات المفهوم غير ضار ولأغراض البحث الدفاعي فقط.
  • لا استمرارية، ولا تعديل في السجل، ولا تشفير.
  • يتم التقاط جميع الاستثناءات ومعالجتها.
  • يتم استعادة سلسلة SEH الأصلية قبل الإنهاء.

12. التحسينات المستقبلية

تشمل الامتدادات المحتملة:

  • قواعد YARA والسلوكية لشلالات SEH وأنماط الاستثناء المتكررة.
  • رسم خرائط إشارات ETW / EDR للأعطال المتدرجة في الأجهزة.
  • رسوم بيانية لتطور سلسلة SEH مع مرور الوقت.
  • مقارنة جنبًا إلى جنب مع سلاسل استثناءات البرامج الضارة الحقيقية.

13. كود المصدر الكامل

يتوفر تنفيذ إثبات المفهوم الكامل في هذا المستودع (راجع src/main.rs).


14. الترخيص

هذا المشروع مخصص للبحث الدفاعي والتعليم. حقوق النشر <2025>

يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج والملفات المرتبطة به (البرنامج)، للتعامل مع البرنامج دون قيود، بما في ذلك على سبيل المثال لا الحصر حقوق الاستخدام والنسخ والتعديل والدمج والنشر والتوزيع والترخيص و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يتم تزويدهم بالبرنامج بذلك، وفقًا للشروط التالية:

يجب تضمين إشعار حقوق النشر أعلاه وإذن الإذن هذا في جميع النسخ أو الأجزاء الجوهرية من البرنامج.

تنزيل الأداة