backhand
Library and binaries for the reading, creating, and modification of SquashFS file systems.
Library
Add the following to your Cargo.toml file:
[]
= "0.10.0"
Reading/Writing/Modifying Firmware
use File;
use Cursor;
use ;
// read
let file = open.unwrap;
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
These are currently under development and are missing features, MR's welcome!
To install, run cargo install backhand --locked.
unsquashfs-backhand
tool to uncompress, extract and list squashfs filesystems
Usage: unsquashfs [OPTIONS] <FILESYSTEM>
Arguments:
<FILESYSTEM> Squashfs file
Options:
-o, --offset <BYTES> Skip BYTES at the start of FILESYSTEM [default: 0]
-l, --list List filesystem, do not write to DEST
-d, --dest <PATHNAME> Extract to [PATHNAME] [default: squashfs-root]
-i, --info Print files as they are extracted
-f, --force If file already exists then overwrite
-s, --stat Display filesystem superblock information
-h, --help Print help information
-V, --version Print version information
add-backhand
tool to add files to squashfs filesystems
Usage: add [OPTIONS] <FILESYSTEM> <FILE> <FILE_PATH>
Arguments:
<FILESYSTEM> Squashfs input image
<FILE> Path of file to read, to write into squashfs
<FILE_PATH> Path of file inserted into squashfs
Options:
-o, --out <OUT> Squashfs output image [default: added.squashfs]
-h, --help Print help
-V, --version Print version
replace-backhand
tool to replace files in squashfs filesystems
Usage: replace [OPTIONS] <FILESYSTEM> <FILE> <FILE_PATH>
Arguments:
<FILESYSTEM> Squashfs input image
<FILE> Path of file to read, to write into squashfs
<FILE_PATH> Path of file replaced in image
Options:
-o, --out <OUT> Squashfs output image [default: replaced.squashfs]
-h, --help Print help
-V, --version Print version
Testing
This library is extensively tested with all library features and images from openwrt and extracted from manufacturers devices.
To run basic tests, use cargo test --release.
To start fuzzing, run cargo fuzz list then pick one! Then start with cargo fuzz run [NAME].