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

| الاستشهاد بهذا المستودع: |
@article{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 لتشغيل fuzzing على الملف التنفيذي nconvert. يمكنك تعديل السكربتات لتشغيل fuzzing على ملفات تنفيذية أخرى.
قبل استخدام Binvariants، عطّل ASLR، لأنه يحتاج إلى عناوين كتل أساسية متسقة بين تعلّم الثوابت وتشغيل fuzzing:
sudo sysctl -w kernel.randomize_va_space=0
لتعلّم الثوابت، شغّل:
./Example/1-learn_invs.sh [Binvariants_Root]
سيتم حفظ RLIs المستنتجة في الدليل المحدد بواسطة BINV_TRACES_DIR في 1-learn_invs.sh، باسم: [PROGRAM]_trace_qemu_invs.
لبدء التشويش باستخدام Binvariants، شغّل:
./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]
على سبيل المثال، شغّل التجربة الأولى من حملة اختبار تشويش (fuzzing) مدتها 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.