#byte #mutation #mutator #fuzzing #byte-array #fuzz

byte-mutator

定义一系列字节逐步变异的库

4 个版本

0.2.0 2020 年 2 月 24 日
0.1.2 2019 年 11 月 8 日
0.1.1 2019 年 11 月 5 日
0.1.0 2019 年 11 月 5 日

10 in #mutator

每月 31 次下载
用于 clobber

MIT 许可证

17KB
314

byte-mutator

byte-mutator 是一个 crate,用于定义通过一组规则变异字节数组的库。它旨在作为模糊测试工作流程的一部分使用,以配置您希望如何变异输入。例如,您可能想要执行一次不修改消息头的遍历,只变异主体,或者以不同的方式变异它们。

示例

BitFlipper

此示例配置为逐个翻转字节的每一位。

let mut bytes = b"foo".to_vec();
let mut mutator = ByteMutator::new().with_stages(vec![Stage {
    count: 0,
    max: Some(24),
    mutations: vec![Mutation {
        range: None,
        mutation: MutationType::BitFlipper { width: 1 },
    }],
}]);

// Bytes in their original state
assert_eq!(&bytes, b"foo");

// Perform a single mutation
mutator.mutate(&mut bytes);

// We've flipped the first bit (little endian)
// 0b1100110 -> 0b1100111, 103 -> 102, f -> g
assert_eq!(&bytes, b"goo");

从配置加载

这是一个配置为无限翻转位的变异器的示例。

[[stages]]
    # Iteration count at which to start the loop (useful for starting over from a future state)
    count = 0

    # A list of mutations to perform on this stage
    [[stages.mutations]]
        # Must be a variant of the MutatorTypes enum
        mutation = {"BitFlipper" = {width = 1 }}

发布历史

  • 0.2.0
    • 从 ByteMutator 中移除了数据结构。变异现在需要 &mut [u8] 引用。
    • 移除了 Iterations,只添加了简单的 Option<usize> 用于 max
  • 0.1.0
    • 初始发布

元数据

Ryan Ragona – @ryanragonahttps://github.com/ragona

在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE

贡献

总是乐意看到 PR 或问题。

要贡献

  1. 分叉它 (https://github.com/ragona/yourproject/byte-mutator)
  2. 创建您的功能分支 (git checkout -b feature/fooBar)
  3. 提交您的更改 (git commit -am 'Add some fooBar')
  4. 推送到分支 (git push origin feature/fooBar)
  5. 创建新的拉取请求

依赖项

~0.6–1.2MB
~28K SLoC