Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

libfuzzer

LLVMに組み込まれたカバレッジガイド型ファザーで、C/C++プロジェクト向けに設計されています。Clangでコンパイル可能なC/C++コードのファジングテストに使用します。

description の原文を見る

> Coverage-guided fuzzer built into LLVM for C/C++ projects. Use for fuzzing C/C++ code that can be compiled with Clang.

SKILL.md 本文

libFuzzer

libFuzzerは、LLVMプロジェクトの一部であるインプロセス・カバレッジガイド型ファザーです。シンプルさとLLVMツールチェーンの統合により、C/C++プロジェクトのファジング開始時には推奨されるツールです。libFuzzerは2022年後半からメンテナンスのみのモードになっていますが、代替ツールよりもインストール・使用が簡単で、広く利用でき、予見可能な将来にはメンテナンスされ続けるでしょう。

使用時の判断基準

ファザー適用場面複雑さ
libFuzzerクイックセットアップ、単一プロジェクトのファジング
AFL++マルチコアファジング、多様なミューテーション
LibAFLカスタムファザー、研究プロジェクト
Honggfuzzハードウェアベースのカバレッジ

libFuzzerを選択すべき場合:

  • C/C++コードのシンプルで迅速なセットアップが必要
  • プロジェクトがClangでコンパイル可能
  • シングルコアのファジングで初期段階は十分
  • 後でAFL++への移行が選択肢である

注: libFuzzerで書かれたファジングハーネスはAFL++互換です。そのため、より高度な機能(マルチコアサポートの向上など)が必要な場合は簡単に移行できます。

クイックスタート

#include <stdint.h>
#include <stddef.h>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    // 必要に応じて入力を検証
    if (size < 1) return 0;

    // ファザーが提供するデータでターゲット関数を呼び出す
    my_target_function(data, size);

    return 0;
}

コンパイルと実行:

clang++ -fsanitize=fuzzer,address -g -O2 harness.cc target.cc -o fuzz
mkdir corpus/
./fuzz corpus/

インストール

前提条件

  • LLVM/Clangコンパイラ (libFuzzerを含む)
  • カバレッジ分析用LLVMツール (オプション)

Linux (Ubuntu/Debian)

apt install clang llvm

最新のLLVMバージョンの場合:

# apt.llvm.orgからLLVMリポジトリを追加
# その後特定のバージョンをインストール、例えば:
apt install clang-18 llvm-18

macOS

# Homebrewを使用
brew install llvm

# またはNixを使用
nix-env -i clang

Windows

Visual Studioを通じてClangをインストール。セットアップ手順についてはMicrosoftのドキュメントを参照してください。

推奨: 可能であれば、ローカルのx86_64 VMか、DigitalOcean、AWS、またはHetznerでレンタルしたものでファジングしてください。LinuxはlibFuzzerの最適なサポートを提供します。

検証

clang++ --version
# LLVMバージョン情報が表示されます

ハーネスの作成

ハーネスの構造

ハーネスはファザーのエントリーポイントです。libFuzzerはLLVMFuzzerTestOneInput関数を異なる入力で繰り返し呼び出します。

#include <stdint.h>
#include <stddef.h>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    // 1. オプション: 入力サイズの検証
    if (size < MIN_REQUIRED_SIZE) {
        return 0;  // 小さすぎる入力を拒否
    }

    // 2. オプション: 生バイトを構造化データに変換
    // 例: バイト配列から2つの整数をパース
    if (size >= 2 * sizeof(uint32_t)) {
        uint32_t a = *(uint32_t*)(data);
        uint32_t b = *(uint32_t*)(data + sizeof(uint32_t));
        my_function(a, b);
    }

    // 3. ターゲット関数を呼び出す
    target_function(data, size);

    // 4. 常に0を返す (非ゼロは将来の使用のために予約)
    return 0;
}

ハーネスのルール

すべきすべきでない
すべての入力タイプを処理 (空、巨大、不正形式)exit()を呼び出す - ファジングプロセスを停止
返す前にすべてのスレッドを結合スレッドを実行したままにする
ハーネスを高速かつシンプルに保つ過度なログやカプセル化を追加
決定論的性を維持乱数生成器や/dev/randomの読み取りを使用
実行間でグローバル状態をリセット前の実行からの状態に依存
狭くフォーカスされたターゲットを使用関連性のないデータ形式を混在 (PNG + TCP) させる

原理:

  • 速度が重要: 1コアあたり毎秒100-1000実行を目指す
  • 再現性: クラッシュはファジング完了後に再現可能である必要がある
  • 分離: 各実行は独立している必要がある

複雑な入力にはFuzzedDataProviderを使用

複雑な入力 (文字列、複数パラメータ) では、FuzzedDataProviderヘルパーを使用:

#include <stdint.h>
#include <stddef.h>
#include "FuzzedDataProvider.h"  // LLVMプロジェクトから

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    FuzzedDataProvider fuzzed_data(data, size);

    // 構造化データを抽出
    size_t allocation_size = fuzzed_data.ConsumeIntegral<size_t>();
    std::vector<char> str1 = fuzzed_data.ConsumeBytesWithTerminator<char>(32, 0xFF);
    std::vector<char> str2 = fuzzed_data.ConsumeBytesWithTerminator<char>(32, 0xFF);

    // 抽出されたデータでターゲットを呼び出す
    char* result = concat(&str1[0], str1.size(), &str2[0], str2.size(), allocation_size);
    if (result != NULL) {
        free(result);
    }

    return 0;
}

FuzzedDataProvider.hLLVMリポジトリからダウンロード。

インターリーブドファジング

単一のハーネスを使用して複数の関連関数をテスト:

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    if (size < 1 + 2 * sizeof(int32_t)) {
        return 0;
    }

    uint8_t mode = data[0];
    int32_t numbers[2];
    memcpy(numbers, data + 1, 2 * sizeof(int32_t));

    // 最初のバイトに基づいて関数を選択
    switch (mode % 4) {
        case 0: add(numbers[0], numbers[1]); break;
        case 1: subtract(numbers[0], numbers[1]); break;
        case 2: multiply(numbers[0], numbers[1]); break;
        case 3: divide(numbers[0], numbers[1]); break;
    }

    return 0;
}

関連スキル: 詳細なハーネス作成テクニック、複雑な入力の処理パターン、 構造認識ファジング、プロトバフベースのファジングについては、fuzz-harness-writingテクニックスキルを参照。

コンパイル

基本的なコンパイル

キーフラグは-fsanitize=fuzzerです。これは以下を実行します:

  • libFuzzerランタイムをリンク (main関数を提供)
  • カバレッジトラッキング用SanitizerCoverageインストルメンテーションを有効化
  • memcmpなどの組み込み関数を無効化
clang++ -fsanitize=fuzzer -g -O2 harness.cc target.cc -o fuzz

フラグの説明:

  • -fsanitize=fuzzer: libFuzzerを有効化
  • -g: デバッグシンボルを追加 (クラッシュ分析に有用)
  • -O2: 本番レベルの最適化 (ファジング推奨)
  • -DNO_MAIN: コードがmain関数を持つ場合、マクロを定義

サニタイザーを含める

AddressSanitizer (推奨):

clang++ -fsanitize=fuzzer,address -g -O2 -U_FORTIFY_SOURCE harness.cc target.cc -o fuzz

複数のサニタイザー:

clang++ -fsanitize=fuzzer,address,undefined -g -O2 harness.cc target.cc -o fuzz

関連スキル: 詳細なサニタイザー設定、一般的な問題、ASAN_OPTIONSフラグ、 高度なサニタイザーの使用については、address-sanitizerおよびundefined-behavior-sanitizer テクニックスキルを参照。

ビルドフラグ

フラグ目的
-fsanitize=fuzzerlibFuzzerランタイムとインストルメンテーションを有効化
-fsanitize=addressAddressSanitizer (メモリエラー検出) を有効化
-fsanitize=undefinedUndefinedBehaviorSanitizerを有効化
-fsanitize=fuzzer-no-linkリンクなしでインストルメント (ライブラリ用)
-gデバッグシンボルを含める
-O2本番最適化レベル
-U_FORTIFY_SOURCEfortificationを無効化 (ASanを干渉できる)

スタティックライブラリの構築

スタティックライブラリを生成するプロジェクト:

  1. ファジングインストルメンテーション有りでライブラリをビルド:
export CC=clang CFLAGS="-fsanitize=fuzzer-no-link -fsanitize=address"
export CXX=clang++ CXXFLAGS="$CFLAGS"
./configure --enable-shared=no
make
  1. ハーネスでスタティックライブラリをリンク:
clang++ -fsanitize=fuzzer -fsanitize=address harness.cc libmylib.a -o fuzz

CMakeの統合

project(FuzzTarget)
cmake_minimum_required(VERSION 3.0)

add_executable(fuzz main.cc harness.cc)
target_compile_definitions(fuzz PRIVATE NO_MAIN=1)
target_compile_options(fuzz PRIVATE -g -O2 -fsanitize=fuzzer -fsanitize=address)
target_link_libraries(fuzz -fsanitize=fuzzer -fsanitize=address)

ビルド:

cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .
cmake --build .

コーパス管理

初期コーパスの作成

コーパス用ディレクトリを作成 (空で開始可能):

mkdir corpus/

オプションだが推奨: シード入力 (有効な例ファイル) を提供:

# PNGパーサーの場合:
cp examples/*.png corpus/

# プロトコルパーサーの場合:
cp test_packets/*.bin corpus/

シード入力のメリット:

  • ファザーはゼロから開始しない
  • 有効なコードパスに素早く到達
  • 効果を大幅に向上

コーパス構造

コーパスディレクトリは以下を含む:

  • ユニークなコードパスをトリガーする入力ファイル
  • ミニマイズ版 (libFuzzerが自動的にミニマイズ)
  • コンテンツハッシュで命名 (例: a9993e364706816aba3e25717850c26c9cd0d89d)

コーパスのミニマイズ

libFuzzerはファジング中に自動的にコーパスエントリをミニマイズ。明示的にミニマイズ:

mkdir minimized_corpus/
./fuzz -merge=1 minimized_corpus/ corpus/

これにより、重複排除、ミニマイズされたコーパスがminimized_corpus/に作成されます。

関連スキル: コーパス作成戦略、シード選択、形式固有のコーパス構築、 コーパスメンテナンスについては、fuzzing-corpusテクニックスキルを参照。

キャンペーン実行

基本的な実行

./fuzz corpus/

クラッシュが見つかるか、停止するまで実行 (Ctrl+C)。

推奨: クラッシュ後に継続

./fuzz -fork=1 -ignore_crashes=1 corpus/

-fork-ignore_crashesフラグ (実験的だが広く使用) により、クラッシュ発見後もファジングを継続可能。

一般的なオプション

入力サイズを制御:

./fuzz -max_len=4000 corpus/

経験則: 最小限の現実的な入力サイズの2倍。

タイムアウトを設定:

./fuzz -timeout=2 corpus/

2秒以上実行するテストケースを中止。

辞書を使用:

./fuzz -dict=./format.dict corpus/

標準出力/標準エラーを閉じる (ファジングを高速化):

./fuzz -close_fd_mask=3 corpus/

すべてのオプションを確認:

./fuzz -help=1

マルチコアファジング

オプション1: ジョブとワーカー (推奨):

./fuzz -jobs=4 -workers=4 -fork=1 -ignore_crashes=1 corpus/
  • -jobs=4: 4つの順次キャンペーンを実行
  • -workers=4: ジョブを4つのプロセスで並列処理
  • テストケースはジョブ間で共有

オプション2: フォークモード:

./fuzz -fork=4 -ignore_crashes=1 corpus/

注: 本格的なマルチコアファジングの場合、AFL++、Honggfuzz、またはLibAFLへの切り替えを検討してください。

テストケースの再実行

単一クラッシュを再実行:

./fuzz ./crash-a9993e364706816aba3e25717850c26c9cd0d89d

ディレクトリ内のすべての入力をファジングなしでテスト:

./fuzz -runs=0 corpus/

出力の解釈

ファジングが実行されるときは、次のような統計が表示されます:

INFO: Seed: 3517090860
INFO: Loaded 1 modules (9 inline 8-bit counters)
#2      INITED cov: 3 ft: 4 corp: 1/1b exec/s: 0 rss: 26Mb
#57     NEW    cov: 4 ft: 5 corp: 2/4b lim: 4 exec/s: 0 rss: 26Mb
出力意味
INITEDファジング初期化済み
NEW新しいカバレッジが見つかった、コーパスに追加
REDUCE入力がミニマイズされ、カバレッジを保持
cov: Nヒットしたカバレッジエッジ数
corp: X/Ybコーパスサイズ: X エントリ、Y 合計バイト
exec/s: N1秒あたりの実行数
rss: NMbメモリ使用量 (常駐セット)

クラッシュ時:

==11672== ERROR: libFuzzer: deadly signal
artifact_prefix='./'; Test unit written to ./crash-a9993e364706816aba3e25717850c26c9cd0d89d
0x61,0x62,0x63,
abc
Base64: YWJj

クラッシュは./crash-<hash>に保存され、16進数、UTF-8、Base64で入力を表示します。

再現性: -seed=<value>を使用してファジングキャンペーンを再現 (シングルコアのみ)。

ファジング辞書

辞書は、入力形式に関するヒントを提供することで、ファザーが興味深い入力をより高速に発見するのに役立ちます。

辞書フォーマット

テキストファイルにクォート文字列を作成 (1行1個):

# '#'で始まる行はコメント

# マジックバイト
magic="\x89PNG"
magic2="IEND"

# キーワード
"GET"
"POST"
"Content-Type"

# 16進数シーケンス
delimiter="\xFF\xD8\xFF"

辞書の使用

./fuzz -dict=./format.dict corpus/

辞書の生成

ヘッダーファイルから:

grep -o '".*"' header.h > header.dict

man pageから:

man curl | grep -oP '^\s*(--|-)\K\S+' | sed 's/[,.]$//' | sed 's/^/"&/; s/$/&"/' | sort -u > man.dict

バイナリ文字列から:

strings ./binary | sed 's/^/"&/; s/$/&"/' > strings.dict

LLMを使用: ChatGPTなどに質問して、形式用の辞書を生成させる (例: "Generate a libFuzzer dictionary for a JSON parser")。

関連スキル: 高度な辞書生成、形式固有の辞書、辞書最適化戦略については、 fuzzing-dictionariesテクニックスキルを参照。

カバレッジ分析

libFuzzerは基本的なカバレッジ統計 (cov: N) を表示しますが、詳細なカバレッジ分析には追加ツールが必要です。

ソースベースのカバレッジ

1. カバレッジインストルメンテーション有りで再コンパイル:

clang++ -fsanitize=fuzzer -fprofile-instr-generate -fcoverage-mapping harness.cc target.cc -o fuzz

2. ファザーを実行してカバレッジ収集:

LLVM_PROFILE_FILE="coverage-%p.profraw" ./fuzz -runs=10000 corpus/

3. カバレッジデータをマージ:

llvm-profdata merge -sparse coverage-*.profraw -o coverage.profdata

4. カバレッジレポートを生成:

llvm-cov show ./fuzz -instr-profile=coverage.profdata

5. HTMLレポートを生成:

llvm-cov show ./fuzz -instr-profile=coverage.profdata -format=html > coverage.html

カバレッジを改善

ヒント:

  • コーパスに優れたシード入力を提供
  • 形式認識ファジングに辞書を使用
  • ハーネスが適切にターゲットを練習しているか確認
  • 複雑な形式に構造認識ファジングを検討
  • 長期キャンペーン実行 (日/週)

関連スキル: 詳細なカバレッジ分析テクニック、カバレッジギャップの特定、 体系的なカバレッジ改善、ファザー間のカバレッジ比較については、 coverage-analysisテクニックスキルを参照。

サニタイザー統合

AddressSanitizer (ASan)

ASanはバッファオーバーフローやuse-after-freeなどのメモリエラーを検出します。ファジングに非常に推奨。

ASanを有効化:

clang++ -fsanitize=fuzzer,address -g -O2 -U_FORTIFY_SOURCE harness.cc target.cc -o fuzz

ASan出力の例:

==1276163==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000c4ab1
WRITE of size 1 at 0x6020000c4ab1 thread T0
    #0 0x55555568631a in check_buf(char*, unsigned long) main.cc:13:25
    #1 0x5555556860bf in LLVMFuzzerTestOneInput harness.cc:7:3

環境変数でASanを設定:

ASAN_OPTIONS=verbosity=1:abort_on_error=1 ./fuzz corpus/

重要なフラグ:

  • verbosity=1: ASanが有効であることを表示
  • detect_leaks=0: リーク検出を無効化 (リークは終了時に報告)
  • abort_on_error=1: エラー時に_exit()の代わりにabort()を呼び出す

欠点:

  • 2-4倍のスローダウン
  • 約20TBの仮想メモリを必要 (メモリ制限を無効化: -rss_limit_mb=0)
  • Linuxで最も適切にサポート

関連スキル: 包括的なASan設定、一般的な落とし穴、シンボリゼーション、 他のサニタイザーとの組み合わせについては、address-sanitizerテクニックスキルを参照。

UndefinedBehaviorSanitizer (UBSan)

UBSanは整数オーバーフロー、null ポインター逆参照などの未定義動作を検出します。

UBSanを有効化:

clang++ -fsanitize=fuzzer,undefined -g -O2 harness.cc target.cc -o fuzz

ASanと組み合わせ:

clang++ -fsanitize=fuzzer,address,undefined -g -O2 harness.cc target.cc -o fuzz

MemorySanitizer (MSan)

MSanは初期化されないメモリ読み取りを検出。使用がより複雑 (すべての依存関係を再構築が必要)。

clang++ -fsanitize=fuzzer,memory -g -O2 harness.cc target.cc -o fuzz

一般的なサニタイザー問題

問題解決法
ASanがファジングを遅くしすぎ-fsanitize-recover=addressで非致命的エラー
メモリ不足ASAN_OPTIONS=rss_limit_mb=0または-rss_limit_mb=0を設定
スタック枯渇スタックサイズを増やす: ASAN_OPTIONS=stack_size=8388608
_FORTIFY_SOURCEで誤検知-U_FORTIFY_SOURCEフラグを使用
MSanが依存関係でレポートすべての依存関係を-fsanitize=memoryで再構築

実世界の例

例1: libpngのファジング

libpngはPNG画像を読み書きするために広く使用されるライブラリです。バグはセキュリティ問題につながることがあります。

1. ソースコードを取得:

curl -L -O https://downloads.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.xz
tar xf libpng-1.6.37.tar.xz
cd libpng-1.6.37/

2. 依存関係をインストール:

apt install zlib1g-dev

3. ファジングインストルメンテーション有りでコンパイル:

export CC=clang CFLAGS="-fsanitize=fuzzer-no-link -fsanitize=address"
export CXX=clang++ CXXFLAGS="$CFLAGS"
./configure --enable-shared=no
make

4. ハーネスを取得 (またはあなた自身で作成):

curl -O https://raw.githubusercontent.com/glennrp/libpng/f8e5fa92b0e37ab597616f554bee254157998227/contrib/oss-fuzz/libpng_read_fuzzer.cc

5. コーパスと辞書を準備:

mkdir corpus/
curl -o corpus/input.png https://raw.githubusercontent.com/glennrp/libpng/acfd50ae0ba3198ad734e5d4dec2b05341e50924/contrib/pngsuite/iftp1n3p08.png
curl -O https://raw.githubusercontent.com/glennrp/libpng/2fff013a6935967960a5ae626fc21432807933dd/contrib/oss-fuzz/png.dict

6. ファザーをリンクしてコンパイル:

clang++ -fsanitize=fuzzer -fsanitize=address libpng_read_fuzzer.cc .libs/libpng16.a -lz -o fuzz

7. ファジングキャンペーンを実行:

./fuzz -close_fd_mask=3 -dict=./png.dict corpus/

例2: 単純なゼロ除算バグ

ゼロ除算バグを見つけるハーネス:

#include <stdint.h>
#include <stddef.h>

double divide(uint32_t numerator, uint32_t denominator) {
    // バグ: denominatorがゼロかどうかをチェックしない
    return numerator / denominator;
}

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    if(size != 2 * sizeof(uint32_t)) {
        return 0;
    }

    uint32_t numerator = *(uint32_t*)(data);
    uint32_t denominator = *(uint32_t*)(data + sizeof(uint32_t));

    divide(numerator, denominator);

    return 0;
}

コンパイルしてファジング:

clang++ -fsanitize=fuzzer harness.cc -o fuzz
./fuzz

ファザーはすぐにクラッシュを引き起こす入力を発見します。

高度な使用法

ヒントとコツ

ヒント理由
シングルコアから開始、マルチコアはAFL++に切り替えlibFuzzerハーネスはAFL++互換
構造化形式には辞書を使用バグ発見が10-100倍高速化
-close_fd_mask=3でファイルディスクリプタを閉じるSUT(Subject Under Test)が出力を書き込む場合、スピードアップ
合理的な-max_lenを設定巨大な入力の浪費時間を防止
分単位ではなく日/週で実行カバレッジプラトーは時間をかけて破る
テストスイートからシード コーパスを使用有効な入力からファジング開始

構造認識ファジング

高度に構造化された入力 (複雑なプロトコル、ファイル形式) の場合、libprotobuf-mutatorを使用:

  • Protocol Buffersを使用して入力構造を定義
  • libFuzzerはprotobufメッセージをミューテート (構造保存ミューテーション)
  • ハーネスはprotobufをネイティブ形式に変換

詳細は構造認識ファジングドキュメントを参照。

カスタムミューテータ

libFuzzerは特化したファジング用のカスタムミューテータを許可:

extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,
                                          size_t MaxSize, unsigned int Seed) {
    // カスタムミューテーションロジック
    return new_size;
}

extern "C" size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1,
                                            const uint8_t *Data2, size_t Size2,
                                            uint8_t *Out, size_t MaxOutSize,
                                            unsigned int Seed) {
    // カスタムクロスオーバーロジック
    return new_size;
}

パフォーマンスチューニング

設定効果
-close_fd_mask=3stdout/stderrを閉じる、ファジング高速化
-max_len=<合理的なサイズ>巨大な入力の浪費時間を回避
-timeout=<秒>ハングを検出、スタック実行を防止
ASanを無効化してベースライン取得2-4倍のスピードアップ (メモリバグは見逃す)
-jobs-workersを使用限定的なマルチコアサポート
Linuxで実行最適なプラットフォームサポートとパフォーマンス

トラブルシューティング

問題原因解決法
数時間後にクラッシュが見つからないコーパスが不適切、カバレッジが低いシード入力を追加、辞書を使用、ハーネスを確認
実行/秒が非常に遅い (<100)ターゲットが複雑、過度なログターゲット最適化、-close_fd_mask=3使用、ログ削減
メモリ不足ASanの20TB仮想メモリ-rss_limit_mb=0設定してRSS制限を無効化
最初のクラッシュ後にファザーが停止デフォルト動作-fork=1 -ignore_crashes=1を使用して継続
クラッシュを再現できないハーネス/ターゲット内の非決定論的性乱数生成とグローバル状態を削除
-fsanitize=fuzzerでリンクエラーlibFuzzerランタイム欠落Clangを確認、LLVMインストールをチェック
GCCプロジェクトがClangでコンパイルできないGCC固有コードAFL++のgcc_pluginを代わりに使用
カバレッジが改善しないコーパスプラトーより長く実行、辞書追加、シード改善、カバレッジレポートチェック
クラッシュするがASanがトリガーしないメモリエラーがASanで検出されない-fsanitize=addressで再コンパイル

関連スキル

テクニックスキル

スキルユースケース
fuzz-harness-writing効果的なハーネス作成、構造認識ファジング、FuzzedDataProvider使用の詳細ガイダンス
address-sanitizerメモリエラー検出設定、ASAN_OPTIONS、トラブルシューティング
undefined-behavior-sanitizerファジング中の未定義動作検出
coverage-analysisファジング効果測定、未テストコードパスの特定
fuzzing-corpusシードコーパス構築・管理、コーパスミニマイズ戦略
fuzzing-dictionaries形式固有辞書作成、高速バグ発見

関連ファザー

スキル検討時期
aflpp本格的なマルチコアファジング、またはlibFuzzerがプラトーに達したとき
honggfuzzLinux上でのハードウェアベースのカバレッジフィードバック希望時
libaflカスタムファザー構築またはファジング研究実施時

リソース

公式ドキュメント

高度なトピック

プロジェクト例

ライセンス: CC-BY-SA-4.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
trailofbits
リポジトリ
trailofbits/skills
ライセンス
CC-BY-SA-4.0
最終更新
不明

Source: https://github.com/trailofbits/skills / ライセンス: CC-BY-SA-4.0

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: trailofbits · trailofbits/skills · ライセンス: CC-BY-SA-4.0