AFL入门教学

1、AFL简介

  • AFL(American Fuzzy Lop)是一个面向安全的模糊测试工具,它使用了一个新的编译时插桩技术和遗传算法,可以自动发现触发目标二进程程序的测试用例,从而大大提高测试代码的功能覆盖率。 
    • AFL官网:american fuzzy lop (coredump.cx)american fuzzy lop (coredump.cx)american fuzzy lop (coredump.cx)
  • Github仓库:google/AFL: american fuzzy lop - a security-oriented fuzzer (github.com)
  • AFL的工作原理可以概括为以下几个步骤:
    • 编译阶段:AFL在源码编译时进行插桩,用于在运行时追踪程序执行路径。这使得AFL可以监控目标程序的代码覆盖率。
    • 初始化阶段:使用一些输入用例作为初始化测试集,这些初始用例可以让AFL了解程序的一些基本代码路径。
    • 变异阶段:AFL使用遗传算法对测试用例进行变异,生成大量不同的测试用例,以探索新的程序执行路径。
    • 执行阶段:AFL使用生成的测试用例执行目标程序,并通过插桩代码监控新的代码覆盖情况。
    • 更新阶段:根据测试用例执行结果,AFL保存提供更好代码覆盖的测试用例,同时丢弃没有用的测试用例。
    • 重复阶段:上述过程会一直循环进行,期间触发了crash的文件会被记录下来。
  • 测试用例变异方式:
    • bitflip:按位翻转,1变为0,0变为1。
    • arithmetic:整数加/减算术运算。
    • interest:把一些特殊内容替换到原文件中。
    • dictionary:把自动生成或用户提供的块替换/插入到原文件中。
    • havoc:前面几种变异的组合。
    • splice:将两个文件拼接起来得到一个新的文件。

2、AFL安装

  • 【前提】这里使用的是WSL的Ubuntu-22.04系统。
  • 从官网中下载源代码。
  • 将下载好的解压包移到Ubuntu的根目录下。
  • 打开Ubuntu终端,输入解压命令。
    •  tar xvf afl-latest.tgz
  • 解压成功后,可以在根目录看到解压后的文件夹。
  • 进入该文件夹,并编译AFL。
    • cd afl-2.52b
      sudo make install
      
    • 【注】运行后报错,sudo: make: command not found。
      • 解决办法:
        • 执行下面命令。
        • sudo apt-get update
          sudo apt-get install make
  • 再次编译AFL。
    • 【注】运行后报错,make: *** [Makefile:53: test_x86] Error 1。
      • 解决办法:
        • sudo apt-get install gcc
        • ​​​​​​​
  • 再次编译AFL,编译成功。
  • 可以在“/usr/local/bin”路径下找到AFL。
    • ls /usr/local/bin

3、AFL使用

3.1、准备被测程序

  • 首先准备一个被测程序,这里使用一个简单的c程序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;
      }

3.2、插桩编译

  • 进入程序所在的文件夹,执行下列命令。
    • afl-gcc -o test test.c

3.3、准备种子池

  • 作为模糊测试,AFL需要提供初始的种子输入。但实际上,提供任何无意义的输入作为种子,模糊测试也一般能达到效果,只不过效率会低一些而已。
  • 这里我们生成一好一坏两个种子池。
    • mkdir good_seeds bad_seeds
      echo '1+2' > good_seeds/any_seed
      echo 'bad seed' > bad_seeds/any_seed

3.4、开始测试

  • 首先使用好的种子池进行测试。
    • afl-fuzz -i good_seeds/ -o good_outputs -- ./test
    • 输出一段信息后呈现如下界面,表示fuzz已经开始了,可以在该界面中查看运行时间、崩溃数量等信息。
    • 上图中显示已经找到了一个crash了,ctrl+c结束fuzz,可以看到当前目录下已经多出了一个good_outputs目录,这是本次模糊测试的结果。
    • 引起崩溃的测试用例位于good_outputs/crashes文件夹下。
    • 打开可以看到引起崩溃的用例。
  • 再使用另一个坏的种子池进行测试。
    • afl-fuzz -i bad_seeds/ -o bad_outputs -- ./test
    • 同样可以找到引起崩溃的用例,只不过时间会更久一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/131943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac装不了python3.7.6

今天发现一个很奇怪的问题 但是我一换成 conda create -n DCA python3.8.12就是成功的 这个就很奇怪

c++中httplib使用

httplib文件链接:百度网盘 请输入提取码 提取码:kgnq json解析库:百度网盘 请输入提取码 提取码:oug0 一、获取token 打开postman, 在body这个参数中点击raw,输入用户名和密码 然后需要获取到域名和地址。 c++代码如下: #include "httplib.h" #in…

Linux环境基础开发工具使用(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Linux项目自动化构建工具-make/Makefile1、背景2、实例代码3、依赖关系4、依赖方法5、原理…

pytorch3D Windows下安装经验总结

一、说明及准备工作 最近在安装pytorch3D的时候遇到了很多问题&#xff0c;查了很多博客&#xff0c;但发现讲的都不太全&#xff0c;所以特将自己的及收集到的安装过程经验总结如下。我是在Anaconda中虚拟环境下安装的。 1.1准备工作 官方安装教程如下&#xff1a;https://…

java入门-JDK下载与安装

1、下载jdk Java 的产品叫JDK&#xff08;Java Development Kit: Java开发者工具包&#xff09;&#xff0c;必须安装JDK才能使用java 1、官网地址 https://www.oracle.com/java/ https://www.oracle.com/java/technologies/downloads/ 目前比较稳定的版本为 JDK17. 我们就安…

亚马逊云科技大语言模型下的六大创新应用功能

目录 前言 亚马逊云科技的AI创新应用 ​编辑 Amazon CodeWhisperer Amazon CodeWhisperer产品的优势 更快地完成更多工作 自信地进行编码 增强代码安全性 使用收藏夹工具 自定义 CodeWhisperer 以获得更好的建议 如何使用Amazon CodeWhisperer 步骤 1 步骤 2 具体…

【Vue基础-实践】数据可视化大屏设计(林月明螺蛳粉文化公司单量数据大屏)

目录 一、知识整理 1、页面自适应 2、下载插件px to rem & rpx 3、关于padding与margin 4、下载echarts 5、下载axios 6、experss官网接口创建 7、创建路由 8、api接口创建 9、设置基准路径 10、跨域设置 11、图表设置 12、地图数据引用 13、设置地图效果 二、…

3D高斯泼溅(Splatting)简明教程

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 3D 高斯泼溅&#xff08;Splatting&#xff09;是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术&#xff0c;它允许实时渲染从小图像样…

wandb 安装本地部署使用教程

1、官网注册 wandb.ai是一个为机器学习开发者提供的开发工具平台&#xff0c;可以帮助用户跟踪实验&#xff0c;管理和版本数据&#xff0c;以及与团队协作&#xff0c;从而更专注于构建最佳模型。 wandb官网&#xff1a; https://wandb.ai 首先我们打开官网注册号自己的账号并…

[自动化运维工具] Ansible的简单介绍与常用模块详解

文章目录 1. Ansible概述1.1 简介1.2 Ansible的特性1.3 Ansible的组件构成1.4 Ansible的工作原理 2. Ansible环境部署2.1 前置准备2.2 安装ansible2.3 查看基本信息2.4 配置远程主机清单 3. Ansible的常用模块3.1 ansible的基础命令格式3.2 Command模块3.2.1 基本格式和常用参数…

通过51单片机控制28byj48步进电机按角度正反转旋转

一、前言 本项目基于STC89C52单片机&#xff0c;通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机&#xff0c;精准定位和高扭矩输出&#xff0c;适用于许多小型的自动化系统和机械装置。 在这个项目中&#xff0c;使用STC89C52单片机…

跟着Nature Communications学作图:纹理柱状图+添加显著性标签!

&#x1f4cb;文章目录 复现图片设置工作路径和加载相关R包读取数据集数据可视化计算均值和标准差方差分析组间t-test 图a可视化过程图b可视化过程合并图ab 跟着「Nature Communications」学作图&#xff0c;今天主要通过复刻NC文章中的一张主图来巩固先前分享过的知识点&#…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的&#xff0c;如果需要看git从安装开始的配置&#xff0c;则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…

ESP32S3入手体验测试

ESP32S3入手体验测试 &#x1f516;所入手的型号是YD-ESP32-S3 N16R8,该款和乐鑫官方推出的ESP32-S3-DevKitC-1配置差不多。 &#x1f388;乐鑫官方介绍&#xff1a;ESP32-S3-DevKitC-1 v1.1 &#x1f530;两者采用的模组&#xff1a;ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组…

“Java与Redis的默契舞曲:优雅地连接与存储数据“

文章目录 引言1. Java连接上Redis2. Java对Redis进行存储数据2.1 存储set类型数据2.2 存储hash类型数据2.3 存储list类型数据 总结 引言 在现代软件开发中&#xff0c;数据存储和处理是至关重要的一环。Java作为一门强大的编程语言&#xff0c;与Redis这个高性能的内存数据库相…

2023-11 | 短视频批量下载/爬取某个用户的所有视频 | Python

这里以鞠婧祎的个人主页为demo https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz 【2023-11-4 23:02:52 星期六】可能后面随着XX的调整, 方法不再适用, 请注意 找到接口 找到https://www.douyin.com/aweme/v1/web/…

C++ map 的使用

下面的是关于 map 的介绍。来自 map - C Reference (cplusplus.com) 的翻译&#xff0c;您可以看也可以不看哈&#xff01; map 是关联容器&#xff0c;它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。在 map 中&#xff0c;键值 key 通常用于排序…

linux 创建git项目并提交到gitee(保姆式教程)

01、git安装与初始化设置 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ apt install mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.name "用户名" mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.ema…

Python自定义函数练习(持续更新中~)

1.计算矩阵的面积和周长&#xff1a; class Rectangle:def __init__(self, width, height):self.width widthself.height heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width self.height)if __name__ "__main__"…

AtCoder Beginner Contest 327 G. Many Good Tuple Problems(带标号二分图计数+有区别小球放入有区别盒子)

题目 一个长为n(n<30)的原始序列x&#xff0c;x[i]可以取值0或1 一个长为m(m<1e9)的点对序列(s,t)&#xff0c; s序列第i项和t的第i项&#xff0c;均可以取值[1,n]&#xff0c; 如果构造好s和t后&#xff0c;对任意都存在01序列x使得&#xff0c; 则称这个序列是合法…