
إطار اختبارات تشويش موجه بالثوابت على مستوى السجلات للبرامج الثنائية مغلقة المصدر، يستفيد من انتهاكات الثوابت المحتملة لاكتشاف الأعطال والأخطاء في الملفات التنفيذية الثنائية.
يوفر هذا المستودع الكود المصدري لـ Binvariants: إطار عمل أولي للتجريب العشوائي يستفيد من انتهاكات الثباتيات المحتملة على مستوى السجلات لاختبار الثنائيات.
تم تقديم هذا العمل في ورقتنا البحثية Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants، والتي ستظهر في المؤتمر الدولي ACM لهندسة البرمجيات (FSE'26) لعام 2026.

| الاستشهاد بهذا المستودع: |
@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 |
| إخلاء مسؤولية: | يتم توفير هذا البرنامج كما هو دون أي ضمان. |
تم بناء Binvariants على أساس AFL++ و QEMU-AFL. قم بتثبيت التبعيات المطلوبة من قبل هذه المشاريع قبل إعداد Binvariants:
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
يتضمن Binvariants مكونين:
لبناء كل منهما، انتقل إلى الدليل الخاص به وقم بتشغيل الأوامر التالية:
./1_patch.sh
./2_build.sh
Example/ يحتوي على نصوص برمجية وحالات اختبار لاستخدام Binvariants لاختبار الثنائية nconvert. يمكنك تعديل النصوص لاختبار ثنائيات أخرى.
قبل استخدام Binvariants، قم بتعطيل ASLR، حيث أنه يحتاج إلى عناوين كتلة أساسية متسقة بين تعلم الثباتيات والتجريب العشوائي:
sudo sysctl -w kernel.randomize_va_space=0
لتعلم الثباتيات، قم بتشغيل:
./Example/1-learn_invs.sh [جذر_Binvariants]
سيتم حفظ الثباتيات المستنتجة في الدليل المحدد بواسطة BINV_TRACES_DIR في 1-learn_invs.sh، باسم: [PROGRAM]_trace_qemu_invs.
لبدء التجريب العشوائي باستخدام Binvariants، قم بتشغيل:
./Example/2-fuzz.sh [جذر_Binvariants] [مدة_التجريب] [رقم_المحاولة]
على سبيل المثال، قم بتشغيل المحاولة الأولى لحملة تجريب عشوائي مدتها 48 ساعة من الدليل الجذر لـ Binvariants:
./Example/2-fuzz.sh $PWD 48h 1
فيما يلي تحسينات محتملة لـ Binvariants.
حاليًا، يتعلم Binvariants الثباتيات قبل التجريب العشوائي ثم يقوم بتشغيل التجريب بشكل منفصل. التحسين المحتمل هو تعلم الثباتيات أثناء التجريب وتحديثها عند حدوث انتهاكات، مما يسمح للتغذية الراجعة بالتطور مع الوقت.
اعتبارات التصميم المحتملة:
FSRV_RUN_OK).يركز Binvariants حاليًا على الثباتيات داخل الكتلة الواحدة. التحسين المحتمل هو دعم الثباتيات عبر الكتل. يتطلب ذلك هياكل بيانات جديدة لتتبع قيم السجلات عبر حدود الكتل، بالإضافة إلى قياس إضافي للتحقق من الانتهاكات عند انتقال التحكم بين الكتل.
إذا وجدت أي أخطاء أخرى باستخدام Binvariants، فيرجى إخبارنا!
هذه المادة مبنية على عمل مدعوم من المؤسسة الوطنية للعلوم (NSF) بموجب الجائزة رقم 2419798، ومن وكالة مشاريع البحوث المتطورة الدفاعية (DARPA) بموجب الجائزة رقم FA8750-24-2-0002، الجائزة الفرعية رقم GR105409-SUB00001384.
| البرامج | الأخطاء المبلغ عنها |
|---|