Retour aux mises à jour
New releaseSep 4, 2026

AFLplusplus v5.03c

Le fuzzer afl++ est afl avec des correctifs communautaires, une mise à niveau vers qemu 5.1, une couverture sans collision, une laf-intel et redqueen améliorés, les plannings de puissance 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 ?

Branches

Les branches suivantes existent :

  • release : la dernière release
  • stable : état stable d'AFL++ — elle est synchronisée depuis dev de temps en temps lorsque nous sommes satisfaits de sa stabilité. C'est la branche par défaut.
  • dev : état de développement d'AFL++ — à la pointe de la technologie et vous pourriez obtenir une version qui ne compile pas ou qui contient un bug. Nous n'acceptons les PR (pull requests) que pour la branche 'dev' !
  • (toute autre) : branches expérimentales pour travailler sur des fonctionnalités spécifiques ou tester de nouvelles fonctionnalités ou modifications.

Aide recherchée

Consultez notre liste d'issues avec le tag "help wanted". Cela peut être votre façon de soutenir et de contribuer à AFL++ — étendez-le pour faire quelque chose de cool. Si vous avez d'autres idées — créez simplement une issue et proposez-la !

Pour tous ceux qui souhaitent contribuer (et envoyer des pull requests), veuillez lire nos directives de contribution avant de soumettre.

Remerciements particuliers

Beaucoup des améliorations apportées à l'AFL original et à AFL++ n'auraient pas été possibles sans les retours, les rapports de bugs ou les correctifs de nos contributeurs.

Merci ! (Pour les personnes envoyant des pull requests — veuillez vous ajouter à cette liste :-)

Liste des contributeurs
  Jann Horn                             Hanno Boeck
  Felix Groebert                        Jakub Wilk
  Richard W. M. Jones                   Alexander Cherepanov
  Tom Ritter                            Hovik Manucharyan
  Sebastian Roschke                     Eberhard Mattes
  Padraig Brady                         Ben Laurie
  @dronesec                             Luca Barbato
  Tobias Ospelt                         Thomas Jarosch
  Martin Carpenter                      Mudge Zatko
  Joe Zbiciak                           Ryan Govostes
  Michael Rash                          William Robinet
  Jonathan Gray                         Filipe Cabecinhas
  Nico Weber                            Jodie Cunningham
  Andrew Griffiths                      Parker Thompson
  Jonathan Neuschaefer                  Tyler Nighswander
  Ben Nagy                              Samir Aguiar
  Aidan Thornton                        Aleksandar Nikolich
  Sam Hakim                             Laszlo Szekeres
  David A. Wheeler                      Turo Lamminen
  Andreas Stieger                       Richard Godbee
  Louis Dassy                           teor2345
  Alex Moneger                          Dmitry Vyukov
  Keegan McAllister                     Kostya Serebryany
  Richo Healey                          Martijn Bogaard
  rc0r                                  Jonathan Foote
  Christian Holler                      Dominique Pelle
  Jacek Wielemborek                     Leo Barnes
  Jeremy Barnes                         Jeff Trull
  Guillaume Endignoux                   ilovezfs
  Daniel Godas-Lopez                    Franjo Ivancic
  Austin Seipp                          Daniel Komaromy
  Daniel Binderman                      Jonathan Metzman
  Vegard Nossum                         Jan Kneschke
  Kurt Roeckx                           Marcel Boehme
  Van-Thuan Pham                        Abhik Roychoudhury
  Joshua J. Drake                       Toby Hutton
  Rene Freingruber                      Sergey Davidoff
  Sami Liedes                           Craig Young
  Andrzej Jackowski                     Daniel Hodson
  Nathan Voss                           Dominik Maier
  Andrea Biondo                         Vincent Le Garrec
  Khaled Yakdan                         Kuang-che Wu
  Josephine Calliotte                   Konrad Welc
  Thomas Rooijakkers                    David Carlier
  Ruben ten Hove                        Joey Jiao
  fuzzah                                @intrigus-lgtm
  Yaakov Saxon                          Sergej Schumilo
  Ziqiao Kong                           Ryan Berger
  Sangjun Park                          Scott Guest
  Fabian Keil                           @Jay-1409
  Gergely Nagy

Cite

Si vous utilisez AFL++ dans des travaux scientifiques, envisagez de citer notre article présenté à WOOT'20 :

Andrea Fioraldi, Dominik Maier, Heiko Eißfeldt, and Marc Heuse. “AFL++: Combining incremental steps of fuzzing research”. In 14th USENIX Workshop on Offensive Technologies (WOOT 20). USENIX Association, Aug. 2020.
BibTeX
@inproceedings {AFLplusplus-Woot20,
author = {Andrea Fioraldi and Dominik Maier and Heiko Ei{\ss}feldt and Marc Heuse},
title = {{AFL++}: Combining Incremental Steps of Fuzzing Research},
booktitle = {14th {USENIX} Workshop on Offensive Technologies ({WOOT} 20)},
year = {2020},
publisher = {{USENIX} Association},
month = aug,
}

zread Ask DeepWiki

Licence

AFL++ est sous licence GNU AGPL-3.0-or-later. En bref, vous pouvez utiliser AFL++ de trois manières :

  1. Gratuitement, sous AGPL-3.0-or-later : le mode par défaut. Utilisez, modifiez et partagez AFL++ ; si vous exécutez une version modifiée comme service réseau, l'AGPL vous oblige à offrir à vos utilisateurs le code source correspondant. Texte complet : LICENSE.

  2. Par fichier, sous la licence indiquée dans son en-tête : le projet contient des fichiers sous SPDX-License-Identifier: AGPL-3.0-or-later et sous SPDX-License-Identifier: Apache-2.0. Vérifiez toujours l'en-tête du fichier que vous utilisez et respectez la licence qui y est indiquée ; les fichiers marqués Apache-2.0 peuvent être réutilisés individuellement sous la licence Apache-2.0. (Quelques fichiers tiers inclus portent d'autres licences, par exemple le plugin GCC sous GPL-3.0-or-later et les passes LLVM SanitizerCoverage sous Apache-2.0-WITH-LLVM-exception — chacune marquée par son propre identifiant SPDX.) Notez que le binaire combiné afl-fuzz inclut des fichiers AGPL, donc le programme dans son ensemble est AGPL.

  3. Licence commerciale : optionnelle, pour les organisations qui ne peuvent pas ou ne veulent pas se conformer à l'AGPL. Le projet ne reçoit aucun argent. À la place, vous faites un don de 20 000 EUR (20 000 €) à l'EFF ou au CCC et envoyez une preuve par e-mail à [email protected] ; votre licence est alors effective à partir de la date du don pour un an (renouvelable en refaisant un don). Conditions complètes : LICENSE.COMMERCIAL.

Les composants tiers inclus (par exemple xxHash, t1ha, libFuzzer, sous-modules) conservent leurs propres licences. Pour l'aperçu complet en langage clair, voir LICENSING.md.

Catégories