众所周知,模糊测试技术已经成为了测试软件质量的重要手段。基于模糊测试技术开发的测试工具有很多,其中最长被使用而且改进也是最多的一个工具就是AFL(American Fuzz Lop). 本篇文章不会赘述如何安装afl,以及如何使用afl进行简单的fuzz。由于很多被测程序都有自己的一个入口,而这些入口有的十分清晰,有的则很难挖掘到。为了解决这个问题,有许多软件项目在自己的代码中会给出一个用于测试的程序,一般叫做test-driver,这个程序里面实现了该软件项目的一些主要函数和方法,可以用来对整个软件项目进行测试。但是,大部分的test-driver是一个shell脚本,而afl是无法对一个shell脚本进行fuzz的。为了解决这个问题,我们可以变换一种方法来进行脚本的fuzz。具体操作过程如下:
一. 下载安装shc
shc是一个可以编译shell程序为C可执行程序的编译器,项目地址如下:https://github.com/neurobin/shc.git。在编译shc的过程中,你用到的编译器将会决定shc将shell转换成C文件之后的编译器用什么,所以我们安装shc的过程如下:
git clone https://github.com/neurobin/shc.git
cd shc
./autogen.sh
CC=/usr/local/bin/afl-gcc ./configure # CC设置为afl-gcc的绝对路径
vim Makefile
在Makefile里面,观察一下CC是否是afl-gcc,如果想加ASAN模式,在CFLAG后面添加 -fsanitize=