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 编码
39,393 每月下载量
在 4 个crate中使用 (via auditable-info)
10KB
115 行
通过cargo auditable
提取可执行文件中嵌入的依赖关系树信息。
该crate解析特定平台的二进制格式 (ELF、PE、Mach-O、WASM) 并获取压缩的审计数据。
与其他二进制解析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