backhand 0.5.0

Library for the reading, creating, and modification of SquashFS file systems
Documentation

backhand

Library and binaries for the reading, creating, and modification of SquashFS file systems.

:warning: WARNING
The API for this library isn't complete. I will most likely break this for improvements

Library

Add the following to your Cargo.toml file:

[dependencies]
backhand = "0.5.0"

Reading/Writing/Modifying Firmware

use std::fs::File;
use backhand::{Filesystem, FilesystemHeader};

// read
let file = File::open("file.squashfs").unwrap();
let mut filesystem = Filesystem::from_reader(file).unwrap();

// add files
let d = FilesystemHeader::default();
filesystem.push_file("Fear is the mind-killer.", "a/d/e/new_file", d);
filesystem.push_file("It is by will alone I set my mind in motion.", "root_file", d);

// modify file
let file = filesystem.mut_file("/a/b/c/d/e/first_file").unwrap();
file.bytes = b"The sleeper must awaken.\n".to_vec();

// write
let bytes = filesystem.to_bytes().unwrap();

Testing

This library is tested with unpacking and packing SquashFS firmwares and testing that result with unsquashfs. openwrt binaries are primarily being tested.

Binaries

These are currently under development and are missing features, MR's welcome!

unsquashfs

Usage: unsquashfs [OPTIONS] <INPUT> <COMMAND>

Commands:
  extract-all    Extract all files(Symlink/Files/Dirs) from image
  help           Print this message or the help of the given subcommand(s)

Arguments:
  <INPUT>  squashfs file

Options:
  -o, --offset <OFFSET>  [default: 0]
  -h, --help             Print help information
  -V, --version          Print version information

add

Binary to add file to squashfs filesystem

Usage: add <INPUT> <FILE> <FILE_PATH>

Arguments:
  <INPUT>      Squashfs file
  <FILE>
  <FILE_PATH>

Options:
  -h, --help     Print help information
  -V, --version  Print version information