Radamsa:一款高性能通用模糊测试工具
关于Radamsa
Radamsa是一款高性能的通用模糊测试工具,广大研究人员可以将其当作一个应用程序稳定性测试的测试用例生成工具。
工具运行机制
该工具使用简单,支持自定义脚本开发,可以用于测试程序对格式错误和潜在恶意输入的承受能力。它的工作原理是读取有效数据的示例文件并从中生成有趣的不同输出。
Radamsa旨在成为适用于所有类型数据的通用模糊测试工具。其目标是无论程序处理哪种数据(无论是xml还是mp3),都能发现问题,反之,如果找不到错误,则意味着其他类似工具可能也找不到。这是通过各种启发式方法和更改模式来实现的,这些方法和模式在测试过程中会发生变化。
Radamsa是一种基于黑盒测试技术的模糊测试工具,因此它不需要任何有关目标应用程序或数据格式的相关信息。在测试期间,可以将其与覆盖率分析配对,以在连续测试运行期间提高样本集的质量。
工具要求
支持的操作系统
GNU/Linux
OpenBSD
FreeBSD
Mac OS X
Windows(使用Cygwin)
软件要求
gcc / clang
make
git
wget
工具安装
$ git clone https://gitlab.com/akihe/radamsa.git$ cd radamsa$ make$ sudo make install # optional, you can also just grab bin/radamsa$ radamsa --help
Radamsa本身只是一个二进制文件,没有外部依赖项,我们可以将其移动到任意位置并删除其余部分。
工具使用
使用Radamsa对通过管道的数据执行模糊测试:
$ echo "aaa" | radamsaaaaa
这里Radamsa决定在输入中添加一个“a”,然后再试一次:
$ echo "aaa" | radamsa:aaa
默认情况下,如果未指定特定的随机状态,Radamsa将从 /dev/urandom 中获取随机种子,并且每次启动时通常都会看到不同的结果,但对于较小的输入,可能会经常看到相同的结果或原始结果。可以使用 -s 参数指定要使用的随机状态,该参数后跟一个数字。需要注意的是,使用相同的随机状态将导致生成相同的数据:
$ echo "Fuzztron 2000" | radamsa --seed 4Fuzztron 4294967296
我们还可以使用 -n 参数生成多个输出,如下所示:
$ echo "1 + (2 + (3 + 4))" | radamsa --seed 12 -n 41 + (2 + (2 + (3 + 4?)1 + (2 + (3 +?4))18446744073709551615 + 4)))1 + (2 + (3 + 170141183460469231731687303715884105727))
工具无法保证所有的输出都是唯一的,但相同的输出结果情况还是很罕见的。
现在,我们已经拿到了测试用例,接下来就可以将其输入到待测应用程序中了:
$ echo "100 * (1 + (2 / 3))" | radamsa -n 10000 | bc[...](standard_in) 1418: illegal character: ^_(standard_in) 1422: syntax error(standard_in) 1424: syntax error(standard_in) 1424: memory exhausted[hang]
或者测试用于编译Radamsa的编译器:
$ echo '((lambda (x) (+ x 1)) #x124214214)' | radamsa -n 10000 | ol[...]> What is 'ó µ'?4901126677> $
或测试gzip:
$ gzip -c /bin/bash | radamsa -n 1000 | gzip -d > /dev/null
我们还可以加入无限循环执行测试:
$ gzip -c /bin/bash > sample.gz$ while true; do radamsa sample.gz | gzip -d > /dev/null; done
输出选项
| -o参数 | 意义 | 示例 |
| :port | 充当给定端口的 TCP 服务器 | # radamsa -o :80 -n inf samples/*.http-resp |
| ip:port | 作为 TCP 客户端连接到 ip 端口 | $ radamsa -o 127.0.0.1:80 -n inf samples/*.http-req |
| - | 写入stdout | $ radamsa -o - samples/*.vt100 |
| path | 写入文件,%n 是测试用例 #,%s 是第一个后缀 | $ radamsa -o test-%n.%s -n 100 samples/*.foo |
许可证协议
本项目的开发与发布遵循MIT开源许可协议。
项目地址
Radamsa:【GitHub传送门】
参考资料
http://www.gnu.org/software/gdb/
Valgrind Home
http://code.google.com/p/address-sanitizer/wiki/AddressSanitizer
strace download | SourceForge.net
tcpflow -- TCP Flow Recorder
http://lcamtuf.coredump.cx/afl/
zzuf – Caca Labs
http://code.google.com/p/bunny-the-fuzzer/
Security Compliance | GitLab
http://code.google.com/p/sulley/
相关文章:
Radamsa:一款高性能通用模糊测试工具
关于Radamsa Radamsa是一款高性能的通用模糊测试工具,广大研究人员可以将其当作一个应用程序稳定性测试的测试用例生成工具。 工具运行机制 该工具使用简单,支持自定义脚本开发,可以用于测试程序对格式错误和潜在恶意输入的承受能力。它的工…...
css中使用data中的变量
一、定义变量 data() {return {myColor:"#2a9efb",}; },二、在templete中激活 说明:这里其实类似于设置 document.documentElement.style.setProperty(--myColor, myColor),而我们现在只是给div设置了变量属性,并且是在当前页面设置的&#x…...
Java 设计模式之策略模式 (Strategy Pattern) 详解
Java 设计模式之策略模式 (Strategy Pattern) 详解 策略模式(Strategy Pattern)是一种行为型设计模式,旨在定义一系列算法,将每个算法封装起来,并使它们可以互相替换,从而使得算法的变化不会影响使用算法的…...
习题20240803(未完成)
文章目录 一、Linq练习 使用Linq完成下面练习1.题目: 返回 numbers 列表中的所有数字。2.题目: 返回 numbers 列表中的所有偶数。3.题目: 返回 numbers 列表中所有大于10的数字。4.题目: 返回 students 列表中所有学生的姓名。5.题目: 返回 numbers 列表按升序排序后的数字。6.…...
C语言程序设计25
《C程序设计教程(第四版)——谭浩强》 习题2.2 分析下面程序的运行结果,然后上机验证。 代码: //《C程序设计教程(第四版)——谭浩强》 //习题2.2 分析下面程序的运行结果,然后上机验证。#inc…...
TypeScript 基础类型与类型声明
前言 在 JavaScript 中,变量是没有类型的,变量的值的类型是在运行时确定的,这被称为动态类型。 这意味着可以在不同的时间将不同类型的值赋给同一个变量,并且 JavaScript 会在运行时根据当前赋给变量的值来确定其类型。 示例&…...
算法:BFS 解决多源最短路问题
目录 多源最短路 题目一:矩阵 题目二:飞地的数量 题目三:地图中的最高点 题目四:地图分析 多源最短路 首先想要知道多源最短路,就先要明白单源最短路,bfs解决单源最短路问题前面学习过,单…...
grep工具的使用
grep [options]…… pattern [file]…… 工作方式: grep 在一个或者多个文件中搜索字符串模板,如果模板中包括空格,需要使用引号引起来,模 板后的所有字符串会被看作是文件名。 工作结果:如果模板搜索成功…...
Langchain核心模块与实战[9]:RAG检索增强生成[文本向量化、实战ChatDoc智能文档助手]
Langchain核心模块与实战[9]:RAG检索增强生成[文本向量化、实战ChatDoc智能文档助手] 参考文章可以使用国产LLM进行下述项目复现: 初识langchain[1]:Langchain实战教学,利用qwen2.1与GLM-4大模型构建智能解决方案[含Agent、tavily面向AI搜索]langchain[2]:Langchain实战教…...
Java从入门到精通(十五) ~ IO流
晚上好,愿这深深的夜色给你带来安宁,让温馨的夜晚抚平你一天的疲惫,美好的梦想在这个寂静的夜晚悄悄成长。 目录 前言 什么是IO流? IO流的作用: 一、基础流 1. 字节流 1.1 字节输入流 FileInputStream 1.2 字节…...
C Primer Plus 第4章——第二篇
你该逆袭了 第4章:重点摘录 五、scanf( )1、使用 scanf( )(1)转换说明 *(2)转换说明 数字(3)转换说明 hh(4)scanf 中其他的转换说明,不作详细解释,用到的时候再去学习即可 2、从 scanf( ) 角度 看 输入3、格式字符串中的普通字符4、scanf&…...
优化海外用户体验,畅通支付路径!来了解WeTest的本地化支付测试方案
在APP出海的全生命周期中,支付系统的稳定运行是至关重要的一环。随着产品服务覆盖地区的拓展、APP内付费功能的拓展以及不同地区用户对多样化支付渠道的需求增加,出海APP的当地支付体验的优劣直接影响到海外用户的消费决策。 然而海外支付风控升级&#…...
VUE框架面试整理-模板语法
Vue.js 的模板语法允许你声明式地将数据绑定到 DOM。以下是一些常见的模板语法和用法: 插值 插值语法用于在 HTML 中插入数据。 <p>{{ message }}</p>data:...
【C语言】fseek、ftell以及rewind函数(随机文件读写)
文章目录 前言1. fseek1.1 fseek函数原型1.2 fseek函数的形式参数1.3 fseek实例演示 2. ftell2.1 ftell函数原型2.2 ftell函数的实例演示 3. rewind3.1 rewind函数原型3.2 rewind函数实例演示 前言 在之前,我讲过文件的顺序读写。但是我们可不可以随机读写文件呢&a…...
使用 Elastic Observability 中的 OpenTelemetry 进行基础设施监控
作者:来自 Elastic ISHLEEN KAUR 将 OpenTelemetry 与 Elastic Observability 相结合,形成应用程序和基础设施监控解决方案。 在 Elastic,我们最近决定全面采用 OpenTelemetry 作为首要的数据收集框架。作为一名可观察性工程师,我…...
征服数据结构中的时间和空间复杂度
目录 时间复杂度推导大O方法求解时间复杂度的方法普通顺序结构单循环双循环递归Master定理(主定理)递归树方法 空间复杂度 一个算法的好坏根据什么来判断呢?有两种一种是时间效率,一种是空间效率。时间效率也可称为时间复杂度&…...
springboot Security vue
在使用Spring Boot Security与Vue.js构建前后端分离的应用时,你需要处理几个关键的技术点,包括认证(Authentication)和授权(Authorization),以及如何处理跨域请求(CORS)、…...
13. 计算机网络HTTPS协议(一)
1. 前言 在上一章节中我们介绍了 HTTP 协议相关的面试题目,作为 HTTP 协议的扩展,HTTPS 协议也经常被面试官提起。 因为对于大部分的前端、后端开发者,都接触不到 HTTPS 协议的开发场景,因为我们往往只关注请求路径后缀,例如关注 URL: /get/username,而非路径全称 htt…...
Bean的作用域和生命周期
Bean的作用域 我们先来看下面这段代码 首先是一个Dog类 (此处使用lombok来完成setter、getter、toString方法) Setter Getter public class Dog {private String name;} 然后在DogBeanConfig类里面写一个返回Dog的方法,并将这个方法的返…...
【Qt】QMainWindow之菜单栏
目录 一.菜单栏 1.概念 2.组成 二.代码创建菜单栏 1.创建菜单栏 2.在菜单栏中添加菜单 3.在菜单中添加菜单项 三.图形化创建菜单栏 1.在打开Qt自带的ui文件界面后,得到以下界面 2.双击点击界面中(在这里输入),在菜单栏中进行…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
