अपडेट पर वापस जाएँ
New releaseSep 4, 2026

AFLplusplus v5.03c

फ़ज़र afl++ afl है जिसमें सामुदायिक पैच, qemu 5.1 अपग्रेड, collision-free कवरेज, बेहतर laf-intel और redqueen, AFLfast++ पावर शेड्यूल, MOpt म्यूटेटर, unicorn_mode, और बहुत कुछ शामिल है!

साझा करें

अमेरिकन फ़ज़ी लोप प्लस प्लस (AFL++)

AFL++ logo

रिलीज़ संस्करण: 5.03c

GitHub संस्करण: 5.03c

रिपॉज़िटरी: https://github.com/AFLplusplus/AFLplusplus

AFL++ का रखरखाव निम्नलिखित द्वारा किया जाता है:

मूल रूप से Michal "lcamtuf" Zalewski द्वारा विकसित।

AFL++ Google के AFL का एक बेहतर फ़ोर्क है - अधिक गति, अधिक और बेहतर म्यूटेशन, अधिक और बेहतर इंस्ट्रूमेंटेशन, कस्टम मॉड्यूल समर्थन, आदि।

AFL++ AGPL-3.0-or-later के अंतर्गत लाइसेंस प्राप्त है, और इसमें Apache-2.0 लाइसेंस के अंतर्गत फ़ाइलें भी शामिल हैं। फ़ज़िंग हार्नेस में संकलित की गई हर चीज़ Apache 2.0 लाइसेंस के अंतर्गत रहेगी। प्रत्येक फ़ाइल अपने SPDX-License-Identifier हेडर में अपना स्वयं का लाइसेंस बताती है — यही वह लाइसेंस है जिसका पालन आपको उस फ़ाइल के लिए करना होगा। उन संगठनों के लिए एक वैकल्पिक वाणिज्यिक लाइसेंस उपलब्ध है जो AGPL का उपयोग नहीं कर सकते (एक अच्छे उद्देश्य के लिए दान करके प्राप्त किया जाता है — परियोजना और इसके रखरखावकर्ताओं को कोई धन नहीं मिलता)। सरल भाषा में अवलोकन के लिए LICENSING.md देखें और विवरण के लिए नीचे लाइसेंस अनुभाग देखें।

आरंभ करना

आपको आरंभ करने के लिए यहां कुछ जानकारी दी गई है:

  • AFL++ दस्तावेज़ीकरण के अवलोकन और एक बहुत ही उपयोगी ग्राफिकल गाइड के लिए, कृपया docs/README.md पर जाएं।
  • ट्यूटोरियल के साथ आरंभ करने के लिए, docs/tutorials.md पर जाएं।
  • रिलीज़ के लिए, रिलीज़ टैब और ब्रांच देखें। उपयोग करने के लिए सबसे अच्छी ब्रांच, हालांकि, stable या dev हैं - आपकी जोखिम लेने की क्षमता पर निर्भर करता है। साथ ही AFL++ में महत्वपूर्ण परिवर्तनों की सूची और विशेषताओं की सूची पर एक नज़र डालें।
  • यदि आप अपने शैक्षणिक कार्य के लिए AFL++ का उपयोग करना चाहते हैं, तो वेबसाइट पर पेपर्स पेज देखें।
  • हमारे कार्य को उद्धृत करने के लिए, Cite अनुभाग देखें।
  • तुलना के लिए, fuzzbench aflplusplus सेटअप का उपयोग करें, या AFL_LLVM_CMPLOG=1 के साथ afl-clang-fast का उपयोग करें। आप Google के fuzzbench पर aflplusplus डिफ़ॉल्ट कॉन्फ़िगरेशन पा सकते हैं।

AFL++ का निर्माण और स्थापना

AFL++ को सब कुछ संकलित के साथ आसानी से उपलब्ध कराने के लिए, छवि को सीधे Docker Hub से खींचें (x86_64 और arm64 दोनों के लिए उपलब्ध):

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

यह छवि स्वचालित रूप से प्रकाशित होती है जब stable ब्रांच पर पुश होता है (ब्रांच देखें)। यदि आप उपरोक्त कमांड का उपयोग करते हैं, तो आपको अपना लक्ष्य स्रोत कोड कंटेनर में /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...]
    

    डिक्शनरी जोड़ने के लिए, afl-fuzz में -x /path/to/dictionary.txt जोड़ें।

    यदि प्रोग्राम फ़ाइल से इनपुट लेता है, तो आप प्रोग्राम की कमांड लाइन में @@ डाल सकते हैं; AFL++ आपके लिए वहां एक स्वतः-जनित फ़ाइल नाम रख देगा।

  4. फ़ज़र UI में लाल रंग में दिखाई गई किसी भी चीज़ की तुरंत जांच करें docs/afl-fuzz_approach.md#understanding-the-status-screen से परामर्श करके।

  5. आपको मिले क्रैश और हैंग -o output_dir निर्देशिका में crashes/ और hangs/ उपनिर्देशिकाओं में मिलेंगे। आप क्रैश को लक्ष्य पर फीड करके उन्हें फिर से चला सकते हैं, उदाहरण के लिए यदि आपका लक्ष्य stdin का उपयोग कर रहा है:

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

    आप कोर जनरेट कर सकते हैं या क्रैश का अनुसरण करने के लिए सीधे gdb का उपयोग कर सकते हैं।

  6. अपनी फ़ज़िंग के कवरेज विश्लेषण के लिए हम अपने साथी टूल cov-analysis (फ़ज़िंग कॉर्पस से स्रोत-आधारित कवरेज रिपोर्ट) और fuzz-reachability (स्थैतिक विश्लेषण कि एक हार्नेस किन फ़ंक्शन तक पहुंच सकता है, कार्रवाई योग्य कवरेज अंतराल को मृत कोड से अलग करने और इंस्ट्रूमेंटेशन अनुमतियाँ उत्पन्न करने के लिए) की अनुशंसा करते हैं।

  7. हम इसे पर्याप्त रूप से जोर नहीं दे सकते - यदि आप प्रभावी ढंग से फ़ज़ करना चाहते हैं, तो docs/fuzzing_in_depth.md दस्तावेज़ पढ़ें!

संपर्क

प्रश्न? चिंताएं? बग रिपोर्ट?

ब्रांच

निम्नलिखित ब्रांच मौजूद हैं:

  • release: नवीनतम रिलीज़
  • stable: AFL++ की स्थिर स्थिति - यह समय-समय पर dev से सिंक किया जाता है जब हम इसकी स्थिरता से संतुष्ट होते हैं। यह डिफ़ॉल्ट ब्रांच है।
  • dev: AFL++ की विकास स्थिति
    • ब्लीडिंग एज और आप एक चेकआउट पकड़ सकते हैं जो संकलित नहीं होता या जिसमें बग है। हम केवल 'dev' ब्रांच के लिए PR (पुल रिक्वेस्ट) स्वीकार करते हैं!
  • (कोई अन्य): विशिष्ट सुविधाओं पर काम करने या नई कार्यक्षमता या परिवर्तनों के परीक्षण के लिए प्रयोगात्मक ब्रांच।

सहायता वांछित

"help wanted" टैग वाली हमारी issues सूची देखें। यह AFL++ को समर्थन और योगदान देने का आपका तरीका हो सकता है - इसे कुछ अच्छा करने के लिए विस्तारित करें। यदि आपके पास अन्य विचार हैं - बस एक issue बनाएं और इसे प्रस्तावित करें!

हर उस व्यक्ति के लिए जो योगदान देना चाहता है (और पुल रिक्वेस्ट भेजना चाहता है), कृपया जमा करने से पहले हमारे योगदान दिशानिर्देश पढ़ें।

विशेष धन्यवाद

मूल AFL और AFL++ के कई सुधार हमारे योगदानकर्ताओं के फीडबैक, बग रिपोर्ट या पैच के बिना संभव नहीं होते।

धन्यवाद! (पुल रिक्वेस्ट भेजने वाले लोगों के लिए - कृपया अपना नाम इस सूची में जोड़ें :-)

योगदानकर्ताओं की सूची
  Jann Horn                             Hanno Boeck
  Felix Groebert                        Jakub Wilk
  Richard W. M. Jones                   Alexander Cherepanov
  Tom Ritter                            Hovik Manucharyan
  Sebastian Roschke                     Eberhard Mattes
  Padraig Brady                         Ben Laurie
  @dronesec                             Luca Barbato
  Tobias Ospelt                         Thomas Jarosch
  Martin Carpenter                      Mudge Zatko
  Joe Zbiciak                           Ryan Govostes
  Michael Rash                          William Robinet
  Jonathan Gray                         Filipe Cabecinhas
  Nico Weber                            Jodie Cunningham
  Andrew Griffiths                      Parker Thompson
  Jonathan Neuschaefer                  Tyler Nighswander
  Ben Nagy                              Samir Aguiar
  Aidan Thornton                        Aleksandar Nikolich
  Sam Hakim                             Laszlo Szekeres
  David A. Wheeler                      Turo Lamminen
  Andreas Stieger                       Richard Godbee
  Louis Dassy                           teor2345
  Alex Moneger                          Dmitry Vyukov
  Keegan McAllister                     Kostya Serebryany
  Richo Healey                          Martijn Bogaard
  rc0r                                  Jonathan Foote
  Christian Holler                      Dominique Pelle
  Jacek Wielemborek                     Leo Barnes
  Jeremy Barnes                         Jeff Trull
  Guillaume Endignoux                   ilovezfs
  Daniel Godas-Lopez                    Franjo Ivancic
  Austin Seipp                          Daniel Komaromy
  Daniel Binderman                      Jonathan Metzman
  Vegard Nossum                         Jan Kneschke
  Kurt Roeckx                           Marcel Boehme
  Van-Thuan Pham                        Abhik Roychoudhury
  Joshua J. Drake                       Toby Hutton
  Rene Freingruber                      Sergey Davidoff
  Sami Liedes                           Craig Young
  Andrzej Jackowski                     Daniel Hodson
  Nathan Voss                           Dominik Maier
  Andrea Biondo                         Vincent Le Garrec
  Khaled Yakdan                         Kuang-che Wu
  Josephine Calliotte                   Konrad Welc
  Thomas Rooijakkers                    David Carlier
  Ruben ten Hove                        Joey Jiao
  fuzzah                                @intrigus-lgtm
  Yaakov Saxon                          Sergej Schumilo
  Ziqiao Kong                           Ryan Berger
  Sangjun Park                          Scott Guest
  Fabian Keil                           @Jay-1409
  Gergely Nagy

उद्धरण

यदि आप वैज्ञानिक कार्यों में AFL++ का उपयोग करते हैं, तो WOOT'20 में प्रस्तुत हमारे पेपर को उद्धृत करने पर विचार करें:

Andrea Fioraldi, Dominik Maier, Heiko Eißfeldt, and Marc Heuse. “AFL++: Combining incremental steps of fuzzing research”. In 14th USENIX Workshop on Offensive Technologies (WOOT 20). USENIX Association, Aug. 2020.
BibTeX
@inproceedings {AFLplusplus-Woot20,
author = {Andrea Fioraldi and Dominik Maier and Heiko Ei{\ss}feldt and Marc Heuse},
title = {{AFL++}: Combining Incremental Steps of Fuzzing Research},
booktitle = {14th {USENIX} Workshop on Offensive Technologies ({WOOT} 20)},
year = {2020},
publisher = {{USENIX} Association},
month = aug,
}

zread Ask DeepWiki

लाइसेंस

AFL++ GNU AGPL-3.0-or-later के अंतर्गत लाइसेंस प्राप्त है। संक्षेप में, आप AFL++ का उपयोग तीन तरीकों से कर सकते हैं:

  1. मुफ्त, AGPL-3.0-or-later के अंतर्गत: डिफ़ॉल्ट। AFL++ का उपयोग, संशोधन और साझा करें; यदि आप एक संशोधित संस्करण को नेटवर्क सेवा के रूप में चलाते हैं, तो AGPL आपको अपने उपयोगकर्ताओं को संबंधित स्रोत प्रदान करने की आवश्यकता होती है। पूरा पाठ: LICENSE

  2. प्रति फ़ाइल, उसके हेडर में दिए गए लाइसेंस के अंतर्गत: परियोजना में SPDX-License-Identifier: AGPL-3.0-or-later और SPDX-License-Identifier: Apache-2.0 दोनों के अंतर्गत फ़ाइलें शामिल हैं। हमेशा उस फ़ाइल का हेडर जांचें जिसका आप उपयोग करते हैं और वहां बताए गए लाइसेंस का पालन करें; Apache-2.0 चिह्नित फ़ाइलों का Apache-2.0 लाइसेंस के अंतर्गत व्यक्तिगत रूप से पुन: उपयोग किया जा सकता है। (कुछ बंडल की गई तृतीय-पक्ष फ़ाइलें अन्य लाइसेंस रखती हैं, उदाहरण के लिए GCC प्लगइन GPL-3.0-or-later के अंतर्गत और LLVM SanitizerCoverage पास Apache-2.0-WITH-LLVM-exception के अंतर्गत — प्रत्येक अपने स्वयं के SPDX पहचानकर्ता द्वारा चिह्नित)। ध्यान दें कि संयुक्त afl-fuzz बाइनरी में AGPL फ़ाइलें शामिल हैं, इसलिए प्रोग्राम समग्र रूप से AGPL है।

  3. वाणिज्यिक लाइसेंस: वैकल्पिक, उन संगठनों के लिए जो AGPL का पालन नहीं कर सकते या नहीं करना चाहते। परियोजना को कोई धन नहीं मिलता। इसके बजाय आप EUR 20,000 (€20,000) या तो EFF या CCC को दान करते हैं और [email protected] पर प्रमाण ईमेल करते हैं; आपका लाइसेंस तब दान की तारीख से एक वर्ष के लिए प्रभावी होता है (फिर से दान करके नवीकरणीय)। पूरी शर्तें: LICENSE.COMMERCIAL

बंडल की गई तृतीय-पक्ष घटक (जैसे xxHash, t1ha, libFuzzer, सबमॉड्यूल) अपने स्वयं के लाइसेंस रखते हैं। पूर्ण सरल-भाषा अवलोकन के लिए, LICENSING.md देखें।

श्रेणियाँ