Autarkie 是一个用 Rust 构建的原生语法模糊测试器。它使用过程宏(procedural macros),(几乎完全)自动地创建一个语法模糊测试器。Autarkie 很大程度上受到了 nautilus 的启发。

特性

小众特性

Autarkie 具有其他语法模糊测试器不具备的几个特性:

如何使用

这里有两个主要的演练:

  1. 模糊测试 AFL++ 仪器化的 C/C++ 项目

    这个例子通过使用 datafusion-sqlparser-rs 中定义的语法来模糊测试 sqlite3。我个人最喜欢这个例子,因为它展示了 Autarkie 的魔力:你可以在 5 分钟内构建一个高度复杂的语法模糊测试器,覆盖像 SQL 这样复杂的语言。这个例子还展示了如何将内部结构渲染成 harness 可以使用的不同格式。

    前往演练

  2. 使用 cargo-fuzz 模糊测试 Rust 项目

    这个例子模糊测试了 Solana 的 sbpf 解释器,它是在 Rust 中实现的。Autarkie 具有 cargo-fuzz 集成,因此可以很容易地模糊测试原生 Rust 项目。

    前往演练

局限性和注意事项

Beta

Autarkie 处于 Beta 阶段 - 预计会出现问题,请谨慎使用。

静态生命周期

类型必须拥有其所有数据;它不能使用生命周期。这是由于使用了 std::intrinsics::type_id,它要求类型具有 'static 生命周期。

注意:你可以简单地编写一个包装器类型,它拥有所有数据并将其转换为原生类型。

仅限 Nightly

由于使用了 #![feature(compiler_intrinsics)] 特性,因此仅限于 nightly 版本。

贡献

欢迎贡献、提问和反馈。请积极参与!