官方ReadMe

官方QuickStart

参考中文

1. Guided fuzzing 的挑战

2. AFL approach

测试用例也周期性地替换、裁剪。

AFL生成比较小的,自足的测试用例语料。

因为以上的措施,使得AFL能比盲fuzz或者只有代码覆盖率驱动的工具具有更好地性能。

3. 插桩

使用AFL替代gcc编译源码来实现插桩,因为有优化性能影响不大。

通用步骤

  1. 编译
  2. make clean all

当测试lib库的时候,需要找到或者写入简单程序,从stdin或者从文件读取数据,传入到被测试的lib库中。所以,以把被插桩的lib库以静态的方式连接到可执行文件显得至关重要。或者确保正确的.so文件在程序运行时加载(通过LD_LIBRARY_PATH)。最简单的选择是使用静态编译,通常采用以下方式:

CC=/path/to/afl/afl-gcc ./configure --disable-shared 在使用make命令时设置AFL_HARDEN=1的时候,可以促使CC自动化代码加固选项,使得检测简单的内存bug更加容易。Libdislocator是一个AFL提供的帮助者lib(具体详见libdislocator/README.dislocator),能帮助发现堆崩溃问题。

4. 二进制插桩

在没有源代码的时候,可以使用QUMU中的“user space emulation”模式对二进制进行插桩。具体操作:

cd qemu_mode

./build_qemu_support.sh

关于QEMU插桩的说明及注意事项,可以参见qemu_mode/README.qemu