Problem: The CLI isn't in your PATH.
Solution:
- Verify installation:
which shadowforge - If not found, reinstall using Installation Guide
- macOS Homebrew:
brew install greysquirr3l/tap/shadowforge - Manual: Add binary location to PATH:
export PATH="/path/to/bin:$PATH"
Problem: Binary doesn't have execute permission.
Solution:
chmod +x $(which shadowforge) # Make binary executableProblem: Silent failure, no output.
Solution:
# Enable debug logging
SHADOWFORGE_LOG_LEVEL=debug shadowforge <command>
# Check system resources
free -h # Memory (Linux)
sysctl hw.memsize (macOS)Problem: Payload is too large for carrier.
Solutions (in priority order):
-
Use larger carrier:
shadowforge analyze capacity image.png shadowforge analyze capacity larger_image.jpg
-
Use different technique with higher capacity:
shadowforge embed secret.txt image.png --technique DCT # vs LSB - DCT typically has higher capacity for JPEG -
Reduce payload size:
# Compress payload first gzip secret.txt -c > secret.txt.gz shadowforge embed secret.txt.gz image.png
-
Use distributed embedding:
shadowforge embed-distributed secret.txt cover1.png cover2.png cover3.png
Problem: Media format isn't supported.
Solution:
-
Check supported formats:
shadowforge formats
-
Convert media to supported format:
ffmpeg -i video.mp4 carrier.wav # Convert to WAV ffmpeg -i image.bmp image.png # Convert to PNG
Problem: Stego image was edited (resized, rotated, cropped).
Solutions:
-
PNG/BMP (LSB): Very sensitive to any modifications
- Don't edit after embedding
- Use original quality images
-
JPEG (DCT): Somewhat resilient
- But re-compression destroys data
- Use export settings that preserve quality
-
WAV (LSB): Sensitive to re-encoding
- Don't convert sample rate or bit depth
Prevention:
# Verify image wasn't modified
md5sum image.png > image.png.md5
# Later, verify:
md5sum -c image.png.md5Problem: Media file is corrupted or invalid.
Solutions:
# Verify file integrity
file image.png # Check file type
identify image.png # Detailed image info (requires ImageMagick)
ffprobe -i audio.wav # Audio info
# Repair or convert
ffmpeg -i corrupted.jpg -q:v 2 fixed.jpg"No hidden data detected" error
Problem: Can't find embedded data in carrier.
Possible causes and solutions:
-
Wrong carrier file:
# Verify you're using the right file ls -la *.png # Use the one you embedded into
-
Data was corrupted:
# Try different techniques shadowforge extract stego.png --technique LSB shadowforge extract stego.png --technique DCT -
Carrier was modified:
# Re-embedding to same carrier will corrupt data # Use original carrier, not a copy
-
Wrong password (if encrypted):
shadowforge extract stego.png --password your_password
Problem: Extracted data failed integrity check.
Solutions:
-
Verify carrier integrity:
# Check file wasn't modified md5sum stego.png # Should match what you got after embedding
-
Try with error correction:
# Shadowforge auto-uses Reed-Solomon, but can be tuned shadowforge extract stego.png --redundancy high -
Carrier was partially corrupted:
- Use distributed embedding (you can lose some carriers)
- Re-embed to reliable carriers
Problem: Incorrect decryption password.
Solutions:
# Ensure password is correct
shadowforge extract stego.png --password "correct password"
# If you forgot password:
# There's no recovery - steganography hides data, not protects keysProblem: Don't have enough carriers for threshold.
Example:
# You embedded across 10 images with threshold 7
# But only have 5 images
# Need 7+, so recovery failsSolutions:
-
Locate missing carriers:
- Check the manifest file
- It lists which shard is in which carrier
-
Use lower threshold next time:
shadowforge embed-distributed secret.txt \ cover1.png cover2.png cover3.png \ --threshold 2 # Lower threshold, fewer carriers needed -
Account for potential loss:
- With 10 carriers and threshold 7, you can lose 3
- With 5 carriers and threshold 3, you can lose 2
Problem: Manifest file is corrupted or tampered.
Solutions:
# If you have the original manifest:
cp backup/manifest.json manifest.json
# Or re-extract with the carriers you have
# (though you'll need to guess correct carriers)Problem: Distributed extraction isn't fast enough.
Solutions:
# Increase worker count
shadowforge extract-distributed *.png \
--workers 8 # More workers (default: CPU count)
--parallel true # Explicit parallel modeProblem: Archive contains suspicious file paths.
Solution:
# This is a security feature - archive was rejected
# The archive may have been maliciously crafted
# Use trusted archives onlyProblem: Archive file is corrupted.
Solutions:
# Repair archive
zip -F archive.zip --out archive-fixed.zip # ZIP repair
tar -tzf archive.tar.gz > /dev/null # TAR verify
# Use unzipper tool for detailed diagnostics
unzip -t archive.zipProblem: Operation is slow.
Possible causes:
- Very large image (e.g., 4K)
- Very large payload
- Complex distribution pattern
- Slow storage (USB drive, network drive)
Solutions:
# Profile the operation
time shadowforge embed secret.txt image.png
# Use faster storage if available
# Move to local SSD instead of USB
# Check system resources
# High CPU/memory usage might be limitingProblem: Not using multiple CPUs.
Solution:
# Explicit parallel setting
shadowforge embed-distributed secret.txt *.png --parallel true
# Check CPU usage
# On macOS: Activity Monitor
# On Linux: top, htop
# On Windows: Task ManagerWarning: Carrier quality is low.
Solutions:
# Use a different, higher-quality image
shadowforge analyze detectability image.png
# Score shows carrier quality
# Better carrier sources:
# - Original, uncompressed photos
# - High-resolution stock photos
# - Avoid memes, screenshots, previously edited imagesTips:
-
Use high-quality carriers:
- Original photos from camera
- Stock photography
- High-resolution images
-
Don't embed maximum capacity:
- Use 50% safe capacity, not 100%
shadowforge analyze capacity image.png # Shows safe capacity -
Mix with normal content:
- Not every image is suspicious
- Have legitimate reasons to send images
-
Don't re-use carriers:
- Use unique images each time
- Patterns are detectable
Remember:
- Steganography hides data, doesn't encrypt it
- For sensitive data, encrypt BEFORE embedding:
# Encrypt first gpg --symmetric --cipher-algo AES256 secret.txt # Then embed shadowforge embed secret.txt.gpg image.png
Problem: Gatekeeper blocks unsigned binary.
Solution:
# Allow execution
xattr -d com.apple.quarantine /path/to/shadowforge
# Or install via Homebrew (signed)
brew install greysquirr3l/tap/shadowforgeProblem: Binary won't run (missing libc).
Solution:
# Check dependencies
ldd $(which shadowforge)
# Install missing libraries (Ubuntu):
sudo apt-get install libc6 libssl-devProblem: Windows Defender or antivirus flags binary.
Solution:
- Build from source (antivirus trusts compiled code from source)
- Add to antivirus whitelist
- Contact antivirus vendor about false positive
If your issue isn't listed:
-
Enable debug logging:
SHADOWFORGE_LOG_LEVEL=debug SHADOWFORGE_LOG_MODE=cli shadowforge <command>
-
Collect diagnostic info:
shadowforge version go version uname -a # System info -
Check documentation:
-
Report issue:
- GitHub Issues
- Include: command, error message, debug output, system info
Found a bug? Have a fix? Contribute on GitHub!