39个版本 (破坏性更新)

0.28.0 2024年6月3日
0.26.0 2024年2月16日
0.24.0 2023年11月29日
0.20.0 2023年5月12日
0.1.0 2018年5月30日

#33 in FFI

Download history 719/week @ 2024-04-14 753/week @ 2024-04-21 929/week @ 2024-04-28 430/week @ 2024-05-05 404/week @ 2024-05-12 132/week @ 2024-05-19 216/week @ 2024-05-26 528/week @ 2024-06-02 151/week @ 2024-06-09 31/week @ 2024-06-16 88/week @ 2024-06-23 59/week @ 2024-06-30 44/week @ 2024-07-07 79/week @ 2024-07-14 45/week @ 2024-07-21 574/week @ 2024-07-28

每月744次下载
用于 5 crates

MIT/Apache

4MB
102K SLoC

C 57K SLoC // 0.1% comments Rust 37K SLoC // 0.0% comments Happy 3K SLoC Visual Studio Project 2K SLoC C++ 784 SLoC // 0.3% comments Bazel 697 SLoC // 0.3% comments Automake 316 SLoC // 0.1% comments Batch 211 SLoC Visual Studio Solution 191 SLoC M4 190 SLoC // 0.4% comments JavaScript 84 SLoC // 0.0% comments RPM Specfile 84 SLoC // 0.1% comments NuGet Config 47 SLoC Python 34 SLoC // 0.8% comments Shell 3 SLoC Bitbake 1 SLoC

yara-rust

Tests Status Crates.io Documentation

为VirusTotal的Yara库提供绑定。

更多文档可以在Yara的文档中找到。

示例

实现灵感来自yara-python

const RULES: &str = r#"
    rule contains_rust {
      strings:
        $rust = "rust" nocase
      condition:
        $rust
    }
"#;

fn main() {
    let compiler = Compiler::new().unwrap();
    let compiler = compiler
        .add_rules_str(RULES)
        .expect("Should have parsed rule");
    let rules = compiler
        .compile_rules()
        .expect("Should have compiled rules");
    let results = rules
        .scan_mem("I love Rust!".as_bytes(), 5)
        .expect("Should have scanned");
    assert!(results.iter().any(|r| r.identifier == "contains_rust"));
}

特性

  • 支持Yara v4.2。
  • 从字符串或文件编译规则。
  • 保存和加载编译后的规则。
  • 扫描字节数组(&[u8])或文件。

特性标志和Yara链接。

有关特性标志和如何链接到您的Yara crate的说明,请参阅yara-sys crate文档。

待办事项

  • 移除一些字符串转换中的unwrap(目前此crate假设规则、元数据和命名空间标识符是有效的Rust str)。
  • 在多个函数中接受AsRef<Path>而不是&str
  • 实现扫描器API。
  • 添加进程扫描。
  • 将警告报告给用户。

许可证

根据以下任一项许可:

由您选择。

贡献

请在提交到该仓库时遵循常规提交规则

如果您添加了任何新功能,请添加相应的单元/文档测试。

依赖项