アップデート一覧に戻る
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++ 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 License の下にあるファイルも含まれています。 ファジングハーネスにコンパイルされるすべてのものは、Apache 2.0 ライセンスのままです。 各ファイルは、その SPDX-License-Identifier ヘッダーに自身のライセンスを明記しています - それが そのファイルに対して従わなければならないライセンスです。 AGPL を使用できない組織向けに、オプションの商用ライセンスも利用可能です (善因団体への寄付によって取得可能 - プロジェクトおよびそのメンテナンス担当者は いかなる金銭も受け取りません)。 平易な言葉での概要については LICENSING.md を、詳細については 以下のライセンスセクションを参照してください。

はじめに

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

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

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

    プログラムがファイルから入力を受け取る場合は、プログラムのコマンドラインに @@ を配置できます。 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++ の開発状態 - 最先端であり、コンパイルできないチェックアウトやバグを含むものに遭遇する可能性があります。 PR (プルリクエスト) は 'dev' ブランチのみ受け付けています!
  • (その他): 特定の機能の開発や新機能・変更のテストのための実験的ブランチ。

ヘルプ募集

"help wanted" タグが付いたイシューリストを確認してください。 これは AFL++ をサポートし貢献する方法です - 何かクールなことをするように拡張してください。 他のアイデアがある場合は - イシューを作成して提案してください!

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

特別な感謝

元の AFL と AFL++ への多くの改善は、貢献者からのフィードバック、バグレポート、またはパッチがなければ 実現できなかったでしょう。

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

貢献者のリスト

カテゴリ