फ़ज़िल्ली एक जावास्क्रिप्ट इंजन फ़ज़िंग लाइब्रेरी है, यह एक कस्टम इंटरमीडिएट भाषा (“फ़ज़ील”) पर आधारित गतिशील भाषा दुभाषियों के लिए एक कवरेज-निर्देशित फ़ेज़र है, जिसे म्यूट करके जावास्क्रिप्ट में अनुवाद किया जा सकता है।
जब कोर दुभाषिया कीड़े के लिए फ़ज़िंग, उदा। जेआईटी संकलक में, उत्पन्न कार्यक्रमों की शब्दार्थ शुद्धता एक चिंता का विषय बन जाती है। यह अधिकांश अन्य परिदृश्यों के विपरीत है, उदा। रनटाइम एपीआई की फजिंग, जिस स्थिति में सेरेमिक शुद्धता को आसानी से कोशिश करने वाले कैड में उत्पन्न कोड को लपेटकर काम किया जा सकता है। शब्दार्थिक रूप से सही नमूनों की स्वीकार्य दर हासिल करने के लिए विभिन्न संभावनाएँ हैं, उनमें से एक पारस्परिक दृष्टिकोण है जिसमें कॉर्पस में सभी नमूने भी शब्दार्थ रूप से मान्य हैं। उस स्थिति में, प्रत्येक म्यूटेशन में केवल एक वैध नमूने को अमान्य में बदलने का एक छोटा मौका होता है।
फ़ज़िल्ली जावास्क्रिप्ट इंजन फ़ज़िंग लाइब्रेरी का उपयोग करना
इस फ़जर का उपयोग करने के लिए बुनियादी कदम हैं:
- समर्थित जावास्क्रिप्ट इंजन में से एक के लिए स्रोत कोड डाउनलोड करें। समर्थित जावास्क्रिप्ट इंजनों की सूची के लिए लक्ष्य / निर्देशिका देखें।
- लक्ष्य की निर्देशिका से संबंधित पैच लागू करें। उस निर्देशिका में README.md भी देखें।
- README में वर्णित के रूप में कवरेज इंस्ट्रूमेंटेशन (क्लैंग> = 4.0) के साथ इंजन को संकलित करें।
- फ़ज़ाइल संकलित करें:
swift build [-c release]
। - फेजर चलाएं:
swift run [-c release] FuzzilliCli --profile=
। तेजी से रन भी देखें[other cli options] /path/to/jsshell FuzzilliCli --help
।
FuzzIl कैसे काम करता है
FuzzIL में कई गुण हैं:
- एक फ़ज़िल कार्यक्रम केवल निर्देशों की एक सूची है।
- एक फ़ज़िल निर्देश इनपुट और आउटपुट चर और संभावित एक या अधिक मापदंडों के साथ एक ऑपरेशन है (ऊपर नोट में एकल उद्धरण में संलग्न)।
- निर्देशों के इनपुट हमेशा चर होते हैं, तत्काल मान नहीं होते हैं।
- एक निर्देश का प्रत्येक आउटपुट एक नया चर है, और मौजूदा चर को केवल पुन: असाइन किए गए अनुदेश जैसे समर्पित संचालन के माध्यम से पुन: असाइन किया जा सकता है।
- प्रत्येक चर का उपयोग करने से पहले परिभाषित किया गया है।
तब इन कार्यक्रमों पर कई उत्परिवर्तन किए जा सकते हैं:
- InputMutator: प्रोग्राम के डेटाफ़्लो को म्यूट करने के लिए अलग-अलग लोगों के साथ निर्देशों के इनपुट चर को बदलता है।
- CodeGenMutator: कोड उत्पन्न करता है और इसे म्यूट किए गए प्रोग्राम में कहीं सम्मिलित करता है। कोड जेनरेटर चलाकर या फिर कोरपस (स्प्लिसिंग) में किसी अन्य प्रोग्राम के कुछ निर्देशों को कॉपी करके कोड उत्पन्न किया जाता है।
- CombineMutator: उत्परिवर्तित प्रोग्राम में कॉर्पस से एक प्रोग्राम को यादृच्छिक स्थिति में सम्मिलित करता है।
- OperationMutator: संचालन के मापदंडों को बदल देता है, उदाहरण के लिए एक पूर्णांक के साथ एक भिन्न के साथ स्थिरांक की जगह।
- और अधिक…
आप फ़ज़िल्ली को यहाँ डाउनलोड कर सकते हैं:
fuzzilli-v0.9.1.zip
या यहाँ और अधिक पढ़ें।