SecurityRonin/lzvn

GitHub: SecurityRonin/lzvn

纯 Rust 实现的 Apple LZVN 解压库,具备长度容忍特性以正确处理真实 macOS decmpfs 透明压缩资源分支块。

Stars: 0 | Forks: 0

# lzvn [![Crates.io](https://img.shields.io/crates/v/lzvn-core.svg)](https://crates.io/crates/lzvn-core) [![Docs.rs](https://docs.rs/lzvn/badge.svg)](https://docs.rs/lzvn) [![Rust 1.85+](https://img.shields.io/badge/rust-1.85%2B-blue.svg)](https://www.rust-lang.org) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](src/lib.rs) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa.svg)](https://github.com/sponsors/h4x0r) **一个安全、无依赖、`no_std` 的纯 Rust LZVN 解压器,能够真正读取真实的 macOS 文件** —— 在所有其他 Rust 解码器因其长度问题而拒绝处理时,它具备出色的长度容忍度。 ``` // A raw Apple LZVN block (small-literal "hello" + end-of-stream). let block = [0xe5, b'h', b'e', b'l', b'l', b'o', 0x06, 0, 0, 0, 0, 0, 0, 0]; let mut out = [0u8; 5]; let n = lzvn::decode_into(&block, &mut out)?; assert_eq!(&out[..n], b"hello"); # Ok::<(), lzvn::Error>(()) ``` ``` [dependencies] lzvn = { package = "lzvn-core", version = "0.1" } ``` ## 为什么会有这个项目 LZVN 是 Apple 用于 HFS+/APFS **透明压缩**(`decmpfs` 类型 7 和 8)的压缩编解码器,也是 LZFSE 流中 `bvxn` 块类型的底层格式。真实的 macOS `decmpfs` 资源分支块以 LZVN 的流结束 opcode(`0x06`)终止,随后每个块都会跟随 **80–300 字节的任意末尾数据**。Apple 的内核和 `lzvn_decode_buffer` 会忽略这些字节;**严格的整流 Rust 解码器(`lzfse_rust`,`lzvn` crate)则会拒绝它们** —— 因此它们在处理真正的 macOS 系统文件时会失败(已在 macOS 26.5 "Tahoe" 上验证:严格路径解码器对 25 个真实的类型 8 文件的解码成功率为 0/25)。 `lzvn` 会在 end-of-stream 标记处停止并返回。正是这一特性,决定了解码真实的证据磁盘镜像与报错退出之间的成败。 ## 信任,但需验证 - **`#![forbid(unsafe_code)]`**,零依赖,`no_std` —— 具备边界检查,在遇到格式错误的输入时会返回类型化的 [`Error`],而不是触发 panic 或越界读取。 - **通过独立的 oracle 进行了验证。** 提交的测试用例是由 Apple 官方的 `COMPRESSION_LZVN` 编码器(`libcompression`)生成的真实 LZVN 流,并填充了末尾字节以模拟 `decmpfs` 块 —— 并且解码器还针对相同的 Apple oracle,对 **25 个真实的 macOS 26.5 系统文件块**进行了额外验证(严格解码器的解码率为 0/25,而本工具为 25/25)。 - **经过 Fuzz 强化。** `cargo fuzz run decode` 会将任意输入馈送到解码器中;其不变性保证是“绝不 panic”。 ## 适用范围 本 crate 仅涉及 **编解码器** —— 它将原始的 LZVN 块解码为字节。`decmpfs` 的帧结构(资源分支块表、内联标记约定)属于调用它的文件系统读取器(例如 `hfsplus-forensic`)的负责范畴。仅支持解码;无编码器。 [隐私政策](https://securityronin.github.io/lzvn/privacy/) · [服务条款](https://securityronin.github.io/lzvn/terms/) · © 2026 Security Ronin Ltd
标签:LZVN, Rust, 可视化界面, 数据压缩, 文件系统, 无标准库(no_std), 网络流量审计, 解码器, 通知系统