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