1#!/bin/sh 2 3test -z "$1" -o "$1" = "-h" -o "$1" = "--help" && { 4 echo Syntax: afl-addseeds -o afl-out-dir [-i seed_file_or_dir] seed_file_or_seed_dir seed_file_or_seed_dir ... 5 echo 6 echo Options: 7 echo " -o afl-out-dir the output directory being used in the fuzzing campaign" 8 echo " -i seed_file_or_dir file or directory of files to add" 9 echo 10 echo Adds new seeds to an existing AFL++ fuzzing campaign. 11 exit 0 12} 13 14for TOOL in find ls; do 15 X=`which $TOOL` 16 test -n "$X" || { echo "Error: required tool '$TOOL' not found."; exit 1; } 17done 18 19TEST=`printf %06d 123 2>/dev/null` 20test "$TEST" = "000123" || { echo "Error: required tool 'printf' not found."; exit 1; } 21 22OUT= 23NEXT= 24for i in $*; do 25 test -n "$NEXT" && { OUT=$i ; NEXT=""; } 26 test "$i" = "-o" && { NEXT=1; } 27done 28 29test -d "$OUT" || { echo Error: $OUT is not an existing directory; exit 1; } 30OK=`ls $OUT/*/fuzzer_stats 2>/dev/null` 31test -n "$OK" || { echo "Error: $OUT is not an 'afl-fuzz -o ... ' output directory" ; exit 1; } 32 33OUTDIR=$OUT/addseeds/queue 34mkdir -p "$OUTDIR" 2>/dev/null 35test -d "$OUTDIR" || { echo Error: could not create $OUTDIR ; exit 1 ; } 36 37echo Adding seeds ... 38NEXTID=0 39for i in $*; do 40 test -z "$i" -o "$i" = "$OUT" -o "$i" = "-i" -o "$i" = "-o" || { 41 find "$i" -type f | while read FILE; do 42 N=xxx 43 while [ -n "$N" ]; do 44 ID=$NEXTID 45 N=`ls "$OUTDIR/id:$(printf %06d $ID),"* 2>/dev/null` 46 NEXTID=$(($NEXTID + 1)) 47 done 48 FN=`echo "$FILE" | sed 's/.*\///'` 49 cp -v "$FILE" "$OUTDIR/id:$(printf %06d $ID),time:0,execs:0,orig:$FN" 50 done 51 } 52done 53 54echo Done. 55