1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh 2*08b48e0bSAndroid Build Coastguard Worker 3*08b48e0bSAndroid Build Coastguard Worker. ./test-pre.sh 4*08b48e0bSAndroid Build Coastguard Worker 5*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: unicorn_mode" 6*08b48e0bSAndroid Build Coastguard Workertest -d ../unicorn_mode/unicornafl -a -e ../unicorn_mode/unicornafl/Makefile && { 7*08b48e0bSAndroid Build Coastguard Worker test -e ../unicorn_mode/samples/python_simple/simple_target.bin -a -e ../unicorn_mode/samples/compcov_x64/compcov_target.bin && { 8*08b48e0bSAndroid Build Coastguard Worker { 9*08b48e0bSAndroid Build Coastguard Worker # We want to see python errors etc. in logs, in case something doesn't work 10*08b48e0bSAndroid Build Coastguard Worker export AFL_DEBUG_CHILD=1 11*08b48e0bSAndroid Build Coastguard Worker 12*08b48e0bSAndroid Build Coastguard Worker # some python version should be available now 13*08b48e0bSAndroid Build Coastguard Worker PYTHONS="`command -v python3` `command -v python` `command -v python2`" 14*08b48e0bSAndroid Build Coastguard Worker EASY_INSTALL_FOUND=0 15*08b48e0bSAndroid Build Coastguard Worker for PYTHON in $PYTHONS ; do 16*08b48e0bSAndroid Build Coastguard Worker 17*08b48e0bSAndroid Build Coastguard Worker if $PYTHON -c "import setuptools" ; then 18*08b48e0bSAndroid Build Coastguard Worker 19*08b48e0bSAndroid Build Coastguard Worker EASY_INSTALL_FOUND=1 20*08b48e0bSAndroid Build Coastguard Worker PY=$PYTHON 21*08b48e0bSAndroid Build Coastguard Worker break 22*08b48e0bSAndroid Build Coastguard Worker 23*08b48e0bSAndroid Build Coastguard Worker fi 24*08b48e0bSAndroid Build Coastguard Worker 25*08b48e0bSAndroid Build Coastguard Worker done 26*08b48e0bSAndroid Build Coastguard Worker if [ "0" = $EASY_INSTALL_FOUND ]; then 27*08b48e0bSAndroid Build Coastguard Worker 28*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: Python setup-tools not found. Run 'sudo apt-get install python-setuptools'." 29*08b48e0bSAndroid Build Coastguard Worker PREREQ_NOTFOUND=1 30*08b48e0bSAndroid Build Coastguard Worker 31*08b48e0bSAndroid Build Coastguard Worker fi 32*08b48e0bSAndroid Build Coastguard Worker 33*08b48e0bSAndroid Build Coastguard Worker 34*08b48e0bSAndroid Build Coastguard Worker cd ../unicorn_mode/samples/persistent 35*08b48e0bSAndroid Build Coastguard Worker make >>errors 2>&1 36*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] running afl-fuzz for unicorn_mode (persistent), this will take approx 25 seconds" 37*08b48e0bSAndroid Build Coastguard Worker AFL_DEBUG_CHILD=1 ../../../afl-fuzz -m none -V15 -U -i sample_inputs -o out -d -- ./harness @@ >>errors 2>&1 38*08b48e0bSAndroid Build Coastguard Worker test -n "$( ls out/default/queue/id:000002* 2>/dev/null )" && { 39*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] afl-fuzz is working correctly with unicorn_mode (persistent)" 40*08b48e0bSAndroid Build Coastguard Worker } || { 41*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 42*08b48e0bSAndroid Build Coastguard Worker cat errors 43*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 44*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-fuzz is not working correctly with unicorn_mode (persistent)" 45*08b48e0bSAndroid Build Coastguard Worker CODE=1 46*08b48e0bSAndroid Build Coastguard Worker } 47*08b48e0bSAndroid Build Coastguard Worker 48*08b48e0bSAndroid Build Coastguard Worker rm -rf out errors >/dev/null 49*08b48e0bSAndroid Build Coastguard Worker make clean >/dev/null 50*08b48e0bSAndroid Build Coastguard Worker cd ../../../test 51*08b48e0bSAndroid Build Coastguard Worker 52*08b48e0bSAndroid Build Coastguard Worker # travis workaround 53*08b48e0bSAndroid Build Coastguard Worker test "$PY" = "/opt/pyenv/shims/python" -a -x /usr/bin/python && PY=/usr/bin/python 54*08b48e0bSAndroid Build Coastguard Worker mkdir -p in 55*08b48e0bSAndroid Build Coastguard Worker echo 0 > in/in 56*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] Using python binary $PY" 57*08b48e0bSAndroid Build Coastguard Worker if ! $PY -c 'import unicornafl' 2>/dev/null ; then 58*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] we cannot test unicorn_mode for python because it is not present" 59*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 60*08b48e0bSAndroid Build Coastguard Worker else 61*08b48e0bSAndroid Build Coastguard Worker { 62*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] running afl-fuzz for unicorn_mode in python, this will take approx 25 seconds" 63*08b48e0bSAndroid Build Coastguard Worker { 64*08b48e0bSAndroid Build Coastguard Worker ../afl-fuzz -m ${MEM_LIMIT} -V15 -U -i in -o out -d -- "$PY" ../unicorn_mode/samples/python_simple/simple_test_harness.py @@ >>errors 2>&1 65*08b48e0bSAndroid Build Coastguard Worker } >>errors 2>&1 66*08b48e0bSAndroid Build Coastguard Worker test -n "$( ls out/default/queue/id:000002* 2>/dev/null )" && { 67*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] afl-fuzz is working correctly with unicorn_mode" 68*08b48e0bSAndroid Build Coastguard Worker } || { 69*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 70*08b48e0bSAndroid Build Coastguard Worker cat errors 71*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 72*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-fuzz is not working correctly with unicorn_mode" 73*08b48e0bSAndroid Build Coastguard Worker CODE=1 74*08b48e0bSAndroid Build Coastguard Worker } 75*08b48e0bSAndroid Build Coastguard Worker rm -f errors 76*08b48e0bSAndroid Build Coastguard Worker 77*08b48e0bSAndroid Build Coastguard Worker printf '\x01\x01' > in/in 78*08b48e0bSAndroid Build Coastguard Worker # This seed is close to the first byte of the comparison. 79*08b48e0bSAndroid Build Coastguard Worker # If CompCov works, a new tuple will appear in the map => new input in queue 80*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] running afl-fuzz for unicorn_mode compcov, this will take approx 35 seconds" 81*08b48e0bSAndroid Build Coastguard Worker { 82*08b48e0bSAndroid Build Coastguard Worker export AFL_COMPCOV_LEVEL=2 83*08b48e0bSAndroid Build Coastguard Worker ../afl-fuzz -m ${MEM_LIMIT} -V15 -U -i in -o out -d -- "$PY" ../unicorn_mode/samples/compcov_x64/compcov_test_harness.py @@ >>errors 2>&1 84*08b48e0bSAndroid Build Coastguard Worker unset AFL_COMPCOV_LEVEL 85*08b48e0bSAndroid Build Coastguard Worker } >>errors 2>&1 86*08b48e0bSAndroid Build Coastguard Worker test -n "$( ls out/default/queue/id:000001* 2>/dev/null )" && { 87*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] afl-fuzz is working correctly with unicorn_mode compcov" 88*08b48e0bSAndroid Build Coastguard Worker } || { 89*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 90*08b48e0bSAndroid Build Coastguard Worker cat errors 91*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 92*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-fuzz is not working correctly with unicorn_mode compcov" 93*08b48e0bSAndroid Build Coastguard Worker CODE=1 94*08b48e0bSAndroid Build Coastguard Worker } 95*08b48e0bSAndroid Build Coastguard Worker rm -rf in out errors 96*08b48e0bSAndroid Build Coastguard Worker } 97*08b48e0bSAndroid Build Coastguard Worker fi 98*08b48e0bSAndroid Build Coastguard Worker 99*08b48e0bSAndroid Build Coastguard Worker unset AFL_DEBUG_CHILD 100*08b48e0bSAndroid Build Coastguard Worker 101*08b48e0bSAndroid Build Coastguard Worker } 102*08b48e0bSAndroid Build Coastguard Worker } || { 103*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] missing sample binaries in unicorn_mode/samples/ - what is going on??" 104*08b48e0bSAndroid Build Coastguard Worker CODE=1 105*08b48e0bSAndroid Build Coastguard Worker } 106*08b48e0bSAndroid Build Coastguard Worker 107*08b48e0bSAndroid Build Coastguard Worker} || { 108*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] unicorn_mode is not compiled, cannot test" 109*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 110*08b48e0bSAndroid Build Coastguard Worker} 111*08b48e0bSAndroid Build Coastguard Worker 112*08b48e0bSAndroid Build Coastguard Worker. ./test-post.sh 113