アップデート一覧に戻る
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++は最先端のファザーであり、ベンチマークで第1位です。元々は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 の AFL に対する優れたフォークです - より高速で、より多くより良い ミューテーション、より多くより良いインストルメンテーション、カスタムモジュールのサポートなど。

AFL++ は AGPL-3.0-or-later の下でライセンスされており、Apache-2.0 License の下のファイルも含まれています。 ファジングハーネスにコンパイルされるすべてのものは、Apache 2.0 ライセンスのままであり、今後もそうです。 各ファイルは自身のライセンスを SPDX-License-Identifier ヘッダーに明記しています — それが そのファイルに対して従うべきライセンスです。 AGPL を使用できない組織向けに、オプションの 商用ライセンス が用意されています (善意の寄付によって取得可能 — プロジェクトとその メンテナーは金銭を受け取りません)。 平易な言葉での概要については LICENSING.md を、詳細については 下記の License セクション を参照してください。

はじめに

始めるための情報をいくつか紹介します:

  • AFL++ ドキュメントの概要と非常に役立つグラフィカルガイドについては、 docs/README.md をご覧ください。
  • チュートリアルを始めるには、 docs/tutorials.md に進んでください。
  • リリースについては、 Releases タブ と ブランチ を参照してください。ただし、使用するのに最適なブランチは リスク許容度に応じて stable または dev です。また、 AFL++ の重要な変更点 のリストと 機能 のリストもご覧ください。
  • AFL++ を学術研究に使用したい場合は、ウェブサイトの 論文ページ を確認してください。
  • 私たちの研究を引用するには、Cite セクションを参照してください。
  • 比較には、fuzzbench の aflplusplus セットアップを使用するか、 AFL_LLVM_CMPLOG=1 を指定して afl-clang-fast を使用してください。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 ブランチへのプッシュが発生したときに自動的に公開されます (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...]
    

    辞書を追加するには、afl-fuzz に -x /path/to/dictionary.txt を追加します。

    プログラムがファイルから入力を受け取る場合、プログラムのコマンドラインに @@ を入れることができます。AFL++ はそこに自動生成されたファイル名を挿入します。

  4. ファザー UI で赤色で表示されるものはすべて、速やかに docs/afl-fuzz_approach.md#understanding-the-status-screen を参照して調査してください。

  5. 検出されたクラッシュとハングは、-o output_dir ディレクトリ内の crashes/ と hangs/ サブディレクトリにあります。クラッシュはターゲットに 入力として与えることで再現できます。たとえば、ターゲットが 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 ドキュメントを読んでください!

連絡先

質問は?懸念は?バグ報告は?

ブランチ

以下のブランチが存在します:

  • release:最新の リリース
  • stable:AFL++ の安定した 状態 - 安定性に満足したときに dev から随時同期されます。これがデフォルトブランチです。
  • dev:AFL++ の開発 状態 - 最先端であり、コンパイルできない、またはバグのあるチェックアウトに遭遇する可能性があります。私たちは 'dev' ブランチへの PR(プルリクエスト)のみを受け付けます!
  • (その他):特定の機能に取り組んだり、新しい機能や変更をテストしたりするための実験的ブランチ。

協力者募集

「help wanted」タグが付いた issue リストをご覧ください。 これは AFL++ をサポートし貢献する方法になり得ます - 何かクールなことをするために拡張してください。他のアイデアがあれば - issue を作成して提案するだけです!

貢献したい(そしてプルリクエストを送りたい)すべての方は、提出前に 貢献ガイドラインをお読みください。

特別な感謝

オリジナルの AFL と AFL++ への改善の多くは、コントリビューターからの フィードバック、バグ報告、またはパッチなしには実現できませんでした。

ありがとうございます!(プルリクエストを送る方は - このリストにご自身を追加してください :-)

コントリビューターのリスト

カテゴリ