|
| 1 | +# Variables |
| 2 | +[env] |
| 3 | +FUZZER_NAME='fuzzer_libpng' |
| 4 | +PROJECT_DIR = { script = ["pwd"] } |
| 5 | +CARGO_TARGET_DIR = { value = "${PROJECT_DIR}/target"} |
| 6 | +LIBAFL_CC = '${CARGO_TARGET_DIR}/release/libafl_cc' |
| 7 | +LIBAFL_CXX = '${CARGO_TARGET_DIR}/release/libafl_cxx' |
| 8 | +FUZZER = '${CARGO_TARGET_DIR}/release/${FUZZER_NAME}' |
| 9 | + |
| 10 | +[tasks.unsupported] |
| 11 | +script_runner="@shell" |
| 12 | +script=''' |
| 13 | +echo "Cargo-make not integrated yet on this" |
| 14 | +''' |
| 15 | + |
| 16 | +# libpng |
| 17 | +[tasks.libpng] |
| 18 | +linux_alias = "libpng_unix" |
| 19 | +mac_alias = "libpng_unix" |
| 20 | +windows_alias = "unsupported" |
| 21 | + |
| 22 | +[tasks.libpng_unix] |
| 23 | +condition = { files_not_exist = ["./libpng-1.6.37"]} |
| 24 | +script_runner="@shell" |
| 25 | +script=''' |
| 26 | +curl https://deac-fra.dl.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.xz --output libpng-1.6.37.tar.xz |
| 27 | +tar -xvf libpng-1.6.37.tar.xz |
| 28 | +''' |
| 29 | + |
| 30 | +# Compilers |
| 31 | +[tasks.cxx] |
| 32 | +linux_alias = "cxx_unix" |
| 33 | +mac_alias = "cxx_unix" |
| 34 | +windows_alias = "unsupported" |
| 35 | + |
| 36 | +[tasks.cxx_unix] |
| 37 | +command = "cargo" |
| 38 | +args = ["build" , "--release"] |
| 39 | + |
| 40 | +[tasks.cc] |
| 41 | +linux_alias = "cc_unix" |
| 42 | +mac_alias = "cc_unix" |
| 43 | +windows_alias = "unsupported" |
| 44 | + |
| 45 | +[tasks.cc_unix] |
| 46 | +command = "cargo" |
| 47 | +args = ["build" , "--release"] |
| 48 | + |
| 49 | +[tasks.crash_cxx] |
| 50 | +linux_alias = "crash_cxx_unix" |
| 51 | +mac_alias = "crash_cxx_unix" |
| 52 | +windows_alias = "unsupported" |
| 53 | + |
| 54 | +[tasks.crash_cxx_unix] |
| 55 | +command = "cargo" |
| 56 | +args = ["build" , "--release", "--features=crash"] |
| 57 | + |
| 58 | +[tasks.crash_cc] |
| 59 | +linux_alias = "crash_cc_unix" |
| 60 | +mac_alias = "crash_cc_unix" |
| 61 | +windows_alias = "unsupported" |
| 62 | + |
| 63 | +[tasks.crash_cc_unix] |
| 64 | +command = "cargo" |
| 65 | +args = ["build" , "--release", "--features=crash"] |
| 66 | + |
| 67 | +# Library |
| 68 | +[tasks.lib] |
| 69 | +linux_alias = "lib_unix" |
| 70 | +mac_alias = "lib_unix" |
| 71 | +windows_alias = "unsupported" |
| 72 | + |
| 73 | +[tasks.lib_unix] |
| 74 | +script_runner="@shell" |
| 75 | +script=''' |
| 76 | +cd libpng-1.6.37 && ./configure --enable-shared=no --with-pic=yes --enable-hardware-optimizations=yes |
| 77 | +cd "${PROJECT_DIR}" |
| 78 | +make -C libpng-1.6.37 CC="${CARGO_TARGET_DIR}/release/libafl_cc" CXX="${CARGO_TARGET_DIR}/release/libafl_cxx" |
| 79 | +''' |
| 80 | +dependencies = [ "libpng", "cxx", "cc" ] |
| 81 | + |
| 82 | +# Library |
| 83 | +[tasks.crash_lib] |
| 84 | +linux_alias = "crash_lib_unix" |
| 85 | +mac_alias = "crash_lib_unix" |
| 86 | +windows_alias = "unsupported" |
| 87 | + |
| 88 | +[tasks.crash_lib_unix] |
| 89 | +script_runner="@shell" |
| 90 | +script=''' |
| 91 | +cd libpng-1.6.37 && ./configure --enable-shared=no --with-pic=yes --enable-hardware-optimizations=yes |
| 92 | +cd "${PROJECT_DIR}" |
| 93 | +make -C libpng-1.6.37 CC="${CARGO_TARGET_DIR}/release/libafl_cc" CXX="${CARGO_TARGET_DIR}/release/libafl_cxx" |
| 94 | +''' |
| 95 | +dependencies = [ "libpng", "crash_cxx", "crash_cc" ] |
| 96 | + |
| 97 | +# Harness |
| 98 | +[tasks.fuzzer] |
| 99 | +linux_alias = "fuzzer_unix" |
| 100 | +mac_alias = "fuzzer_unix" |
| 101 | +windows_alias = "unsupported" |
| 102 | + |
| 103 | +[tasks.fuzzer_unix] |
| 104 | +command = "${CARGO_TARGET_DIR}/release/libafl_cxx" |
| 105 | +args = ["${PROJECT_DIR}/harness.cc", "${PROJECT_DIR}/libpng-1.6.37/.libs/libpng16.a", "-I", "${PROJECT_DIR}/libpng-1.6.37/", "-o", "${FUZZER_NAME}", "-lm", "-lz"] |
| 106 | +dependencies = [ "lib", "cxx", "cc" ] |
| 107 | + |
| 108 | +# Crashing Harness |
| 109 | +[tasks.fuzzer_crash] |
| 110 | +linux_alias = "fuzzer_crash_unix" |
| 111 | +mac_alias = "fuzzer_crash_unix" |
| 112 | +windows_alias = "unsupported" |
| 113 | + |
| 114 | +[tasks.fuzzer_crash_unix] |
| 115 | +command = "${CARGO_TARGET_DIR}/release/libafl_cxx" |
| 116 | +args = ["${PROJECT_DIR}/harness.cc", "${PROJECT_DIR}/libpng-1.6.37/.libs/libpng16.a", "-I", "${PROJECT_DIR}/libpng-1.6.37/", "-o", "${FUZZER_NAME}_crash", "-lm", "-lz"] |
| 117 | +dependencies = [ "crash_lib", "crash_cxx", "crash_cc" ] |
| 118 | + |
| 119 | +# Run the fuzzer |
| 120 | +[tasks.run] |
| 121 | +linux_alias = "run_unix" |
| 122 | +mac_alias = "run_unix" |
| 123 | +windows_alias = "unsupported" |
| 124 | + |
| 125 | +[tasks.run_unix] |
| 126 | +script_runner = "@shell" |
| 127 | +script=''' |
| 128 | +./${FUZZER_NAME} & |
| 129 | +sleep 0.2 |
| 130 | +./${FUZZER_NAME} 2>/dev/null |
| 131 | +''' |
| 132 | +dependencies = [ "fuzzer" ] |
| 133 | + |
| 134 | + |
| 135 | +# Run the fuzzer with a crash |
| 136 | +[tasks.crash] |
| 137 | +linux_alias = "crash_unix" |
| 138 | +mac_alias = "crash_unix" |
| 139 | +windows_alias = "unsupported" |
| 140 | + |
| 141 | +[tasks.crash_unix] |
| 142 | +script_runner = "@shell" |
| 143 | +script=''' |
| 144 | +./${FUZZER_NAME}_crash & |
| 145 | +sleep 0.2 |
| 146 | +./${FUZZER_NAME}_crash 2>/dev/null |
| 147 | +''' |
| 148 | +dependencies = [ "fuzzer_crash" ] |
| 149 | + |
| 150 | + |
| 151 | + |
| 152 | +# Test |
| 153 | +[tasks.test] |
| 154 | +linux_alias = "test_unix" |
| 155 | +mac_alias = "test_mac" |
| 156 | +windows_alias = "unsupported" |
| 157 | + |
| 158 | +[tasks.test_unix] |
| 159 | +script_runner = "@shell" |
| 160 | +script=''' |
| 161 | +rm -rf libafl_unix_shmem_server || true |
| 162 | +(timeout 11s ./${FUZZER_NAME} >/dev/null 2>/dev/null || true) & |
| 163 | +sleep 0.2 |
| 164 | +timeout 10s ./${FUZZER_NAME} >/dev/null 2>/dev/null || true |
| 165 | +cd ./corpus |
| 166 | +if [ $(ls -al |grep "^-"|wc -l) -gt 4 ]; then |
| 167 | + echo "Fuzzer is working" |
| 168 | +else |
| 169 | + echo "Fuzzer does not generate any testcases or any crashes" |
| 170 | + exit 1 |
| 171 | +fi |
| 172 | +''' |
| 173 | +dependencies = [ "fuzzer" ] |
| 174 | + |
| 175 | +[tasks.test_mac] |
| 176 | +script_runner = "@shell" |
| 177 | +script=''' |
| 178 | +rm -rf libafl_unix_shmem_server || true |
| 179 | +(timeout 11s ./${FUZZER_NAME} >fuzz_stdout.log 2>/dev/null || true) & |
| 180 | +sleep 0.2 |
| 181 | +timeout 10s ./${FUZZER_NAME} >/dev/null 2>/dev/null || true |
| 182 | +''' |
| 183 | +dependencies = [ "fuzzer" ] |
| 184 | + |
| 185 | +# Clean up |
| 186 | +[tasks.clean] |
| 187 | +linux_alias = "clean_unix" |
| 188 | +mac_alias = "clean_unix" |
| 189 | +windows_alias = "unsupported" |
| 190 | + |
| 191 | +[tasks.clean_unix] |
| 192 | +# Disable default `clean` definition |
| 193 | +clear = true |
| 194 | +script_runner="@shell" |
| 195 | +script=''' |
| 196 | +rm -f ./${FUZZER_NAME} |
| 197 | +make -C libpng-1.6.37 clean |
| 198 | +cargo clean |
| 199 | +''' |
0 commit comments