crabstep
crabstep is a Rust library that deserializes Apple's typedstream data into cross-platform Rust data structures.
Overview
The typedstream format is a binary serialization protocol designed for C and Objective-C data structures. It is primarily used in Apple's Foundation framework, specifically within the NSArchiver and NSUnarchiver classes.
⚠️ Warning
This library is in alpha state; the API surface may change.
Quick Start
use ;
use TypedStreamDeserializer;
// Read the typedstream file into memory
let typedstream_path = current_dir
.unwrap
.as_path
.join;
let mut file = open.unwrap;
let mut bytes = vec!;
file.read_to_end.unwrap;
// Oxidize the typedstream
let mut typedstream = new;
let root = typedstream.oxidize.unwrap;
// Iterate over the typedstream's properties
typedstream.resolve_properties
.unwrap
.for_each
Detailed examples
This crate is heavily used by imessage-database's body module.
Origin
The format is derived from the data structure used by NeXTSTEP's NXTypedStream APIs.
Features
- Pure Rust implementation for efficient and safe deserialization
- No dependencies on Apple frameworks
- Robust error handling for malformed or incomplete
typedstreamdata - Ergonomic
TypedStreamDeserializerwithresolve_propertiesiterator for exploring object graphs
Reverse Engineering
A blog post describing the reverse engineering of typedstream is located here.