Назад к обновлениям
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++ logo

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

Версия GitHub: 5.03c

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

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

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

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

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

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

Вот некоторая информация, чтобы вы могли начать:

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

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

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

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

Этот образ автоматически публикуется при пуше в ветку stable (см. ветки). Если вы используете команду выше, вы найдёте исходный код вашей цели в /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 [...аргументы командной строки программы...]
    

    Чтобы добавить словарь, добавьте -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 [...аргументы командной строки программы...]
    

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

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

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

Контакты

Вопросы? Проблемы? Отчёты об ошибках?

Ветки

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

Категории