العودة إلى التحديثات
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++ هو أداة fuzzing متقدمة، وتحتل المرتبة الأولى في المعايير القياسية. كان في الأصل مبنيًا على AFL. اليوم يأتي مع qemu 5.1، وتغطية خالية من التعارض، وlaf-intel & redqueen المحسّنين، وجداول طاقة AFLfast++، وmutators MOpt، وunicorn_mode، والكثير غير ذلك!

مشاركة

American Fuzzy Lop plus plus (AFL++)

شعار AFL++

إصدار الإصدار: 5.03c

إصدار GitHub: 5.04a

المستودع: https://github.com/AFLplusplus/AFLplusplus

يتم صيانة AFL++ بواسطة:

تم تطويره في الأصل بواسطة Michal "lcamtuf" Zalewski.

AFL++ هو تفرع (fork) متفوق على AFL من Google - سرعة أكبر، وطفرات (mutations) أكثر وأفضل، وأدوات تتبع (instrumentation) أكثر وأفضل، ودعم وحدات مخصصة، وغير ذلك.

AFL++ مرخّص بموجب AGPL-3.0-or-later، ويحتوي أيضاً على ملفات بموجب ترخيص Apache-2.0. كل ما يتم تجميعه في أداة اختبار (fuzzing harness) هو وسيبقى مرخّصاً بموجب Apache 2.0. يحدد كل ملف ترخيصه الخاص في ترويسته SPDX-License-Identifier — وهذا هو الترخيص الذي يجب عليك اتباعه لذلك الملف. يتوفر ترخيص تجاري اختياري للمؤسسات التي لا يمكنها استخدام AGPL (يُحصل عليه بالتبرع لقضية نبيلة — لا يتلقى المشروع والقائمون عليه أي أموال). راجع LICENSING.md للحصول على نظرة عامة بلغة واضحة و قسم الترخيص أدناه للحصول على التفاصيل.

البدء

إليك بعض المعلومات لتبدأ بها:

  • للحصول على نظرة عامة على وثائق AFL++ ودليل رسومي مفيد جداً، يرجى زيارة docs/README.md.
  • للبدء مع الدروس التعليمية، انتقل إلى docs/tutorials.md.
  • بالنسبة للإصدارات، راجع علامة تبويب الإصدارات و الفروع. أفضل الفروع لاستخدامها، مع ذلك، هي stable أو dev - اعتماداً على مدى تحمّلك للمخاطر. ألقِ نظرة أيضاً على قائمة التغييرات المهمة في AFL++ وقائمة الميزات.
  • إذا كنت ترغب في استخدام AFL++ في عملك الأكاديمي، تحقق من صفحة الأوراق البحثية على الموقع.
  • لاقتباس عملنا، راجع قسم الاقتباس.
  • للمقارنات، استخدم إعداد aflplusplus في fuzzbench، أو استخدم afl-clang-fast مع AFL_LLVM_CMPLOG=1. يمكنك العثور على التكوين الافتراضي لـ aflplusplus على fuzzbench الخاص بـ Google.

بناء وتثبيت AFL++

للحصول على AFL++ بسهولة مع كل شيء مُجمّعاً، اسحب الصورة مباشرة من Docker Hub (متاحة لكل من x86_64 وarm64):

docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus

تُنشر هذه الصورة تلقائيًا عند حدوث دفع إلى الفرع المستقر (انظر الفروع). إذا استخدمت الأمر أعلاه، فستجد الشيفرة المصدرية الهدف في /src داخل الحاوية.

ملاحظة: يمكنك أيضًا سحب aflplusplus/aflplusplus:dev وهو أحدث حالة تطوير لـ AFL++.

لبناء AFL++ بنفسك - وهو ما نوصي به - تابع في docs/INSTALL.md.

البدء السريع: التشويش باستخدام AFL++

ملاحظة: قبل أن تبدأ، يُرجى القراءة عن المخاطر البديهية للتشويش.

هذا دليل بدء سريع لتشويش الأهداف المتوفرة شيفرتها المصدرية. لقراءة تفاصيل العملية، انظر docs/fuzzing_in_depth.md.

لمعرفة كيفية تشويش أهداف أخرى، انظر:

دليل البدء السريع خطوة بخطوة:

  1. ترجم البرنامج أو المكتبة المراد تشويشها باستخدام afl-cc. من الطرق الشائعة للقيام بذلك:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. احصل على ملف إدخال صغير لكنه صالح وذو معنى بالنسبة للبرنامج. عند اختبار الصيغ اللفظية المطوّلة (SQL، HTTP، إلخ)، أنشئ قاموسًا كما هو موضح في dictionaries/README.md، أيضًا.

  3. إذا كان البرنامج يقرأ من stdin، شغّل afl-fuzz هكذا:

    ./afl-fuzz -i seeds_dir -o output_dir -- \
    /path/to/tested/program [...program's cmdline...]
    

    لإضافة قاموس، أضف -x /path/to/dictionary.txt إلى afl-fuzz.

    إذا كان البرنامج يستقبل المدخلات من ملف، يمكنك وضع @@ في سطر أوامر البرنامج؛ سيقوم AFL++ بوضع اسم ملف مُولَّد تلقائيًا هناك نيابةً عنك.

  4. تحقّق من أي شيء يظهر باللون الأحمر في واجهة المُدخِّل (fuzzer UI) بالرجوع فورًا إلى docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. ستجد حالات الانهيار والتعليق المكتشفة في الدليلين الفرعيين crashes/ و hangs/ داخل دليل -o output_dir. يمكنك إعادة تشغيل حالات الانهيار عبر تمريرها إلى الهدف، على سبيل المثال إذا كان هدفك يستخدم stdin:

    cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
    

    يمكنك توليد cores أو استخدام gdb مباشرة لمتابعة الأعطال.

  6. لتحليل التغطية الخاص بعملية الـ fuzzing الخاصة بك، نوصي بأدوات شركائنا cov-analysis (تقارير التغطية المستندة إلى المصدر من مجموعة fuzzing) و fuzz-reachability (تحليل ساكن للدوال التي يمكن للـ harness الوصول إليها، لتمييز فجوات التغطية القابلة للتنفيذ عن الكود الميت وتوليد قوائم سماح للـ instrumentation)

  7. لا يمكننا التأكيد على هذا بما فيه الكفاية - إذا كنت تريد تنفيذ fuzzing بفعالية، فاقرأ مستند docs/fuzzing_in_depth.md!

التواصل

أسئلة؟ مخاوف؟ تقارير أخطاء؟

الفروع

توجد الفروع التالية:

  • release: أحدث إصدار
  • stable: الحالة المستقرة من AFL++ - تتم مزامنتها من dev من وقت لآخر عندما نكون راضين عن استقرارها. هذا هو الفرع الافتراضي.
  • dev: حالة التطوير من AFL++ - أحدث ما توصلنا إليه وقد تصادف نسخة لا تُترجم أو تحتوي على خطأ. نقبل فقط طلبات السحب (PRs) لفرع 'dev'!
  • (أي فرع آخر): فروع تجريبية للعمل على ميزات محددة أو اختبار وظائف أو تغييرات جديدة.

المساعدة مطلوبة

اطّلع على قائمة issues الخاصة بنا مع وسم "help wanted". يمكن أن تكون هذه طريقتك لدعم AFL++ والمساهمة فيه - وسّعه ليفعل شيئًا رائعًا. إذا كانت لديك أفكار أخرى - فقط أنشئ issue واقترحها!

لكل من يريد المساهمة (وإرسال طلبات السحب)، يُرجى قراءة إرشادات المساهمة قبل الإرسال.

الفئات