#tree #auditable #extract #binary #security #binaries #cargo

auditable-extract

通过cargo auditable提取二进制文件中嵌入的依赖关系树

9个版本

0.3.4 2024年5月8日
0.3.3 2024年5月3日
0.3.2 2022年10月2日
0.3.1 2022年8月6日
0.1.0 2020年9月7日

#369 in 编码

Download history 9031/week @ 2024-05-02 8762/week @ 2024-05-09 8261/week @ 2024-05-16 8186/week @ 2024-05-23 8000/week @ 2024-05-30 8812/week @ 2024-06-06 8676/week @ 2024-06-13 8571/week @ 2024-06-20 8600/week @ 2024-06-27 8296/week @ 2024-07-04 8406/week @ 2024-07-11 9295/week @ 2024-07-18 9848/week @ 2024-07-25 9079/week @ 2024-08-01 9008/week @ 2024-08-08 9741/week @ 2024-08-15

39,393 每月下载量
4 个crate中使用 (via auditable-info)

MIT/Apache

10KB
115

通过cargo auditable提取可执行文件中嵌入的依赖关系树信息。

该crate解析特定平台的二进制格式 (ELFPEMach-OWASM) 并获取压缩的审计数据。

与其他二进制解析crate不同,它专门设计为能够抵抗恶意输入。它是100%安全的Rust(包括所有依赖项)且不进行堆分配。

用法

注意:这是一个低级crate,仅实现二进制解析。很少应该直接使用。你可能想要使用更高级的auditable-info crate。

以下代码片段展示了使用此crate进行完整提取流程的示例,包括使用安全的Rust miniz_oxide 进行解压缩以及通过 auditable-serde 进行可选的JSON解析。

use std::io::{Read, BufReader};
use std::{error::Error, fs::File, str::FromStr};
!
fn main() -> Result<(), Box<dyn Error>> {
    // Read the input
    let f = File::open("target/release/hello-world")?;
    let mut f = BufReader::new(f);
    let mut input_binary = Vec::new();
    f.read_to_end(&mut input_binary)?;
    // Extract the compressed audit data
    let compressed_audit_data = auditable_extract::raw_auditable_data(&input_binary)?;
    // Decompress it with your Zlib implementation of choice. We recommend miniz_oxide
    use miniz_oxide::inflate::decompress_to_vec_zlib;
    let decompressed_data = decompress_to_vec_zlib(&compressed_audit_data)
        .map_err(|_| "Failed to decompress audit data")?;
    let decompressed_data = String::from_utf8(decompressed_data)?;
    println!("{}", decompressed_data);
    // Parse the audit data to Rust data structures
    let dependency_tree = auditable_serde::VersionInfo::from_str(&decompressed_data);
    Ok(())
}

依赖项

~94–410KB