一 安装环境:
在vm虚拟机上使用Ubuntu-22.04系统的镜像。
清华和科大的镜像都可以,下载下来的是ISO的压缩包,不用解压(出来的是一堆文件),在安装新的VM虚拟机时,在镜像源里面直接选择下载下来的压缩包。
二 正式安装
2.1 安装LLVM和CLANG
sudo apt-get install clang
sudo apt-get install llvm
AFL 使用 LLVM/Clang 进行代码插桩:AFL 利用 LLVM/Clang 提供的插桩功能,通过修改编译器生成的可执行文件,实现对代码的覆盖率插桩,从而能够监测程序执行时经过的路径,用于模糊测试的导向。
AFL 需要 LLVM/Clang 编译器:AFL 包含了一些工具,如
afl-gcc
,它们实际上是 LLVM/Clang 的包装器,用于在编译过程中实现代码插桩等操作。
2.2 下载、解压、编译和安装 AFL工具
wget http://lcamtuf.coredump.cx/afl/releases/afl-2.52b.tgz
tar -zxvf afl-2.52b.tgz
cd afl-2.52b
make
sudo make install
这里会报两次错:
1.运行后报错,sudo: make: command not found
解决方法:
sudo apt-get update sudo apt-get install make
2.之后还会报错:make: *** [Makefile:53: test_x86] Error 1
解决方法:
sudo apt-get install gcc
3.再次编译AFL:
sudo make install
三 准备待测程序
3.1 安装vim编辑器
sudo apt-get install vim
3.2 创建并打开一个test.c文件
vim test.c
复制粘贴一下实例代码:
/* 功能:两数加减乘除(一个整数、一个字符、再一个整数),然后根据中间这个字符当作运算符,输出四则运算结果。 */
#include <stdio.h>int main(int argc, char *argv[])
{int a, b;char op;int result;if(scanf("%d%c%d", &a, &op, &b)){switch (op) {case '+':result = a + b;break;case '-':result = a - b;break;case '*':result = a * b;break;case '/':result = a / b;break;default:return 1;}}printf("%d\n", result);return 0;
}
以":wq"+一个回车键,保存并退出文件,返回我们的初始终端。
3.3 创建一个testfile文件夹,把刚刚创建的test.c文件放进去。(注:这时里面还没有afl_test这个文件)
四 插桩编译
4.1 右键testfile这个文件夹,选择在终端中打开它
4.2 执行下面的命令
4.3 结果 -编译后的文件 afl_test
五 准备种子池
mkdir good_seeds bad_seeds
:创建了两个目录,一个是good_seeds
,用于存放良好的种子文件;另一个是bad_seeds
,用于存放不良的种子文件。
echo '1+2' > good_seeds/any_seed
:将字符串1+2
写入到good_seeds
目录下名为any_seed
的文件中。这个文件是一个良好的种子文件,用于作为输入进行模糊测试。
echo 'bad seed' > bad_seeds/any_seed
:将字符串bad seed
写入到bad_seeds
目录下名为any_seed
的文件中。这个文件是一个不良的种子文件,用于作为输入进行模糊测试,测试程序对不良输入的处理能力。
六 开始种子测试
如果出错了的解决方案:
错误展示1:
解决方案:
$ sudo su
$ echo core >/proc/sys/kernel/core_pattern
出现UI界面:
Ctrl+c手动终止fuzz
错误展示2
size太小了,导致无法显示UI界面
解决方法:
(1)resize命令安装
执行如下命令:
$ sudo apt-get install xterm
(2)resize
$ sudo resize -s 80 25