अपडेट पर वापस जाएँ
New releaseAug 10, 2026

LibAFL v0.16.0

उन्नत फ़ज़िंग लाइब्रेरी - अपने फ़ज़र को Rust में एक साथ स्लॉट करें! कोर और मशीनों पर स्केल करता है। Windows, Android, MacOS, Linux, no_std, ... के लिए

साझा करें

LibAFL, फजर लाइब्रेरी

लिबएएफएल लोगो

उन्नत फजिंग लाइब्रेरी - अपने स्वयं के फजर्स को एक साथ जोड़ें और Rust का उपयोग करके उनकी सुविधाओं का विस्तार करें।

LibAFL Rust में लिखे गए फजर्स के पुन: प्रयोज्य टुकड़ों का एक संग्रह है, यह आपको एक तैयार फजर के कई लाभ देता है, जबकि पूरी तरह से अनुकूलन योग्य है। वर्तमान में कुछ मुख्य विशेषताएं इस प्रकार हैं:

  • fast: हम कंपाइल समय पर वह सब कुछ करते हैं जो हम कर सकते हैं, रनटाइम ओवरहेड को न्यूनतम रखते हुए। उपयोगकर्ता फ़ोन पर frida-मोड में 120k execs/sec तक पहुँचते हैं (सभी कोर का उपयोग करके)।
  • scalable: लो लेवल मैसेज पासिंग, संक्षेप में LLMP, LibAFL को कोरों में लगभग रैखिक रूप से और TCP के माध्यम से कई मशीनों पर स्केल करने की अनुमति देता है।
  • adaptable: आप LibAFL के प्रत्येक भाग को बदल सकते हैं। उदाहरण के लिए, BytesInput इनपुट का केवल एक संभावित रूप है: संरचित फजिंग के लिए AST-आधारित इनपुट जोड़ने आदि के लिए स्वतंत्र महसूस करें।
  • multi platform: LibAFL Windows, macOS, iOS, Linux, और Android, और अधिक पर चलता है। LibAFL को no_std मोड में बनाया जा सकता है ताकि LibAFL को एम्बेडेड डिवाइस और हाइपरवाइज़र जैसे अस्पष्ट लक्ष्यों में इंजेक्ट किया जा सके।
  • bring your own target: हम बाइनरी-ओनली मोड, जैसे Frida-Mode, के साथ-साथ स्रोत-आधारित इंस्ट्रूमेंटेशन के लिए कई कंपाइलेशन पास का समर्थन करते हैं। बेशक कस्टम इंस्ट्रूमेंटेशन बैकएंड जोड़ना आसान है।

मुख्य अवधारणाएँ

LibAFL तेज़, मल्टी-प्लेटफ़ॉर्म, no_std संगत है, और कोर और मशीनों पर स्केल करता है। यह एक मुख्य क्रेट प्रदान करता है जो कस्टम फजर्स के लिए बिल्डिंग ब्लॉक्स प्रदान करता है, libafl, एक लाइब्रेरी जिसमें सामान्य कोड होता है जिसका उपयोग लक्ष्य इंस्ट्रूमेंटेशन के लिए किया जा सकता है, libafl_targets, और एक लाइब्रेरी जो कंपाइलर्स को लपेटने की सुविधा प्रदान करती है, libafl_cc। यह लोकप्रिय इंस्ट्रूमेंटेशन फ्रेमवर्क के साथ एकीकरण प्रदान करता है। फिलहाल, समर्थित बैकएंड हैं:

  • SanitizerCoverage, libafl_targets में
  • Frida, libafl_frida में
  • क्यूईएमयू उपयोगकर्ता-मोड और सिस्टम मोड, अनुकरण के लिए हुक सहित, libafl_qemu में
  • TinyInst, libafl_tinyinst में, elbiazo द्वारा

निर्माण और स्थापना

निर्भरताएँ स्थापित करें

  • Rust विकास भाषा
    • हम दृढ़ता से अनुशंसा करते हैं कि आप उदा. अपने Linux वितरण पैकेज का उपयोग न करें क्योंकि यह संभवतः पुराना है। इसलिए सीधे Rust स्थापित करें, निर्देश यहाँ पाए जा सकते हैं।

    • न्यूनतम समर्थित Rust संस्करण परिभाषित है। आप हमेशा LibAFL के Cargo.toml में आवश्यक संस्करण की जांच कर सकते हैं:

      यदि आपका स्थापित Rust संस्करण Cargo.toml में सूचीबद्ध संस्करण से पुराना है, तो नवीनतम स्थिर टूलचेन पर अपडेट करें:

      rustup update stable
      
  • LLVM उपकरण
    • LLVM उपकरण (clang, clang++ सहित) आवश्यक हैं (LLVM 15.0.0 से नया, LLVM 18.1.3 तक)। यदि आप Debian/Ubuntu का उपयोग कर रहे हैं, तो हम दृढ़ता से अनुशंसा करते हैं कि आप यहाँ से पैकेज स्थापित करें
  • जस्ट:
    • हम fuzzers/ निर्देशिका में फजर्स बनाने के लिए just का उपयोग करते हैं। आप इसे अपने वातावरण में स्थापित करने के निर्देश जस्ट प्रोग्रामर मैनुअल में पा सकते हैं।

LibAFL रिपॉजिटरी को क्लोन करें

git clone https://github.com/AFLplusplus/LibAFL

लाइब्रेरी का निर्माण करें

cargo build --release

API दस्तावेज़ीकरण का निर्माण करें

cargo doc

LibAFL पुस्तक ब्राउज़ करें (WIP!) इसके साथ (mdbook आवश्यक है)

cd docs && mdbook serve

शुरू करना

हम सभी उदाहरण फजर्स को ./fuzzers में एकत्र करते हैं। उनका दस्तावेज़ीकरण (और स्रोत) पढ़ना सुनिश्चित करें, यह शुरू करने का प्राकृतिक तरीका है!

just run

आप इस आदेश के साथ प्रत्येक उदाहरण फजर चला सकते हैं, जब तक फजर निर्देशिका में Justfile फ़ाइल है। सबसे अच्छी तरह से परीक्षण किया गया फजर ./fuzzers/inprocess/libfuzzer_libpng है, जो libpng हार्नेस के लिए LibAFL का उपयोग करने वाला एक मल्टीकोर libfuzzer-जैसा फजर है।

संसाधन

योगदानकर्ता

LibAFL निम्नलिखित द्वारा लिखा और अनुरक्षित किया जाता है:

योगदान देना

कृपया योगदान दिशानिर्देशों के लिए CONTRIBUTING.md देखें।

डीबगिंग

आपका फजर अपेक्षा के अनुसार काम नहीं कर रहा है? अपनी समस्याओं को डीबग करने का तरीका समझने के लिए DEBUGGING.md पढ़ने का प्रयास करें।

उद्धरण

यदि आप अपने अकादमिक कार्य के लिए LibAFL का उपयोग करते हैं, तो कृपया निम्नलिखित पेपर उद्धृत करें:

@inproceedings{libafl,
 author       = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
 title        = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
 booktitle    = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
 series       = {CCS '22},
 year         = {2022},
 month        = {November},
 location     = {Los Angeles, U.S.A.},
 publisher    = {ACM},
}

लाइसेंस

आपकी पसंद के अनुसार या तो Apache लाइसेंस, संस्करण 2.0 या MIT लाइसेंस के तहत लाइसेंस प्राप्त है।
जब तक आप स्पष्ट रूप से अन्यथा नहीं बताते, आपके द्वारा इस क्रेट में योगदान के लिए जानबूझकर प्रस्तुत किया गया कोई भी योगदान, जैसा कि Apache-2.0 लाइसेंस में परिभाषित है, बिना किसी अतिरिक्त नियमों या शर्तों के ऊपर बताए अनुसार दोहरी लाइसेंस प्राप्त होगा।

श्रेणियाँ