diff options
-rw-r--r-- | development/afl/README | 21 | ||||
-rw-r--r-- | development/afl/afl.SlackBuild | 104 | ||||
-rw-r--r-- | development/afl/afl.info | 10 | ||||
-rw-r--r-- | development/afl/slack-desc | 19 |
4 files changed, 154 insertions, 0 deletions
diff --git a/development/afl/README b/development/afl/README new file mode 100644 index 0000000000..1697eb4167 --- /dev/null +++ b/development/afl/README @@ -0,0 +1,21 @@ +afl (security-oriented fuzzer) + +American fuzzy lop is a security-oriented fuzzer that employs a +novel type of compile-time instrumentation and genetic algorithms to +automatically discover clean, interesting test cases that trigger new +internal states in the targeted binary. This substantially improves the +functional coverage for the fuzzed code. The compact synthesized corpora +produced by the tool are also useful for seeding other, more labor- +or resource-intensive testing regimes down the road. + +To use afl with binary-only code (no source available), a custom qemu +wrapper is used. This does NOT require a system-wide installation of +qemu, but it does require the source to qemu. To build qemu support, +download the qemu source from: + +http://wiki.qemu-project.org/download/qemu-2.3.0.tar.bz2 + +Save the file in the same directory as the afl.SlackBuild script. + +If binary-only support is not needed, don't download the qemu source. This +will speed up the build quite a bit. diff --git a/development/afl/afl.SlackBuild b/development/afl/afl.SlackBuild new file mode 100644 index 0000000000..834efc27be --- /dev/null +++ b/development/afl/afl.SlackBuild @@ -0,0 +1,104 @@ +#!/bin/sh + +# Slackware build script for afl + +# Written by B. Watson (yalhcru@gmail.com) + +# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. + +PRGNAM=afl +VERSION=${VERSION:-2.49b} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tgz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# apply slack cflags, tell gcc to create stripped binaries +sed -i "/^CFLAGS/s|-O3.*|$SLKCFLAGS -Wl,-s|" Makefile +sed -i "/^CFLAGS/s|-O3|$SLKCFLAGS|" qemu_mode/build_qemu_support.sh + +make \ + DESTDIR=$PKG \ + PREFIX=/usr \ + HELPER_PATH=/usr/lib$LIBDIRSUFFIX/$PRGNAM \ + DOC_PATH=/usr/doc/$PRGNAM-$VERSION \ + all \ + install + +# llvm fast mode looks useful, include it. +# comment this out if you're building on slack 14.1, its llvm is too old. +make -C llvm_mode +install -s -m0755 -oroot -groot afl-clang-fast $PKG/usr/bin +ln -s afl-clang-fast $PKG/usr/bin/afl-clang-fast++ + +WITHQEMU="without" + +# figure out the qemu source tarball name. N.B. update the README +# when this changes! +eval $( grep "^QEMU_URL=" qemu_mode/build_qemu_support.sh ) +QEMU_SRC="$( basename "$QEMU_URL" )" + +# optional qemu support, needed for fuzzing binary-only stuff, +# only built if $CWD contains the qemu source. +if [ -e "$CWD/$QEMU_SRC" ]; then + echo "=== qemu source \$CWD/$QEMU_SRC found" + cp "$CWD/$QEMU_SRC" qemu_mode + + cd qemu_mode + sh build_qemu_support.sh + cd - + + install -s -m0755 -oroot -groot afl-qemu-trace $PKG/usr/bin + WITHQEMU="with" +fi + +# 'make install' already put the docs where they belong. +# the experimental/ stuff is sample source code, include in docs. +cp -a experimental $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +sed "s,@WITHQEMU@,$WITHQEMU," $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/development/afl/afl.info b/development/afl/afl.info new file mode 100644 index 0000000000..a5b84090fc --- /dev/null +++ b/development/afl/afl.info @@ -0,0 +1,10 @@ +PRGNAM="afl" +VERSION="2.49b" +HOMEPAGE="http://lcamtuf.coredump.cx/afl/" +DOWNLOAD="http://lcamtuf.coredump.cx/afl/releases/afl-2.49b.tgz" +MD5SUM="bc14028671d5b7aec8ac9cd1ecf642de" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="B. Watson" +EMAIL="yalhcru@gmail.com" diff --git a/development/afl/slack-desc b/development/afl/slack-desc new file mode 100644 index 0000000000..92a45ffa4a --- /dev/null +++ b/development/afl/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +afl: afl (security-oriented fuzzer) +afl: +afl: American fuzzy lop is a security-oriented fuzzer that employs a +afl: novel type of compile-time instrumentation and genetic algorithms to +afl: automatically discover clean, interesting test cases that trigger new +afl: internal states in the targeted binary. This substantially improves +afl: the functional coverage for the fuzzed code. The compact synthesized +afl: corpora produced by the tool are also useful for seeding other, +afl: more labor- or resource-intensive testing regimes down the road. +afl: +afl: This package was built @WITHQEMU@ QEMU support. |