test fuzz-04-模糊测试 jazzer Coverage-guided, in-process fuzzing for the JVM

拓展阅读

开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息)

开源 Junit performance rely on junit5 and jdk8+.(java 性能测试框架。性能测试。压测。测试报告生成。)

test fuzz-01-模糊测试(Fuzz Testing)

test fuzz-02-模糊测试 JQF + Zest Semantic Fuzzing for Java

test fuzz-03-模糊测试 Atheris A Coverage-Guided, Native Python Fuzzer

test fuzz-04-模糊测试 jazzer Coverage-guided, in-process fuzzing for the JVM

test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java

test fuzz-06-模糊测试 AFL american fuzzy lop - a security-oriented fuzzer

test fuzz-07-模糊测试 libfuzzer

jazzer

Jazzer是由Code Intelligence开发的一款基于覆盖率引导的JVM平台内部模糊测试工具。

它基于libFuzzer,并将许多基于仪器的变异特性引入了JVM。

Jazzer目前支持以下平台:

  • Linux x86_64
  • macOS 12+ x86_64和arm64
  • Windows x86_64

快速入门

您可以使用Docker尝试Jazzer的Autofuzz模式,在此模式下,它会自动生成要传递给给定Java函数的参数,并报告意外的异常和检测到的安全问题:

docker run -it cifuzz/jazzer-autofuzz \
   com.mikesamuel:json-sanitizer:1.2.0 \
   com.google.json.JsonSanitizer::sanitize \
   --autofuzz_ignore=java.lang.ArrayIndexOutOfBoundsException

这里,前两个参数是Java库的Maven坐标和要进行模糊测试的Java函数的完全限定名称,采用"方法引用"形式。

可选的–autofuzz_ignore标志接受一个要忽略的未捕获异常类的列表。

几秒钟后,Jazzer应该会触发一个AssertionError,复现它在此库中发现的一个已修复的错误。

使用

使用 Jazzer 通过 JUnit 5 进行…

假设您的项目已经设置了 JUnit 5.9.0 或更高版本,例如基于官方的 junit5-samples。

  1. 添加依赖项 com.code-intelligence:jazzer-junit:<latest version>。所有 Jazzer Maven 构件都使用此密钥进行签名。
  2. 在新的或现有测试类中添加一个新的模糊测试:一个使用 @FuzzTest 注释的方法,并至少一个参数。建议使用类型为 FuzzedDataProvider 的单个参数,该参数提供用于生成常用 Java 值的实用函数,或使用 byte[] 以获得最佳性能和发现的可重现性。
  3. 假设您的测试类名为 com.example.MyFuzzTests,请创建 inputs 目录 src/test/resources/com/example/MyFuzzTestsInputs。
  4. 运行一个模糊测试,将环境变量 JAZZER_FUZZ 设置为 1,以便模糊测试器快速尝试新的参数集。如果模糊测试器找到使您的模糊测试失败甚至触发安全问题的参数,它将将它们存储在 inputs 目录中。在此模式下,每次测试运行仅执行单个模糊测试(有关详细信息,请参见#599)。
  5. 在不设置 JAZZER_FUZZ 的情况下运行模糊测试,以仅对 inputs 目录中的输入执行测试。此模式的行为类似于传统的单元测试,确保模糊测试器先前发现的问题已被修复,并且还可以用于在单个输入上调试模糊测试。

一个简单的基于属性的模糊测试可能如下所示(不包括导入):

class ParserTests {
   @Test
   void unitTest() {
      assertEquals("foobar", SomeScheme.decode(SomeScheme.encode("foobar")));
   }

   @FuzzTest
   void fuzzTest(FuzzedDataProvider data) {
      String input = data.consumeRemainingAsString();
      assertEquals(input, SomeScheme.decode(SomeScheme.encode(input)));
   }
}

可以在 examples/junit 中找到一个完整的 Maven 示例项目。

在这里插入图片描述


http://www.niftyadmin.cn/n/5314001.html

相关文章

数据结构之二叉搜索树(Binary Search Tree)

数据结构可视化演示链接&#xff0c;也就是图片演示的网址 系列文章目录 数据结构之AVL Tree 数据结构之B树和B树 数据结构之Radix和Trie 文章目录 系列文章目录示例图定义二叉搜索树满足的条件应用场景 示例图 二叉 线形(顺序插入就变成了线性树&#xff0c;例如插入顺序为&…

24/01/09 qt work

1. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

Apache Doris (六十三): Spark Doris Connector - (3)-配置型及列映射关系

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. Spark 操作Doris配置项

【Github3k+⭐️】《CogAgent: A Visual Language Model for GUI Agents》译读笔记

CogAgent: A Visual Language Model for GUI Agents 摘要 人们通过图形用户界面&#xff08;Graphical User Interfaces, GUIs&#xff09;在数字设备上花费大量时间&#xff0c;例如&#xff0c;计算机或智能手机屏幕。ChatGPT 等大型语言模型&#xff08;Large Language Mo…

HarmonyOS状态管理概述

状态管理概述 在前文的描述中&#xff0c;我们构建的页面多为静态界面。如果希望构建一个动态的、有交互的界面&#xff0c;就需要引入“状态”的概念。 图1 效果图 上面的示例中&#xff0c;用户与应用程序的交互触发了文本状态变更&#xff0c;状态变更引起了UI渲染&…

Nginx安装http2和ssl模块

Nginx安装http2和ssl模块 Nginx在执行默认安装命令的时候&#xff0c;并不会编译启用ngx_http_v2_module模块。故在修改Nginx配置文件启用http2.0协议的时候会报错。 一.检查Nginx安装了哪些模块 #进入Nginx的安装目录 cd /usr/local/nginx #执行命令查看安装了哪些模块 ./sbi…

Python——数据类型转换

# 将数字类型转换成字符串 num_str str(111) print(type(num_str), num_str) \# 将浮点类型转换成字符串 float_str str(12.34) print(type(float_str), float_str) # 将字符串转变成数字 num int("234") print(type(num)) # 将字符串转变成浮点型 num2 float(&q…

sql查看指定时间段的数据

要查看指定时间段的数据&#xff0c;您可以使用SQL中的WHERE子句来过滤日期或时间列&#xff0c;以仅选择在指定时间段内的行。以下是一个示例查询&#xff0c;假设您有一个名为table_name的表&#xff0c;其中包含一个名为date_column的日期列&#xff1a; SELECT * FROM tab…