AFL Fuzz安装及完成一次简单的模糊测试
关于AFL fuzz
AFL fuzz是一个模糊测试工具,它封装了一个GCC/CLang编译器,用于对被测代码重新编译的过程中进行插桩。插桩完毕后,AFL fuzz就可以给其编译过的代码输入不同的参数参数,跟踪被测代码的执行路径,并判定对输入的变异能否触发新的已知或未知执行路径。
某些情况下,你可能不想重新编译被测代码,或者根本没有被测程序的源代码,因此无法用编译的方式插桩。针对这种情况,AFL fuzz提供了QEMU模式,QEMU即“user emulation”的缩写,相当于是黑盒测试,主要用于压力测试(被测系统性能将下降2~5倍,但相比如DynamoRIO、PIN这些工具,QEMU的性能还算不算了)。
安装
AFL fuzz的安装非常简单,只需要去官网下载最新版本的源代码,解压缩后依次执行下面的指令:
make
sudo make install
若需要使用QEMU模式,参见下面的步骤:
1、使用./build_qemu_support.sh 脚本进行构建,其会自动下载、配置并编译QEMU的二进制代码,此过程比较耗时,且这一过程中需要解决一些依赖包的问题(必须的依赖包:libtool、glib2-devel)。
2、编译完成后,在afl-fuzz的启动参数中加入“-Q”即可启用QEMU模式。
注意:
1、QEMU模式需要较大内存空间,建议的最低配置为200M,负责项目则需要更多。当在afl-fuzz的启动参数中指定的-Q参数时,afl-fuzz会自动设置-m参数,默认值为200M。
2、afl-fuzz适用于linux系统,且不追踪共享库,即:
2-1、对于想要分析的库必须以静态方式链接到可执行二进制文件;
2-2、对于C的标准库及其他一些比较耗费资源而又不必要测试的库则必须以动态方式链接,否则afl fuzz是没有办法不测这些内容的。
示例
已对binutils的模糊测试为例,说明如何使用afl fuzz。
首先,需要下载binutils的源码并解压,进入加压后的文件夹,重写CC编译环境变量的值(如果是C++程序,且用g++而不是gcc进行编译,则修改CXX),修改后即可运行configure脚本,然后编译。
cd ~/binutils-2.25
CC=afl-gcc ./configure
make
注:如果用clang,而不是gcc,则将CC改为afl-clang。
编译完成后,要修改一下配置,使系统将coredump输出到文件,而不是上报给系统的处理程序:
# echo core > /proc/sys/kernel/core_pattern
建一个input文件夹作为afl fuzz的输入,afl fuzz将在这个输入的基础上进行变异,在建立一个out文件夹,作为afl fuzz的输出,afl fuzz会将崩溃、挂起等问题记录到输出文件中:
cd ~/binutils-2.25
mkdir afl_in afl_out
cp /bin/ps afl_in/
接下来,就可以使用afl fuzz进行模糊测试了:
cd ~/binutils-2.25
afl-fuzz -i afl_in -o afl_out ./binutils/readelf -a @@
afl fuzz启动后,我们将看到如下界面:

AFL Fuzz安装及完成一次简单的模糊测试的更多相关文章
- Mahout 0.10.1安装(Hadoop2.6.0)及Kmeans测试
1.版本和安装路径 Ubuntu 14.04 Mahout_Home=/opt/mahout-0.10.1 Hadoop_Home=/usr/local/hadoop Mavent_Home=/opt ...
- Phoenix 安装完的几个简单使用
Phoenix 安装完之后的一些简单使用: 本屌丝的运行环境是3节点集群,先启动hadoop,每个节点分别启动zookeeper,启动hbase(具体怎么启动这里就不多说了) 进入 phoenix的b ...
- 模糊测试(fuzz testing)介绍(一)
模糊测试(fuzz testing)是一类安全性测试的方法.说起安全性测试,大部分人头脑中浮现出的可能是一个标准的“黑客”场景:某个不修边幅.脸色苍白的年轻人,坐在黑暗的房间中,正在熟练地使用各种工具 ...
- 模糊测试(Fuzz testing)
模糊测试(fuzz testing)是一种安全测试方法,他介于完全的手工测试和完全的自动化测试之间.为什么是介于那两者之间?首先完全的手工测试即是渗透测试,测试人员可以模拟黑客恶意进入系统.查找漏洞, ...
- Robot Framework 使用1-环境配置及简单网站兼容性测试(转)
0.Robot Framework 简介 Robot Framework 是一个通用的自动化测试框架,主要用于“验收测试”和“验收测试驱动开发(ATDD)” (会其它文章中会详细介绍ATDD).它使用 ...
- 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
云优化的概念.Entity Framework 7.0.简单吞吐量压力测试 继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之 ...
- Robot Framework 教程 (1) - 环境配置及简单网站兼容性测试
0.Robot Framework 简介 Robot Framework 是一个通用的自动化测试框架,主要用于“验收测试”和“验收测试驱动开发(ATDD)” (会其它文章中会详细介绍ATDD).它使用 ...
- delphi 三层架构简单例子(经测试成功)
delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...
- 简单快捷地测试 JPush API
随着 JPush API v3版本的推出,加上之前开放的 Report API,JPush API 逐渐切换为比较好的符合 REST API 的规范,从而也很容易地使用一般的 HTTP/REST 工具 ...
随机推荐
- Spark学习(2) RDD编程
什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.弹性.里面的元素可并行计算的集合 RDD允 ...
- Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询
一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增 create publish_id 传数字 (publish_id是数据库显示的字段名 ...
- FMX 窗口置顶 或置底 xe10
FMX 窗口置顶 或置底 xe10 Popup 置底 StayOnTop 置顶
- jquery跨js文件调用函数示例
var common_func; (function() { common_func = { load_hot_data: function(AreaCode) { var hot_html = &q ...
- 1.将控制器添加到 ASP.NET Core MVC 应用
模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M).视图 (V) 和控制器 (C). 模型(M):表示应用数据的类. 模型类使用验证逻辑来对该数据强制实施业务规则. ...
- ssm(spring+springmvc+mybatis)整合之环境配置
1-1.导包 导入SpringMVC.Spring.MyBatis.mybatis-spring.mysql.druid.json.上传和下载.验证的包 1-2.创建并配置web.xml文件 配置sp ...
- PHP实现curl post和get
CURL这里就不说明了.以下是简单案例 一.POST //初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, 'ht ...
- Spring源码——IOC控制反转
1.基础知识 Spring有两个核心功能,分别是ioc和aop,其中ioc是控制反转,aop是切面编程. 在ioc中,还有一个名次叫DI,也就是依赖注入.嗯,好像IOC和DI是指同一个,好像又感觉他俩 ...
- Android 为TV端助力之解决ViewPager嵌套RecyclerView水平滑动问题
public class MyViewPager extends ViewPager { private RecyclerView recyclerView; public MyViewPager(@ ...
- 结对项目(python) 黄浩伟 黄飞越
作者:黄浩伟 黄飞越 一 .Github项目地址: https://github.com/Flying123haha/123.git 二.psp表格: PSP2.1 Personal Softwar ...