############################################################################### # https://en.wikipedia.org/wiki/American_fuzzy_lop_(fuzzer) # lottery.c from https://events.static.linuxfound.org/sites/events/files/slides/AFL%20filesystem%20fuzzing%2C%20Vault%202016_0.pdf ############################################################################### .ONESHELL: EXE = $(basename $(SRC)) IN = $(EXE:=.in) OUT = $(EXE:=.out) PAT = core_pattern PKG = american-fuzzy-lop SRC = $(wildcard *.c *.cc) CC = afl-gcc CXX = afl-g++ CFLAGS = -fanalyzer -fsanitize={address,pointer-compare,pointer-subtract,undefined} CXXFLAGS = $(CFLAGS) FUZ = AFL_BENCH_UNTIL_CRASH=1 AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_SKIP_CPUFREQ=1 AFL_USE_ASAN=1 afl-fuzz all: $(OUT) clean: core_off -rm -frv $(EXE) $(IN) $(OUT) $(PAT) core.* *~ core_off: /proc/sys/kernel/$(PAT) @if [ -f "$(PAT)" ]; then pattern=$$(cat $(PAT)) else pattern="|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" fi echo "$$pattern" | sudo tee $< &> /dev/null core_on: /proc/sys/kernel/$(PAT) | $(PAT) @echo "core" | sudo tee $< &> /dev/null $(PAT): /proc/sys/kernel/$(PAT) @cat $< > $@ exe: $(EXE) pkg: sudo dnf -y install $(PKG) %.in: % mkdir -p $@ case '$*' in rand ) tr -cd '[:digit:]' < /dev/urandom | fold -c2 | head -n8;; hola ) tr -cd '[:lower:]' < /dev/urandom | fold -c4 | head -n16;; memcpy) tr -cd '[:alpha:]' < /dev/urandom | fold -c64 | head -n1; tr -cd '[:alpha:]' < /dev/urandom | fold -c8 | head -n1;; saludo) for ((i=1; i<1024; i*=2)); do tr -cd '[:alnum:]' < /dev/urandom | fold -c$$i | head -n1 done;; esac > ./$@/samples.txt %: %.rs rustc $< -o $@ %.out: %.in -make -s core_on $(FUZ) -i ./$< -m none -o ./$@ -T $* -- ./$* -make -s core_off .PRECIOUS: $(IN) $(OUT) $(PAT) .PHONY: all clean core_off core_on exe pkg