🕵️ Lupin
A blazing-fast, lightweight steganography tool for concealing data inside normal-looking files. Lupin can be used as a CLI tool for quick operations or as a Rust library for integration into your applications.
Steganography hides the existence of data rather than just its contents. Where encryption makes a message unreadable, steganography makes it invisible: the file still looks and behaves like an ordinary PDF, PNG, or JPEG.
Lupin is named after Arsène Lupin, the fictional gentleman thief, for the same reason: hiding something in plain sight.
Supported Formats
- PDF: Appends data after the
%%EOFmarker (unlimited capacity, easily detectable) - PNG: Custom ancillary chunks (unlimited capacity, zero visual artifacts, somewhat easily detectable)
- JPEG: Signed APP13 application markers, split across segments as needed (unlimited capacity, zero visual artifacts, somewhat easily detectable)
Quick Start
CLI Tool
# Install
# Or build from source: git clone && cargo build --release
# Hide data in PDF
# Extract data
# More options
More info in the CLI Guide.
Rust Library
# Cargo.toml
[]
= "1.0"
use ;
// Read files
let source = read?;
let payload = read?;
// Embed with metadata
let = embed?;
println!;
// Extract
let = extract?;
More info in the Library Guide.
Documentation
- CLI Guide - Command-line usage, logging, examples
- Library Guide - Rust API, integration examples
- Architecture - How it works, adding new formats
Contributing
Contributions welcome! Please read the architecture docs to understand the codebase structure.
License
Apache License 2.0. See LICENSE for details.
Disclaimer: For educational and legitimate use only. Users are responsible for complying with applicable laws.