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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
snapchange — فازينغ خفيف الوزن للقطة من الذاكرة باستخدام KVM | Kitploit
أدوات/GitHubGitHub/awslabs/snapchange
التحليل الديناميكي (عزل)تحليل الثغرات الأمنيةتحليل الشفرة الديناميكي (DAST)مصممي الأخطاءالمحاكاة الافتراضية للأمانالاختبار العشوائي
GitHubawslabs/snapchange

snapchange

فازينغ خفيف الوزن للقطة من الذاكرة باستخدام KVM

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Snapchange

Fuzzing خفيف الوزن للقطة ذاكرة باستخدام KVM

يوفر Snapchange القدرة على تحميل تفريغ ذاكرة خام (raw memory dump) وحالة السجلات في جهاز افتراضي (VM) يعمل بنظام KVM للتنفيذ. عند نقطة معينة في التنفيذ، يمكن إعادة تعيين هذا الجهاز الافتراضي إلى حالته الأولية عن طريق إعادة تعيين الصفحات المتسخة (dirty pages) التي يعثر عليها KVM أو الصفحات التي تم توسيخها يدويًا بواسطة أداة Fuzzer.

روابط سريعة:

  • يوفر Cookbook أمثلة لأدوات سطر الأوامر fuzz وtrace وcoverage وminimize وproject
  • التقاط لقطة مع QEMU
  • البنية المعمارية
  • دورة حياة أداة الـ Fuzzer

دروس تعليمية

  • الدرس 1 - الاستخدام الأساسي
  • الدرس 2 - LibTIFF مع ASAN
  • الدرس 3 - FFmpeg مع محوّل مخصص
  • الدرس 4 - Fuzzer لاستدعاءات النظام
  • الدرس 5 - Redqueen

التطلعات

  • إعادة تشغيل لقطة لحالة الذاكرة الفعلية والسجلات باستخدام KVM
  • تنفيذ متوازٍ عبر أنوية متعددة
  • توفير مجموعة من ميزات الفحص الداخلي (introspection) للجهاز الضيف
  • حالة تغطية لحظية عبر تغطية نقاط التوقف (breakpoint coverage)
  • مقاييس أداء لحظية لمكونات أداة الـ Fuzzer
  • توفير أدوات مساعدة للـ Fuzzing مثل تتبع التصحيح خطوة بخطوة، وتصغير حالات الاختبار، وتغطية حالات الاختبار
  • تجريد للإدخال (input abstraction) للسماح باستراتيجيات مخصصة للتغيير والتوليد

مثال:

إنشاء أداة Fuzzer مستهدفة من قالب أداة الـ Fuzzer

root@kitploit:~
$ cp -r -L fuzzer_template your_new_fuzzer

تعديل your_new_fuzzer/create_snapshot.sh لالتقاط لقطة من هدفك

تحديث src/fuzzer.rs لحقن البيانات المعدّلة في الجهاز الضيف

root@kitploit:~
#[derive(Default)]
pub struct TemplateFuzzer;

impl Fuzzer for TemplateFuzzer {
    // The type of Input being fuzzed. Used to know how to generate and mutate useful inputs.
    type Input = Vec<u8>;
    // The starting address of the snapshot
    const START_ADDRESS: u64 = 0x402363;
    // The maximum length of mutated input to generate
    const MAX_INPUT_LENGTH: usize = 100;

    fn set_input(&mut self, input: &Self::Input, fuzzvm: &mut FuzzVm<Self>) -> Result<()> {
        // Write the mutated input into the data buffer in the guest VM
        fuzzvm.write_bytes_dirty(VirtAddr(0x402004), CR3, &input)?;
        Ok(())
    }

    fn reset_breakpoints(&self) -> Option<&[BreakpointLookup]> {
        Some(&[
            // Reset when the VM hits example1!main+0x123
            BreakpointLookup::SymbolOffset("example1!main", 0x123)
        ])
    }
}

بدء الـ Fuzzing باستخدام 16 نواة

root@kitploit:~
$ cargo run -r -- fuzz -c 16

التنفيذ

استخدام سريع للمصطلحات الواردة في هذا الملف:

  • Hypervisor: الكود المستقل عن الهدف الذي ينفّذ اللقطة في KVM
  • Fuzzer: الكود الخاص بالهدف المستخدم لتعديل ومراقبة الجهاز الضيف من أجل حالة fuzz خاصة بالهدف

يبدأ الـ Hypervisor بتعيين ملف الذاكرة الفعلية لكل نواة مطلوبة. وبهذه الطريقة، تمتلك كل نواة نسختها الفريدة من الذاكرة. ثم يقوم الـ Hypervisor بإنشاء جهاز KVM الضيف ويمنحه هذه الذاكرة الداعمة (backing memory). بعد ذلك، تتم تهيئة حالة سجلات هذا الضيف باستخدام حالة السجلات المعطاة، ويُطلق تنفيذ الضيف. ينتظر الـ Hypervisor حتى يخرج الضيف (guest exit). يتم التعامل مع كل خروج من قِبل الـ Hypervisor، ويتم تمرير بعضها إلى أداة الـ Fuzzer لإجراء تغييرات أو تعديل أو فحص داخلي خاص بالهدف. إذا أشار معالج الخروج إلى أنه يجب إعادة تعيين الضيف، يخرج الـ Hypervisor من حلقة التشغيل، ويعيد الضيف إلى حالة اللقطة الأصلية، ثم يعيد تشغيل حلقة التشغيل من جديد.

يتم توليد تغطية الضيف باستخدام نقاط توقف التغطية (coverage breakpoints). يمكن تقديم ملف منفصل يحتوي على قائمة عناوين لوضع نقاط توقف عندها إلى الـ Hypervisor. إذا تم الوصول إلى أي من هذه العناوين، سيُضاف العنوان إلى قاعدة بيانات التغطية، وتُستعاد التعليمات الخاصة بذلك العنوان. وبهذه الطريقة، لن يتم تفعيل نقطة التوقف مرة أخرى.

دليل المشروع

يستفيد Snapchange من أدلة مشاريع مخصصة للهدف (target specific) من أجل الإعدادات (configuration). هذا الدليل هو المكان الذي توضع فيه ملفات وأدلة الإدخال والإخراج. تُستخدم امتدادات/أدلة الملفات التالية كمدخلات:

  • .physmem - الملف الذي يحتوي على ملف الذاكرة الفعلية الخام
  • ملف السجلات (أحد الخيارات التالية)
    • .regs - ملف سجلات JSON يحتوي على حالة السجلات
    • .qemuregs - مخرجات info registers من qemu

يمكن العثور على القائمة الكاملة للملفات واستخداماتها في دليل المشروع هنا

تتبع التصحيح

يمكن العثور على مثال كامل لتتبع التصحيح خطوة بخطوة هنا.

root@kitploit:~
ITERATION 604 0x00007ffff7ecb0d5 0x11115000 | libc-2.31.so!__GI___getpid+0x5 (0x7ffff7ecb0d5)              
    syscall 
    [0f, 05]
ITERATION 605 0xffffffff83a00000 0x11115000 | entry_SYSCALL_64+0x0 (0xffffffff83a00000)                    
    swapgs 
    [0f, 01, f8]
ITERATION 606 0xffffffff83a00003 0x11115000 | entry_SYSCALL_64+0x3 (0xffffffff83a00003)                    
    mov qword ptr gs:[0xa014], rsp 
    [None:0x0+0xa014=0xa014]] 
    RSP:0x7fffffffeb78 -> example1!main+0x19 (0x55555555514e)-> 0xff8458b48f44589
    [65, 48, 89, 24, 25, 14, a0, 00, 00]
ITERATION 607 0xffffffff83a0000c 0x11115000 | entry_SYSCALL_64+0xc (0xffffffff83a0000c)                    
    nop 
    [66, 90]
ITERATION 608 0xffffffff83a0000e 0x11115000 | entry_SYSCALL_64+0xe (0xffffffff83a0000e)                    
    mov rsp, cr3 
    RSP:0x7fffffffeb78 -> example1!main+0x19 (0x55555555514e) -> 0xff8458b48f44589
    CR3:0x11115000
    [0f, 20, dc]

اللقطات

فيما يلي معلومات حول الحصول على لقطة عبر VirtualBox أو QEMU:

  • VirtualBox
  • QEMU

تتضمن الأمثلة سكربت make_example.sh (مثل المثال 1) ينشئ لقطة كاملة من الصفر. يمكن استخدام هذه الأمثلة كقالب لأهداف أخرى للحصول على لقطات قابلة لإعادة الإنتاج.

التوثيق وclippy

root@kitploit:~
make all
cargo doc --open

من أين تبدأ القراءة؟

يوفر ملف HACKING بعض المواقع عالية المستوى في قاعدة الشيفرة للبدء في فهم النظام.

الأمان

انظر CONTRIBUTING لمزيد من المعلومات.

الترخيص

هذا المشروع مرخّص بموجب رخصة Apache-2.0.

تنزيل الأداة