原始的AFL支持使用QEMU模式进行黑盒覆盖引导的模糊测试。我强烈建议先尝试它,如果不起作用,你可以尝试这个工具。此外,你可能还想尝试Manul,它支持在Windows和Linux上进行黑盒二进制文件模糊测试。
你需要指定DRRUN_PATH指向drrun启动器,以及LIBCOV_PATH指向libbinafl.so覆盖库。你还需要关闭AFL的fork服务器(AFL_NO_FORKSRV=1),可能还需要AFL_SKIP_BIN_CHECK=1。详情请参阅下方构建部分的第5步。
注意:不要忘记,你应该为64位二进制文件使用64位DynamoRIO,为32位二进制文件使用32位DynamoRIO,否则将无法正常工作。要确保你的目标在DynamoRIO下运行,可以使用以下命令运行:
drrun -- <path/to/your/app/> <app_args>
插桩库是Ivan Fratric创建的winAFL覆盖库的修改版本。
git clone https://github.com/mxmssh/drAFL.git /home/max/drAFL
cd /home/max/drAFL
git clone https://github.com/DynamoRIO/dynamorio
mkdir build_dr
cd build_dr/
cmake ../dynamorio/
make -j
cd ..
如果在DynamoRIO编译过程中遇到任何问题,请查阅此页面
mkdir build
cd build
cmake ../bin_cov/ -DDynamoRIO_DIR=../build_dr/cmake
make -j
cd ..
cd afl/
make
cd ..
cd build
mkdir in
mkdir out
echo "AAAA" > in/seed
export DRRUN_PATH=/home/max/drAFL/build_dr/bin64/drrun
export LIBCOV_PATH=/home/max/drAFL/build/libbinafl.so
export AFL_NO_FORKSRV=1
export AFL_SKIP_BIN_CHECK=1
../afl/afl-fuzz -m none -i in -o out -- ./afl_test @@
对于afl_test,你应该期望每秒25-30次执行,并在2-3分钟内出现1个独特的崩溃。