
AFLplusplus v5.03c
AFL++ एक अत्याधुनिक फ़ज़र है, और बेंचमार्क में #1 है। यह मूल रूप से AFL पर आधारित था। आज यह qemu 5.1, collision-free coverage, उन्नत laf-intel और redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, और बहुत कुछ के साथ आता है!
अमेरिकन फ़ज़ी लोप प्लस प्लस (AFL++)
रिलीज़ संस्करण: 5.03c
GitHub संस्करण: 5.03c
रिपॉज़िटरी: https://github.com/AFLplusplus/AFLplusplus
AFL++ का रखरखाव निम्नलिखित द्वारा किया जाता है:
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode का रखरखाव @Worksbutnottested द्वारा किया जाता है
मूल रूप से 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 देखें।
अन्य लक्ष्यों की फ़ज़िंग के बारे में जानने के लिए, देखें:
- केवल-बाइनरी लक्ष्य: docs/fuzzing_binary-only_targets.md
- नेटवर्क सेवाएं: docs/best_practices.md#fuzzing-a-network-service
- GUI प्रोग्राम: docs/best_practices.md#fuzzing-a-gui-program
चरण-दर-चरण त्वरित आरंभ:
-
फ़ज़ किए जाने वाले प्रोग्राम या लाइब्रेरी को
afl-ccका उपयोग करके संकलित करें। ऐसा करने का एक सामान्य तरीका होगा:CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all -
एक छोटी लेकिन मान्य इनपुट फ़ाइल प्राप्त करें जो प्रोग्राम के लिए सार्थक हो। जब वर्बोज़ सिंटैक्स (SQL, HTTP, आदि) की फ़ज़िंग कर रहे हों, तो dictionaries/README.md में वर्णित अनुसार एक डिक्शनरी भी बनाएं।
-
यदि प्रोग्राम 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++ आपके लिए वहां एक स्वतः-जनित फ़ाइल नाम रख देगा। -
फ़ज़र UI में लाल रंग में दिखाई गई किसी भी चीज़ की तुरंत जांच करें docs/afl-fuzz_approach.md#understanding-the-status-screen से परामर्श करके।
-
आपको मिले क्रैश और हैंग
-o output_dirनिर्देशिका मेंcrashes/औरhangs/उपनिर्देशिकाओं में मिलेंगे। आप क्रैश को लक्ष्य पर फीड करके उन्हें फिर से चला सकते हैं, उदाहरण के लिए यदि आपका लक्ष्य stdin का उपयोग कर रहा है:cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]आप कोर जनरेट कर सकते हैं या क्रैश का अनुसरण करने के लिए सीधे gdb का उपयोग कर सकते हैं।
-
अपनी फ़ज़िंग के कवरेज विश्लेषण के लिए हम अपने साथी टूल cov-analysis (फ़ज़िंग कॉर्पस से स्रोत-आधारित कवरेज रिपोर्ट) और fuzz-reachability (स्थैतिक विश्लेषण कि एक हार्नेस किन फ़ंक्शन तक पहुंच सकता है, कार्रवाई योग्य कवरेज अंतराल को मृत कोड से अलग करने और इंस्ट्रूमेंटेशन अनुमतियाँ उत्पन्न करने के लिए) की अनुशंसा करते हैं।
-
हम इसे पर्याप्त रूप से जोर नहीं दे सकते - यदि आप प्रभावी ढंग से फ़ज़ करना चाहते हैं, तो docs/fuzzing_in_depth.md दस्तावेज़ पढ़ें!
संपर्क
प्रश्न? चिंताएं? बग रिपोर्ट?
- योगदानकर्ताओं तक पहुंचा जा सकता है (उदाहरण के लिए, एक issue बनाकर - लेकिन केवल AFL++ दोषों के लिए!): https://github.com/AFLplusplus/AFLplusplus.
- हमारे FAQ और सर्वोत्तम अभ्यास पर एक नज़र डालें।
- सर्वोत्तम: Fuzzing Zulip सर्वर से जुड़ें!
ब्रांच
निम्नलिखित ब्रांच मौजूद हैं: