0Pricing
C++ Academy · درس

اختبار Fuzzing باستخدام libFuzzer

اكتشف الأعطال في الحالات الطرفية باختبار شيفرتك باستخدام libFuzzer.

اختبار Fuzzing باستخدام libFuzzer درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

لماذا الاختبار العشوائي؟

ينشئ الاختبار العشوائي مدخلات عشوائية للعثور على حالات الانهيار والتعليق والأخطاء الأمنية. ويستخدم الاختبار العشوائي الحديث ملاحظات التغطية لتطوير مدخلات تستكشف مسارات شيفرة جديدة.

libFuzzer

‏libFuzzer جزء من LLVM ويتكامل مع أدوات التعقيم. اكتب دالة واحدة تختبر نقطة دخول واحدة عشوائيًا؛ ويتولى الإطار إنشاء المدخلات.

كتابة هدف للاختبار العشوائي

التوقيع ثابت: استقبل مصفوفة من البايتات وأعد القيمة 0.

#include <cstdint>
#include <cstddef>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
    parse_input(reinterpret_cast<const char*>(data), size);
    return 0;
}

الترجمة لـ libFuzzer

استخدم Clang مع التركيبة -fsanitize=fuzzer,address. اربط مباشرة، فلا حاجة إلى main.

clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_target

التغيير الموجّه بالتغطية

يتتبع libFuzzer مسارات الشيفرة التي تنفذها كل مدخلة. ويغيّر المدخلات الواعدة لاستكشاف مسارات أعمق، وهو أكثر كفاءة بكثير من التوليد العشوائي الأعمى.

مجموعة المدخلات

زوّد أداة الاختبار العشوائي بمجلد يحتوي على مدخلات معروفة ومثيرة للاهتمام. وتطوّر الأداة مدخلات جديدة بتغيير هذه المدخلات.

./fuzz_target corpus/

ملفات القاموس

وفّر قاموسًا من الرموز الشائعة لتسريع استكشاف المدخلات ذات البنية النحوية، مثل HTML وJSON ورسائل البروتوكولات.

الدمج مع أدوات التعقيم

يؤدي التشغيل باستخدام AddressSanitizer إلى تحويل حالات الفساد الصامتة إلى حالات انهيار فورية يستطيع الاختبار العشوائي اكتشافها.

الأداء

يمكن لنواة واحدة تنفيذ عشرات الآلاف من عمليات التنفيذ في الثانية على الأهداف الصغيرة. شغّل الاختبار لساعات أو أيام، ودعه يعمل في الخلفية ضمن التكامل المستمر.

إعادة إنتاج حالات الانهيار

عندما يعثر libFuzzer على حالة انهيار، يحفظ المدخلة على القرص. أعد تشغيلها لاحقًا لتصحيح الخطأ.

./fuzz_target crash-abc123

OSS-Fuzz

يشغّل OSS-Fuzz من Google أدوات اختبار عشوائي على مشاريع مفتوحة المصدر باستمرار ويبلغ عن الأخطاء. وتت integrates به العديد من المكتبات البارزة.

AFL وHonggfuzz

توجد أدوات اختبار عشوائي أخرى:

  • AFL/AFL++ — تعمل على مستوى العمليات، مع تسريع عبر خادم التفريع
  • Honggfuzz — تدعم بروتوكولات الشبكة

يُعد libFuzzer أسهل طريقة لدمج الاختبار العشوائي مع C++.

متى تستخدم الاختبار العشوائي

اختبر عشوائيًا أي شيفرة تتعامل مع مدخلات غير موثوقة:

  • محللات البنية (JSON وXML وprotobuf)
  • فكّات الترميز (الصور والصوت والفيديو)
  • معالجات بروتوكولات الشبكة
  • أي شيفرة تقرأ بيانات خارجية

تحقق سريع

ما الذي يجعل الاختبار العشوائي الموجّه بالتغطية أكثر فعالية من الاختبار العشوائي البحت؟

مراجعة سريعة

‏libFuzzer أداة اختبار عشوائي موجّه بالتغطية ومتكاملة مع Clang. اكتب نقطة دخول صغيرة باسم LLVMFuzzerTestOneInput، وابنِ باستخدام -fsanitize=fuzzer,address، ثم اتركها تبحث عن حالات الانهيار. ادمجها مع أدوات التعقيم ومجموعات المدخلات، واختبر عشوائيًا أي شيفرة تتعامل مع مدخلات غير موثوقة.

الأسئلة الشائعة

هل درس «اختبار Fuzzing باستخدام libFuzzer» مجاني؟

نعم — نص درس «اختبار Fuzzing باستخدام libFuzzer» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «اختبار Fuzzing باستخدام libFuzzer»؟

اكتشف الأعطال في الحالات الطرفية باختبار شيفرتك باستخدام libFuzzer. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «اختبار Fuzzing باستخدام libFuzzer»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أدوات التحليل الساكن: clang-tidy وcppcheck
  2. Sanitizers: ‏Address وThread وUB Sanitizer
  3. اختبار Fuzzing باستخدام libFuzzer
  4. التكامل المستمر لمشاريع C++
← العودة إلى C++ Academy