Skip to main content

Rust quickstart

Open a page-store file and walk every page, verifying CRC trailers:

use opensqlany::PageStore;

fn main() -> Result<(), opensqlany::Error> {
let store = PageStore::open("database.db")?;

let sb = store.superblock()?;
println!("format {}.{}.{}", sb.format_major, sb.version_a, sb.version_b);

for page in store.pages().skip(1) {
page.verify_crc()?;
let t = page.trailer();
println!("page {} type {:?}", page.index(), t.page_type());
}

Ok(())
}

Working with deobfuscated input

If your input is a QuickBooks .QBW file, peel the additive-progression layer off per page before parsing it:

use opensqlany::{ApModel, PageStore};

let store = PageStore::open("Company.QBW")?;
let model = ApModel::learn(&store);

for page in store.pages().skip(1) {
let plain = model.deobfuscate_with_store(page.bytes(), page.index(), &store);
let page_type = opensqlany::PageType::from_byte(plain[0xFF2]);
println!("page {} type {:?}", page.index(), page_type);
// ...pass `plain` to opensqlany::Page::from_bytes / SlottedPage::parse
}
# Ok::<(), opensqlany::Error>(())

See AP deobfuscation for the format details.