
AFLplusplus v5.03c
AFL++ एक अत्याधुनिक फ़ज़र है, और बेंचमार्क में #1 है। यह मूल रूप से AFL पर आधारित था। आज यह qemu 5.1, collision-free coverage, उन्नत laf-intel और redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, और बहुत कुछ के साथ आता है!
American Fuzzy Lop plus plus (AFL++)
रिलीज़ संस्करण: 5.03c
GitHub संस्करण: 5.04a
रिपॉज़िटरी: 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 देखें और
विवरण के लिए नीचे License अनुभाग देखें।
शुरुआत करना
आरंभ करने के लिए यहाँ कुछ जानकारी दी गई है:
- AFL++ दस्तावेज़ीकरण के अवलोकन और एक बहुत ही उपयोगी ग्राफ़िकल गाइड के लिए, कृपया docs/README.md पर जाएँ।
- ट्यूटोरियल के साथ शुरुआत करने के लिए, docs/tutorials.md पर जाएँ।
- रिलीज़ के लिए,
Releases टैब और
branches देखें। हालाँकि, उपयोग करने के लिए सबसे अच्छी शाखाएँ
stableयाdevहैं - आपकी जोखिम सहनशीलता के आधार पर। साथ ही AFL++ में महत्वपूर्ण परिवर्तनों की सूची और विशेषताओं की सूची पर भी एक नज़र डालें। - यदि आप अपने अकादमिक कार्य के लिए AFL++ का उपयोग करना चाहते हैं, तो वेबसाइट पर papers पृष्ठ देखें।
- हमारे कार्य को उद्धृत करने के लिए, 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 ब्रांच पर पुश होता है
(देखें branches)। यदि आप ऊपर दिया गया कमांड उपयोग करते हैं, तो आपको अपना
लक्ष्य स्रोत कोड कंटेनर में /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 (किस फ़ंक्शन तक कोई हार्नेस पहुँच सकता है, इसका स्थिर विश्लेषण, ताकि कार्रवाई योग्य कवरेज अंतरालों को डेड कोड से अलग किया जा सके और इंस्ट्रुमेंटेशन allowlist जनरेट की जा सके) की सलाह देते हैं
-
हम इस पर पर्याप्त ज़ोर नहीं दे सकते - यदि आप प्रभावी ढंग से फ़ज़ करना चाहते हैं, तो docs/fuzzing_in_depth.md दस्तावेज़ पढ़ें!
संपर्क
प्रश्न? चिंताएँ? बग रिपोर्ट?
- योगदानकर्ताओं से (उदाहरण के लिए, एक issue बनाकर - लेकिन केवल AFL++ दोषों के लिए!) यहाँ संपर्क किया जा सकता है: https://github.com/AFLplusplus/AFLplusplus.
- हमारे FAQ और Best Practices पर एक नज़र डालें।
- सर्वोत्तम: Fuzzing Zulip server से जुड़ें!
ब्रांचें
निम्नलिखित ब्रांचें मौजूद हैं: