Retour aux mises à jour
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++ est un fuzzer de pointe, et n°1 dans les benchmarks. Il était à l'origine basé sur AFL. Aujourd'hui, il est livré avec qemu 5.1, une couverture sans collision, laf-intel & redqueen améliorés, les power schedules AFLfast++, les mutateurs MOpt, unicorn_mode, et bien plus encore !

Partager

American Fuzzy Lop plus plus (AFL++)

AFL++ logo

Version de la release : 5.03c

Version GitHub : 5.03c

Dépôt : https://github.com/AFLplusplus/AFLplusplus

AFL++ est maintenu par :

Développé à l'origine par Michal "lcamtuf" Zalewski.

AFL++ est un fork supérieur à l'AFL de Google - plus de vitesse, plus et de meilleures mutations, plus et une meilleure instrumentation, prise en charge de modules personnalisés, etc.

AFL++ est sous licence AGPL-3.0-or-later, et contient également des fichiers sous licence Apache-2.0. Tout ce qui est compilé dans un harnais de fuzzing est et restera sous licence Apache 2.0. Chaque fichier indique sa propre licence dans son en-tête SPDX-License-Identifier — c'est la licence que vous devez respecter pour ce fichier. Une licence commerciale optionnelle est disponible pour les organisations qui ne peuvent pas utiliser l'AGPL (obtenue en faisant un don à une bonne cause — le projet et ses mainteneurs ne reçoivent aucun argent). Voir LICENSING.md pour un aperçu en langage clair et la section Licence ci-dessous pour plus de détails.

Pour commencer

Voici quelques informations pour vous aider à démarrer :

  • Pour un aperçu de la documentation d'AFL++ et un guide graphique très utile, veuillez consulter docs/README.md.
  • Pour commencer avec des tutoriels, allez sur docs/tutorials.md.
  • Pour les releases, voir l' onglet Releases et branches. Les meilleures branches à utiliser sont cependant stable ou dev — selon votre appétit pour le risque. Jetez également un œil à la liste des changements importants dans AFL++ et à la liste des fonctionnalités.
  • Si vous souhaitez utiliser AFL++ pour vos travaux académiques, consultez la page des publications sur le site web.
  • Pour citer nos travaux, regardez la section Cite.
  • Pour les comparaisons, utilisez la configuration aflplusplus de fuzzbench, ou utilisez afl-clang-fast avec AFL_LLVM_CMPLOG=1. Vous pouvez trouver la configuration par défaut d'aflplusplus sur le fuzzbench de Google.

Compilation et installation d'AFL++

Pour avoir AFL++ facilement disponible avec tout compilé, tirez l'image directement depuis Docker Hub (disponible pour x86_64 et arm64) :

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

Cette image est automatiquement publiée lorsqu'un push est effectué sur la branche stable (voir branches). Si vous utilisez la commande ci-dessus, vous trouverez votre code source cible dans /src dans le conteneur.

Remarque : vous pouvez également tirer aflplusplus/aflplusplus:dev qui correspond à l'état de développement le plus récent d'AFL++.

Pour compiler AFL++ vous-même — ce que nous recommandons — continuez sur docs/INSTALL.md.

Démarrage rapide : Fuzzing avec AFL++

REMARQUE : Avant de commencer, veuillez lire les risques de bon sens liés au fuzzing.

Ceci est un démarrage rapide pour fuzzer des cibles dont le code source est disponible. Pour lire le processus en détail, voir docs/fuzzing_in_depth.md.

Pour apprendre à fuzzer d'autres types de cibles, voir :

Démarrage rapide étape par étape :

  1. Compilez le programme ou la bibliothèque à fuzzer en utilisant afl-cc. Une façon courante de faire cela serait :

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. Obtenez un petit fichier d'entrée valide mais qui a du sens pour le programme. Lorsque vous fuzzez une syntaxe verbeuse (SQL, HTTP, etc.), créez également un dictionnaire comme décrit dans dictionaries/README.md.

  3. Si le programme lit depuis stdin, exécutez afl-fuzz comme ceci :

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

    Pour ajouter un dictionnaire, ajoutez -x /path/to/dictionary.txt à afl-fuzz.

    Si le programme prend l'entrée depuis un fichier, vous pouvez mettre @@ dans la ligne de commande du programme ; AFL++ y placera un nom de fichier auto-généré pour vous.

  4. Examinez tout ce qui est affiché en rouge dans l'interface du fuzzer en consultant rapidement docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. Vous trouverez les crashes et les blocages détectés dans les sous-répertoires crashes/ et hangs/ dans le répertoire -o output_dir. Vous pouvez rejouer les crashes en les fournissant à la cible, par exemple si votre cible utilise stdin :

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

    Vous pouvez générer des core dumps ou utiliser gdb directement pour suivre les crashes.

  6. Pour l'analyse de couverture de votre fuzzing, nous recommandons nos outils partenaires cov-analysis (rapports de couverture basés sur le code source à partir d'un corpus de fuzzing) et fuzz-reachability (analyse statique des fonctions qu'un harnais peut atteindre, pour distinguer les lacunes de couverture exploitables du code mort et pour générer des listes blanches d'instrumentation)

  7. Nous ne saurions trop insister — si vous voulez fuzzer efficacement, lisez le document docs/fuzzing_in_depth.md !

Contact

Des questions ? Des préoccupations ? Des rapports de bugs ?

Catégories