5 个版本 (3 个重大更新)
0.4.1 | 2024年1月4日 |
---|---|
0.4.0 | 2020年12月7日 |
0.3.0 | 2020年12月3日 |
0.2.0 | 2020年11月30日 |
0.1.0 | 2020年11月29日 |
#836 在 解析器实现 中
每月21 次下载
46KB
723 代码行
这是一个用 100% 安全的 Rust 编写的 Office VBA 项目解析器。这是 [MS-OVBA]: Office VBA 文件格式结构 协议 (修订版 9.1,发布于 2020-02-19) 的实现。
动机
二进制文件格式解析器在历史上一直是攻击者的目标。复杂的代码逻辑与频繁未经检查的内存访问的结合,使它们多次成为远程代码执行漏洞的受害者。
Rust 是解决许多这些安全问题的可靠盟友,使这个crate能够提供安全的解析器实现。
特性
这个库提供了对 VBA 项目元数据和源代码的只读访问。显著特性包括
- 提取源代码。
- 检查元数据,如包含的模块、引用等。
这个库不提供从 Office 文档中提取原始二进制 VBA 项目数据的方法。这是客户端代码的责任。配套的 ovba-cli 工具说明了如何实现这一点。
用法
写出所有模块的源代码
use ovba::{open_project, Result};
use std::fs::{read, write};
fn main() -> Result<()> {
let data = read("vbaProject.bin")?;
let project = open_project(data)?;
for module in &project.modules {
let src_code = project.module_source_raw(&module.name)?;
write("./out/".to_string() + &module.name, src_code)?;
}
Ok(())
}
列出 VBA 项目中包含的所有 CFB 条目
use ovba::{open_project, Result};
use std::fs::read;
fn main() -> Result<()> {
// Read raw project container
let data = read("vbaProject.bin")?;
let project = open_project(data)?;
// Iterate over CFB entries
for (name, path) in project.list()? {
println!(r#"Name: "{}"; Path: "{}""#, name, path);
}
Ok(())
}
向后兼容性
目前,API 和实现都在开发中。在达到 1.0 版本之前,预计会看到破坏性更改。对于 0.X.Y 版本,破坏性更改通过 0.X 版本号的增加来表示,非破坏性更改通过 Y 版本号的增加来表示。
这是一个预览版本。它已发布以允许其他人使用它,并征求反馈以帮助推动未来的决策。
未来工作
所有未来的工作都在 这里 跟踪。显著的包括
如果您缺少功能、发现了一个错误、有一个问题或想提供反馈,请确保 提交一个问题。
依赖项
~5MB
~147K SLoC