Manish Goregaokar撰写了一篇精彩的博客文章,内容涉及货物模糊及其在模糊Rust程序中的使用。
从那篇文章开始,我就推送了代码以更新默认的模糊目标模板,并使整个模糊体验变得更好。 我还克隆了很多开源项目,并对它们进行了疯狂测试 ……取得了成功! 截至今天,我已经向奖杯案提交了10个错误; 其中6个是固定的,另外4个是未解决的项目。
如果您有一个需要输入的项目,请敦促您对代码进行模糊测试!
无论如何-这是我运行以测试项目的典型工作流程:
$ cd <your-amazing-project> $ cargo install cargo-fuzz # (if not already installed) $ cargo fuzz init $ vim fuzz/fuzzers/fuzzer_script_1.rs
<edit and save the file... more below>
$ cargo fuzz run fuzzer_script_1
<sit back and wait>
…就是这样!
编辑: / u / lifthrasiir有一些关于命令行标志的一些很好的技巧 ,可以加快模糊测试的速度。
现在,关于放入模糊目标的内容非常简单。 通常,您将需要在此处添加代码,这是该库其余部分的入口。 (当然,您可以测试程序的某些功能,但至少在这里它将测试整个功能。)
此类代码的示例如下:
#![no_main] #[macro_use] extern crate libfuzzer_sys; extern crate your_lib;
fuzz_target!(|data: &[u8]| { let _ = your_lib::parse(data); // I added this line. });
“…但是我的代码并不需要&[u8]”,您说-很容易,您可以使用以下代码将其转换为&str。
if let Ok(utf8) = std::str::from_utf8(data) { let _ = your_lib::parse(utf8); }
现在,您可以从此处向项目提交问题,也可以自己修复错误。 我通常使用以下格式提交我发现的崩溃( 此处为示例 ):
Found using `cargo-fuzz`.
<a minimal program (containing input) which causes the issue>
<backtrace>
我很快将发布另一篇有关分析和修复崩溃的文章,所以请多加注意-到目前为止,谢谢大家!
From: https://hackernoon.com/how-to-fuzz-a-rust-program-7adf09d3ab50