← retour aux outils back to tools

# AFL++

Fork maintenu par la communauté d'American Fuzzy Lop, un fuzzer guidé par la couverture pour trouver des crashs et des bugs de sûreté mémoire dans des binaires compilés. Community-maintained fork of American Fuzzy Lop — a coverage-guided fuzzer for finding crashes and memory-safety bugs in compiled binaries.

↗ https://github.com/AFLplusplus/AFLplusplus

## Overview

AFL++ extends the classic AFL fuzzer with modern instrumentation modes (QEMU/Unicorn for black-box binaries, LLVM/GCC plugins for source-available targets), better mutators, and persistent-mode/parallel fuzzing support. It’s the standard starting point for finding memory corruption and logic bugs prior to exploit development.

## Common Usage

Instrument a source-available target at compile time

    afl-cc -o target target.c

Fuzz with an initial seed corpus

    afl-fuzz -i seeds/ -o findings/ -- ./target @@

Fuzz a binary-only target via QEMU mode (no source needed)

    afl-fuzz -Q -i seeds/ -o findings/ -- ./target @@

Persistent-mode fuzzing (much faster, requires harness support)

    afl-fuzz -i seeds/ -o findings/ -- ./target_persistent

Minimize a crashing test case

    afl-tmin -i crash_input -o minimized_input -- ./target @@

## Parallel Fuzzing

Main (deterministic) fuzzer

    afl-fuzz -i seeds/ -o findings/ -M main -- ./target @@

    # Secondary fuzzers on other cores
    afl-fuzz -i seeds/ -o findings/ -S sec1 -- ./target @@
    afl-fuzz -i seeds/ -o findings/ -S sec2 -- ./target @@

## Tips

- Seed the corpus with small, valid, diverse inputs — corpus quality matters more than fuzzing time
- Use `afl-cmin` to shrink a corpus down to the inputs that give unique coverage before long runs
- Check `findings/default/crashes/` for triage candidates; feed them into a debugger or `afl-tmin` first

Help / Man page

    afl-fuzz [options] -- /path/to/target [args] [@@]

    Required:
      -i dir      Input directory with test cases (seeds)
      -o dir      Output directory for findings

    Optional:
      -M name     Distributed mode: main fuzzer
      -S name     Distributed mode: secondary fuzzer
      -Q          Use QEMU mode to fuzz uninstrumented binaries
      -m megs     Memory limit for child process (default 50MB, "none" to disable)
      -t msec     Timeout per run
      -x file     Dictionary file with extra tokens
      -f file     Write mutated input to file instead of stdin
      @@          Placeholder replaced with path to mutated input file

## Vue d’ensemble

AFL++ étend le fuzzer classique AFL avec des modes d’instrumentation modernes (QEMU/Unicorn pour les binaires black-box, plugins LLVM/GCC pour les cibles dont on a la source), de meilleurs mutateurs, et le support du mode persistant et du fuzzing parallèle. C’est le point de départ standard pour trouver de la corruption mémoire et des bugs de logique avant le développement d’exploit.

## Utilisation courante

    # Instrumenter une cible dont on a la source, à la compilation
    afl-cc -o target target.c

    # Fuzzer avec un corpus de seeds initial
    afl-fuzz -i seeds/ -o findings/ -- ./target @@

    # Fuzzer une cible binaire seule via le mode QEMU (aucune source nécessaire)
    afl-fuzz -Q -i seeds/ -o findings/ -- ./target @@

    # Fuzzing en mode persistant (bien plus rapide, nécessite le support du harness)
    afl-fuzz -i seeds/ -o findings/ -- ./target_persistent

    # Minimiser un cas de test qui provoque un crash
    afl-tmin -i crash_input -o minimized_input -- ./target @@

## Fuzzing parallèle

    # Fuzzer principal (déterministe)
    afl-fuzz -i seeds/ -o findings/ -M main -- ./target @@

    # Fuzzers secondaires sur les autres cœurs
    afl-fuzz -i seeds/ -o findings/ -S sec1 -- ./target @@
    afl-fuzz -i seeds/ -o findings/ -S sec2 -- ./target @@

## Conseils

- Amorcez le corpus avec des entrées petites, valides et variées : la qualité du corpus compte plus que le temps de fuzzing
- Utilisez `afl-cmin` pour réduire un corpus aux seules entrées qui donnent une couverture unique avant les longues campagnes
- Regardez `findings/default/crashes/` pour les candidats au triage ; passez-les d’abord dans un débogueur ou dans `afl-tmin`

Aide / Page de manuel

    afl-fuzz [options] -- /path/to/target [args] [@@]

    Required:
      -i dir      Input directory with test cases (seeds)
      -o dir      Output directory for findings

    Optional:
      -M name     Distributed mode: main fuzzer
      -S name     Distributed mode: secondary fuzzer
      -Q          Use QEMU mode to fuzz uninstrumented binaries
      -m megs     Memory limit for child process (default 50MB, "none" to disable)
      -t msec     Timeout per run
      -x file     Dictionary file with extra tokens
      -f file     Write mutated input to file instead of stdin
      @@          Placeholder replaced with path to mutated input file