backhand
Library and binaries for the reading, creating, and modification of SquashFS file systems.
- Library — Backhand provides an easy way for programmatic analysis of Squashfs 4.0 images, including the extraction and modification of images.
- Feature Flags — Supported compression and decompression are feature flagged, so your final binary (or
unsquashfs) only needs to include code to extract one type of image. - Unconventional Support — As well as supporting normal linux kernel SquashFS 4.0, we also support
the "wonderful world of vendor formats" with a
Kindstruct. This allows changing the magic bytes, custom compression algorithms, and the Endian-ness of either the Data or Metadata fields.
Library
Compiler support: requires rustc 1.72.1+
Add the following to your Cargo.toml file:
[]
= "0.18.0"
Reading/Writing/Modifying Firmware
use File;
use ;
use ;
// read
let file = new;
let read_filesystem = from_reader.unwrap;
// convert to writer
let mut write_filesystem = from_fs_reader.unwrap;
// add file with data from slice
let d = default;
let bytes = new;
write_filesystem.push_file;
// add file with data from file
let new_file = open.unwrap;
write_filesystem.push_file;
// modify file
let bytes = new;
write_filesystem.replace_file.unwrap;
// write into a new file
let mut output = create.unwrap;
write_filesystem.write.unwrap;
Binaries
Compiler support: requires rustc 1.74+
These are currently under development and are missing features, MR's welcome!
To install, run cargo install backhand-cli --locked, or download from the
latest github release.
See --help for more information.
unsquashfs-backhand
tool to uncompress, extract and list squashfs filesystems
Usage: unsquashfs-backhand [OPTIONS] [FILESYSTEM]
Arguments:
[FILESYSTEM] Squashfs file
Options:
-o, --offset <BYTES> Skip BYTES at the start of FILESYSTEM [default: 0]
-a, --auto-offset Find first instance of squashfs --kind magic
-l, --list List filesystem, do not write to DEST (ignores --quiet)
-d, --dest <PATHNAME> Extract to [PATHNAME] [default: squashfs-root]
-i, --info Print files as they are extracted
--path-filter <PATH_FILTER> Limit filesystem extraction [default: /]
-f, --force If file already exists then overwrite
-s, --stat Display filesystem superblock information (ignores --quiet)
-k, --kind <KIND> Kind(type of image) to parse [default: le_v4_0] [possible
values: be_v4_0, le_v4_0, avm_be_v4_0]
--completions <COMPLETIONS> Emit shell completion scripts [possible values: bash, elvish,
fish, powershell, zsh]
--quiet Silence all progress bar and RUST_LOG output
-h, --help Print help (see more with '--help')
-V, --version Print version
add-backhand
tool to add a file or directory to squashfs filesystems
Usage: add-backhand [OPTIONS] <IMAGE> <FILE_PATH_IN_IMAGE>
Arguments:
<IMAGE> Squashfs input image
<FILE_PATH_IN_IMAGE> Path of file once inserted into squashfs
Options:
-d, --dir Create empty directory
-f, --file <FILE> Path of file to read, to write into squashfs
-o, --out <OUT> Squashfs output image [default: added.squashfs]
--mode <MODE> Override mode read from <FILE>
--uid <UID> Override uid read from <FILE>
--gid <GID> Override gid read from <FILE>
--mtime <MTIME> Override mtime read from <FILE>
-h, --help Print help
-V, --version Print version
replace-backhand
tool to replace files in squashfs filesystems
Usage: replace-backhand [OPTIONS] <IMAGE> <FILE> <FILE_PATH_IN_IMAGE>
Arguments:
<IMAGE> Squashfs input image
<FILE> Path of file to read, to write into squashfs
<FILE_PATH_IN_IMAGE> Path of file replaced in image
Options:
-o, --out <OUT> Squashfs output image [default: replaced.squashfs]
-h, --help Print help
-V, --version Print version
Performance
See BENCHMARK.md.
Testing
See backhand-test.