Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Binvariants — Инвариантно-ориентированный фреймворк фаззинга на уровне регистров для бинарных файлов с закрытым исходным кодом, использующий вероятные нарушения инвариантов для обнаружения сбоев и ошибок в исполняемых бинарных файлах. | Kitploit
Инструменты/GitHubGitHub/futureslab/binvariants
Анализ уязвимостейЭксплуатацияФаззингАнализ Бинарных Файлов
GitHubfutureslab/binvariants

Binvariants

Инвариантно-ориентированный фреймворк фаззинга на уровне регистров для бинарных файлов с закрытым исходным кодом, использующий вероятные нарушения инвариантов для обнаружения сбоев и ошибок в исполняемых бинарных файлах.

Репозиторий
51293 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Binvariants: фаззинг бинарных файлов на основе инвариантов регистрового уровня

Логотип Binvariants

Этот репозиторий содержит исходный код Binvariants: прототипа фаззинг-фреймворка, который использует вероятные нарушения инвариантов регистрового уровня для фаззинга бинарных файлов.

Эта работа представлена в нашей статье 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).

  • Установка Binvariants
  • Использование Binvariants
  • Дополнительные замечания
  • Коллекция найденных багов


Рабочий процесс Binvariants
Рабочий процесс Binvariants

Цитирование этого репозитория: @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 License
Отказ от ответственности: Это программное обеспечение предоставляется как есть, без каких-либо гарантий.

Установка Binvariants

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-Invariant_Learner/
  • 2-Fuzzer/

Чтобы собрать каждый из них, перейдите в соответствующий каталог и выполните следующие команды:

./1_patch.sh
./2_build.sh

Использование Binvariants

Example/ содержит примеры скриптов и тестовых случаев для использования Binvariants при фаззинге бинарного файла nconvert. Вы можете изменить скрипты для фаззинга других бинарных файлов.

Настройка

Перед использованием Binvariants отключите ASLR, так как для него требуются согласованные адреса базовых блоков между этапами обучения инвариантам и фаззинга:

sudo sysctl -w kernel.randomize_va_space=0

Изучение вероятных инвариантов на уровне регистров (RLI)

Чтобы изучить инварианты, выполните:

./Example/1-learn_invs.sh [Binvariants_Root]

Выведенные RLI будут сохранены в каталоге, указанном в BINV_TRACES_DIR в 1-learn_invs.sh, с именем: [PROGRAM]_trace_qemu_invs.

Фаззинг с помощью RLI

Чтобы начать фаззинг с Binvariants, выполните:

./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]

Например, запустите 1-й прогон 48-часовой кампании фаззинга из корневого каталога Binvariants:

./Example/2-fuzz.sh $PWD 48h 1

Дополнительные замечания

Ниже приведены возможные улучшения Binvariants.

Адаптивное изучение инвариантов

В настоящее время Binvariants изучает инварианты до фаззинга, а затем запускает фаззинг отдельно. Возможным улучшением является изучение инвариантов во время фаззинга и их обновление по мере возникновения нарушений, что позволяет обратной связи развиваться со временем.

Возможные аспекты проектирования:

  1. Если инварианты обновляются во время выполнения тестового случая, который впоследствии завершается сбоем или превышением времени ожидания, обновление может потребоваться отменить. Практичным решением является применение обновлений к копии инвариантов и их фиксация только в случае нормального завершения тестового случая (т.е. FSRV_RUN_OK).
  2. По мере выполнения фаззинга и обновления инвариантов нарушения естественным образом станут менее частыми. Это создаёт риск того, что AFL++ будет многократно выбирать тестовые случаи ранних стадий (которые вызывают больше нарушений, но представляют менее развитые состояния программы). Может потребоваться корректировка weight/perf_score/top_rated на стороне AFL++, чтобы обеспечить выбор более поздних, более репрезентативных тестовых случаев.

Межблочные инварианты

В настоящее время Binvariants ориентирован на инварианты в пределах одного блока. Потенциальным улучшением является поддержка межблочных инвариантов. Для этого требуются новые структуры данных для отслеживания значений регистров на границах блоков, а также дополнительная инструментация для проверки нарушений при передаче управления между блоками.

Витрина найденных ошибок

ПрограммыСообщённые ошибки
nconverthttps://newsgroup.xnview.com/viewtopic.php?t=49598
xls2csvhttps://github.com/vbwagner/catdoc/issues/6, https://github.com/vbwagner/catdoc/issues/7, https://github.com/vbwagner/catdoc/issues/8, https://github.com/vbwagner/catdoc/issues/9, https://github.com/vbwagner/catdoc/issues/10, https://github.com/vbwagner/catdoc/issues/11, https://github.com/vbwagner/catdoc/issues/12, https://github.com/vbwagner/catdoc/issues/13
gpmfhttps://github.com/gopro/gpmf-parser/issues/201, https://github.com/gopro/gpmf-parser/issues/202, https://github.com/gopro/gpmf-parser/issues/203
hdf5https://github.com/HDFGroup/hdf5/issues/5831, https://github.com/HDFGroup/hdf5/issues/5832, https://github.com/HDFGroup/hdf5/issues/5834
stormhttps://github.com/ladislav-zezula/StormLib/issues/397, https://github.com/ladislav-zezula/StormLib/issues/398
mp4splithttps://github.com/axiomatic-systems/Bento4/issues/1038, https://github.com/axiomatic-systems/Bento4/issues/1039
cpdfhttps://github.com/johnwhitington/camlpdf/issues/75
sfconverthttps://github.com/mpruett/audiofile/issues/73

Если вы найдёте другие ошибки с помощью Binvariants, пожалуйста, сообщите нам!

Скачать инструмент