Honggfuzz
1.安装
$ mkdir honggfuzz
$ cd honggfuzz
$ git clone https://github.com/google/honggfuzz.git
$ cd honggfuzz
$ make
报错: bdf.h:没有那个文件或目录,执行下列语句解决问题后重新make
$ apt-get install binutils-dev
报错:libunwind-ptrace.h: No such file or directory,执行下列命令,解决问题后重新make
$ apt-get install libunwind-dev
$ make
$ make install
2.使用
honggfuzz -f input_dir -z -s – /usr/bin/djpeg -f : 指定初始样本集目录 -z : 使用编译时的指令插桩信息来 为 样本变异做回馈, 默认选项 -s : 表示目标程序从 stdin 获取输入,即样本数据通过 stdin 喂给程序
honggfuzz -f input_dir – /usr/bin/djpeg FILE FILE : 类似于 afl 的 @@ , 表示程序通过文件获取输入,fuzz 过程会被替换为相应的样本文件名
honggfuzz -f input_dir -P – /usr/bin/djpeg_persistent_mode -P : 表示使用 persistent 模式
测试如下 test.c
#include <stdio.h>
int main() {
char buf[100] = {0};
gets(buf); // stack overflow
if (buf[0] == 'A')
printf("hello\n");
else
printf("NO A\n");
return 0;
}
hfuzz-clang test.c -o test // 插桩
mkdir in
echo "hello" > ./in/testcase // 生成语料库,用于初始输入
honggfuzz -P -f ./in -W ./out -- ./test // 开始fuzz