Назад к обновлениям
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++ — это современный фаззер, занимающий первое место в бенчмарках. Изначально он был основан на AFL. Сегодня он включает в себя qemu 5.1, покрытие без коллизий, улучшенные laf-intel и redqueen, расписания мощности AFLfast++, мутаторы MOpt, unicorn_mode и многое другое!

Поделиться

American Fuzzy Lop plus plus (AFL++)

Логотип AFL++

Версия релиза: 5.03c

Версия на GitHub: 5.04a

Репозиторий: https://github.com/AFLplusplus/AFLplusplus

AFL++ поддерживается:

Изначально разработан Michal "lcamtuf" Zalewski.

AFL++ — это превосходный форк Google's AFL: больше скорости, больше и лучше мутаций, больше и лучше инструментирования, поддержка пользовательских модулей и т. д.

AFL++ распространяется под лицензией AGPL-3.0-or-later, а также содержит файлы под лицензией Apache-2.0. Всё, что компилируется в harness для фаззинга, есть и останется под лицензией Apache 2.0. Каждый файл указывает свою лицензию в заголовке SPDX-License-Identifier — именно этой лицензии необходимо следовать для данного файла. Для организаций, которые не могут использовать AGPL, доступна опциональная коммерческая лицензия (получаемая путём пожертвования на доброе дело — проект и его сопровождающие не получают денег). См. LICENSING.md для обзора простым языком и раздел License ниже для подробностей.

Начало работы

Вот немного информации для начала:

  • Для обзора документации AFL++ и очень полезного графического руководства посетите docs/README.md.
  • Чтобы начать работу с руководствами, перейдите в docs/tutorials.md.
  • О релизах см. вкладку Releases и ветки. Однако лучшие ветки для использования — stable или dev — в зависимости от вашей склонности к риску. Также взгляните на список важных изменений в AFL++ и список возможностей.
  • Если вы хотите использовать AFL++ в своей академической работе, проверьте страницу публикаций на сайте.
  • Чтобы цитировать нашу работу, смотрите раздел Cite.
  • Для сравнений используйте конфигурацию aflplusplus из fuzzbench или afl-clang-fast с AFL_LLVM_CMPLOG=1. Конфигурацию по умолчанию aflplusplus можно найти на Google's fuzzbench.

Сборка и установка AFL++

Чтобы AFL++ был легко доступен со всем скомпилированным, загрузите образ напрямую из Docker Hub (доступен как для x86_64, так и для arm64):

docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus

Этот образ публикуется автоматически при пуше в стабильную ветку (см. branches). Если вы используете команду выше, вы найдёте исходный код вашей цели в /src внутри контейнера.

Примечание: вы также можете загрузить aflplusplus/aflplusplus:dev, который представляет собой самое актуальное состояние разработки AFL++.

Чтобы собрать AFL++ самостоятельно — что мы рекомендуем — перейдите к docs/INSTALL.md.

Быстрый старт: фаззинг с AFL++

ПРИМЕЧАНИЕ: Перед началом, пожалуйста, ознакомьтесь с типичными рисками фаззинга.

Это краткое руководство по фаззингу целей с доступным исходным кодом. Чтобы подробно узнать о процессе, см. docs/fuzzing_in_depth.md.

Чтобы узнать о фаззинге других целей, см.:

Пошаговый быстрый старт:

  1. Скомпилируйте программу или библиотеку, которую нужно фаззить, с помощью afl-cc. Распространённый способ сделать это:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. Получите небольшой, но корректный входной файл, который имеет смысл для программы. При фаззинге многословного синтаксиса (SQL, HTTP и т. д.) также создайте словарь, как описано в dictionaries/README.md.

  3. Если программа читает из stdin, запустите afl-fuzz следующим образом:

    ./afl-fuzz -i seeds_dir -o output_dir -- \
    /path/to/tested/program [...program's cmdline...]
    

    Чтобы добавить словарь, добавьте -x /path/to/dictionary.txt в afl-fuzz.

    Если программа принимает ввод из файла, вы можете указать @@ в командной строке программы; AFL++ подставит туда автоматически сгенерированное имя файла.

  4. Исследуйте всё, что отображается красным в интерфейсе фаззера, своевременно обратившись к docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. Найденные краши и зависания вы обнаружите в подкаталогах crashes/ и hangs/ в каталоге -o output_dir. Вы можете воспроизвести краши, подав их на вход целевой программе, например, если ваша цель использует stdin:

    cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
    

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

  6. Для анализа покрытия вашего фаззинга мы рекомендуем наши партнёрские инструменты cov-analysis (отчёты о покрытии на основе исходного кода из корпуса фаззинга) и fuzz-reachability (статический анализ того, какие функции может достичь харнесс, чтобы отличить значимые пробелы в покрытии от мёртвого кода и сгенерировать списки разрешённой инструментации)

  7. Мы не устанем это повторять — если вы хотите фаззить эффективно, прочитайте документ docs/fuzzing_in_depth.md!

Контакты

Вопросы? Замечания? Отчёты об ошибках?

Ветки

Существуют следующие ветки:

Категории