
बंद-स्रोत बाइनरीज़ के लिए रजिस्टर-स्तरीय अपरिवर्तनीय-निर्देशित फ़ज़िंग ढाँचा, जो संभावित अपरिवर्तनीय उल्लंघनों का लाभ उठाकर बाइनरी निष्पादन योग्य फ़ाइलों में क्रैश और बग्स की खोज करता है।
यह भंडार बिनवेरिएंट्स के लिए स्रोत कोड प्रदान करता है: एक प्रोटोटाइप फ़ज़िंग ढाँचा जो बाइनरीज़ के फ़ज़िंग के लिए रजिस्टर-स्तरीय संभावित अपरिवर्तनीय उल्लंघनों का लाभ उठाता है।
यह कार्य हमारे पेपर Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants में प्रस्तुत किया गया है, जो 2026 ACM International Conference on the Foundations of Software Engineering (FSE'26) में प्रकाशित होगा।

| इस भंडार का उद्धरण: |
@inproceedings{yang:binvariants, title = {Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants}, author = {Zao Yang and Stefan Nagy}, year = {2026}, issue_date = {July 2026}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {3}, number = {FSE}, journal = {Proc. ACM Softw. Eng.}}
|
| डेवलपर्स: | Zao Yang ([email protected]) और Stefan Nagy ([email protected]) |
| लाइसेंस: | MIT लाइसेंस |
| अस्वीकरण: | यह सॉफ़्टवेयर बिना किसी वारंटी के 'जैसा है' वैसे ही प्रदान किया जाता है। |
बिनवेरिएंट्स AFL++ और QEMU-AFL पर निर्मित है। बिनवेरिएंट्स स्थापित करने से पहले इन परियोजनाओं के लिए आवश्यक निर्भरताएँ स्थापित करें:
sudo apt-get update
sudo apt-get install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
# try to install llvm-18 and install the distro default if that fails
sudo apt-get install -y lld-18 llvm-18 llvm-18-dev clang-18 || sudo apt-get install -y lld llvm llvm-dev clang
sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-dev
sudo apt-get install -y meson ninja-build # for QEMU mode
बिनवेरिएंट्स में दो घटक शामिल हैं:
प्रत्येक को बनाने के लिए, उनके संबंधित निर्देशिका पर जाएँ और निम्नलिखित आदेश चलाएँ:
./1_patch.sh
./2_build.sh
Example/ में nconvert बाइनरी को फ़ज़ करने के लिए Binvariants का उपयोग करने के उदाहरण स्क्रिप्ट और परीक्षण मामले शामिल हैं। आप अन्य बाइनरीज़ को फ़ज़ करने के लिए स्क्रिप्ट को संशोधित कर सकते हैं।
बिनवेरिएंट्स का उपयोग करने से पहले, ASLR को अक्षम करें, क्योंकि इसे अपरिवर्तनीय सीखने और फ़ज़िंग के बीच सुसंगत बुनियादी ब्लॉक पतों की आवश्यकता होती है:
sudo sysctl -w kernel.randomize_va_space=0
अपरिवर्तनीय सीखने के लिए, चलाएँ:
./Example/1-learn_invs.sh [Binvariants_Root]
अनुमानित RLI को 1-learn_invs.sh में BINV_TRACES_DIR द्वारा निर्दिष्ट निर्देशिका में सहेजा जाएगा, जिसका नाम [PROGRAM]_trace_qemu_invs होगा।
Binvariants के साथ फ़ज़िंग शुरू करने के लिए, चलाएँ:
./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]
उदाहरण के लिए, बिनवेरिएंट्स की रूट निर्देशिका से 48-घंटे के फ़ज़िंग अभियान का पहला परीक्षण चलाएँ:
./Example/2-fuzz.sh $PWD 48h 1
नीचे बिनवेरिएंट्स के लिए संभावित वृद्धियाँ दी गई हैं।
वर्तमान में, बिनवेरिएंट्स फ़ज़िंग से पहले अपरिवर्तनीय सीखता है और फिर फ़ज़िंग को अलग से चलाता है। एक संभावित वृद्धि फ़ज़िंग के दौरान अपरिवर्तनीय सीखना और उन्हें उल्लंघन होने पर अद्यतन करना है, जिससे फीडबैक समय के साथ विकसित हो सके।
संभावित डिज़ाइन विचार:
FSRV_RUN_OK)।बिनवेरिएंट्स वर्तमान में एकल-ब्लॉक अपरिवर्तनीयों पर ध्यान केंद्रित करता है। एक संभावित वृद्धि क्रॉस-ब्लॉक अपरिवर्तनीयों का समर्थन करना है। इसके लिए ब्लॉक सीमाओं के पार रजिस्टर मानों को ट्रैक करने के लिए नए डेटा संरचनाओं के साथ-साथ नियंत्रण ब्लॉकों के बीच स्थानांतरित होने पर उल्लंघनों की जाँच करने के लिए अतिरिक्त इंस्ट्रुमेंटेशन की आवश्यकता होगी।
यदि आपको बिनवेरिएंट्स का उपयोग करके कोई अन्य बग मिलता है, तो कृपया हमें बताएँ!
यह सामग्री राष्ट्रीय विज्ञान फाउंडेशन (NSF) पुरस्कार संख्या 2419798, और रक्षा उन्नत अनुसंधान परियोजना एजेंसी (DARPA) पुरस्कार संख्या FA8750-24-2-0002, उपपुरस्कार संख्या GR105409-SUB00001384 द्वारा समर्थित कार्य पर आधारित है।
| cpdf | https://github.com/johnwhitington/camlpdf/issues/75 |
| sfconvert | https://github.com/mpruett/audiofile/issues/73 |