๐Ÿ›ก๏ธ Backup Manager

๐Ÿ“ฆ Classic profiles โ€” backup to external drive, network share, SSH server, or S3 cloud storage.
๐Ÿ”’ Anti-Ransomware profiles โ€” backup to Amazon AWS S3 with Object Lock, the technology used in banking. Your data becomes impossible to delete, even by ransomware.

  • โœ… 100 % automatic โ€” daily backups, email alerts, integrity checks
  • โœ… No AWS knowledge needed โ€” the wizard creates and locks everything
  • โœ… Free and open-source โ€” no subscription, no account
  • โœ… Windows 10 / 11 โ€” one-click MSI installer
Setup wizard โ€” mode choice
General settings tab
Run backup view
Mirror configuration tab

Two modes

ClassicAnti-Ransomware (anti-ransomware)
DestinationUSB / network share / SFTP / S3Amazon AWS S3 with Object Lock
Setup3 steps11 guided steps โ€” AWS signup and bucket done for you
ProtectionEncryption + integrity checksClassic + backups that cannot be deleted before their retention date
For whomYou already have a drive or NASYou want to survive a full ransomware attack

What Anti-Ransomware does once the wizard finishes

  • ๐Ÿ“… Monthly full + daily differential (only changed files)
  • ๐Ÿ”’ Each backup locked on S3 for your chosen duration โ€” even you cannot delete it
  • โœ… SHA-256 integrity check after every upload
  • ๐Ÿ“ง Optional email on success / failure
  • ๐Ÿงน Old backups past their lock date auto-deleted by S3 Lifecycle
  • ๐Ÿ” Missed a run? Catches up on next startup. Retries on failure.

Retention

DurationUse
4 months (default)Ransomware dwell time is ~3 months โ€” this covers it with margin.
13 monthsRolling one-year protection.
7 yearsRegulatory archives.
Custom2 to 20 years.

Cost shown in the wizard before you commit (10 GB โ†’ 800 GB, based on AWS S3 Glacier IR pricing). AWS bills you directly.

Key features

S3 Object Lock ComplianceRansomware-proof, Anti-Ransomware mode
4 storage backendsLocal / USB, network share, SFTP, S3
+2 mirror copiesIndependent, per-destination encryption
AES-256-GCM streamingNothing written in plaintext
GFS rotation (classic mode)Daily / weekly / monthly
SHA-256 integrityPre, post, and periodic checks
DPAPI password storageWindows user-bound
Adaptive bandwidthThrottling for slow links (Starlink-tested)

Storage backends

DestinationDescription
Local / USBAny local drive, external HDD, or removable USB. Auto-detection by hardware serial so drive-letter changes do not break the profile.
Network (UNC)Windows shared folder (\\server\share) with username / password. Credentials go through Windows Credential Manager.
SFTP (SSH)Password or private key (Ed25519, ECDSA, RSA). Server-side tar-stream when the remote allows an exec channel.
Amazon AWS S3With optional Object Lock for the Anti-Ransomware mode.
S3-compatibleScaleway, Wasabi, OVH, DigitalOcean, Cloudflare R2, Backblaze B2, MinIO.

Main interface

TabDescription
RunLaunch a backup, watch progress and logs
GeneralMode, profile name, source folders, exclusions, bandwidth
Storage / Mirror 1 / Mirror 2Primary and up to 2 mirror destinations
EncryptionAES-256-GCM toggle per destination
ScheduleFrequency, time, auto-retry, periodic verification
ProtectionObject Lock status, retention, bucket (Anti-Ransomware)
RetentionGFS policy (classic mode)
EmailSMTP with provider presets and test button
RecoveryRestore from local or remote (SFTP, S3, network)
VerifyOn-demand integrity verification
HistoryPast backup logs with status column

Security architecture

Defense in depth โ€” independent layers, each designed to fail safely.

S3 Object Lock (Anti-Ransomware mode)

LayerMechanism
Deletion resistanceS3 Object Lock Compliance โ€” the bucket rejects delete and overwrite requests until the per-object retention date
Full backupsLocked for retention + 30 days so the last full outlives its dependent differentials
Differential backupsLocked for the retention period
CleanupS3 Lifecycle removes objects after the lock expires
No app-side deleteBackup Manager never issues a delete against a locked bucket

Encryption at rest โ€” .tar.wbenc streaming format

No plaintext data is ever written to disk:

Header (37 B):
  [4B magic "WBEC"] [1B version] [16B salt] [16B reserved]

Body (repeating chunks):
  [4B plaintext length] [12B nonce] [ciphertext + 16B GCM tag]

EOF sentinel:
  [4B zeros]

Cipher and key derivation

ParameterValueRationale
CipherAES-256-GCMNIST-approved authenticated encryption
Key size256 bitsLargest AES key length
Nonce12 B sequential counterUnique per chunk, never reused
Auth tag16 B (128 bit)Detects tampering and corruption
KDFPBKDF2-HMAC-SHA256Standard password-based KDF
Iterations600 000OWASP 2024 guidance
Salt16 B os.urandom()Per-backup, prevents rainbow tables

Password storage

PlatformMethodDetails
WindowsDPAPI (CryptProtectData)Tied to the current Windows user account
FallbackAES-256-GCM with a DPAPI-wrapped 32-byte machine keyUsed if DPAPI is unavailable

Summary

LayerMechanism
Ransomware resistanceS3 Object Lock Compliance (Anti-Ransomware mode)
Data at restAES-256-GCM streaming (.tar.wbenc)
Key derivationPBKDF2-HMAC-SHA256, 600 000 iterations, random salt
Password storageWindows DPAPI + AES-256-GCM fallback
IntegritySHA-256 manifest + post-write verify + GCM auth tag
TransportSSH / HTTPS / SMB
MemoryExplicit buffer zeroing on sensitive paths
Path safetyTraversal-proof remote path validation
LoggingNo secrets in any log output
Bug reportsDual HMAC + Ed25519 signed diagnostics, injection-proof
BuildNuitka native C compilation (no extractable bytecode)

Testing

pytest                                      # full suite
pytest --cov=src --cov-report=term-missing  # with coverage

Current status: 1429 tests, 85 % coverage, 0 failures.

CI (GitHub Actions, every push): Black formatting, Ruff linting (Ubuntu), full pytest with coverage enforcement (Windows, Python 3.12 + 3.13).

Build from source

Prerequisites

  • Python 3.11+ (tested on 3.12 and 3.13)
  • Nuitka (Python โ†’ C compiler)
  • MSVC Build Tools
  • WiX Toolset v3.14 (MSI only)

Commands

git clone https://github.com/loicata/backup-manager.git
cd backup-manager
pip install -r requirements.txt
python -m src                 # dev run
python build_nuitka.py        # -> dist/BackupManager/BackupManager.exe
python build_msi.py           # -> dist/BackupManager-x.y.z.msi

Project structure

backup-manager/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ core/                    # Backup engine, scheduler, config, pipeline
โ”‚   โ”‚   โ”œโ”€โ”€ backup_engine.py     # Main orchestrator (11-phase pipeline)
โ”‚   โ”‚   โ”œโ”€โ”€ config.py            # Profile dataclasses + JSON persistence
โ”‚   โ”‚   โ”œโ”€โ”€ events.py            # Thread-safe event bus for UI updates
โ”‚   โ”‚   โ”œโ”€โ”€ bandwidth_tester.py  # Adaptive bandwidth measurement
โ”‚   โ”‚   โ”œโ”€โ”€ integrity_verifier.py # Periodic integrity verification
โ”‚   โ”‚   โ”œโ”€โ”€ scheduler.py         # In-app scheduler + auto-start
โ”‚   โ”‚   โ””โ”€โ”€ phases/              # Pipeline phases
โ”‚   โ”‚       โ”œโ”€โ”€ collector.py     # File collection + exclusion filtering
โ”‚   โ”‚       โ”œโ”€โ”€ filter.py        # Differential change detection
โ”‚   โ”‚       โ”œโ”€โ”€ encryptor.py     # Streaming tar encryption
โ”‚   โ”‚       โ”œโ”€โ”€ writer.py        # Write dispatcher (local / remote)
โ”‚   โ”‚       โ”œโ”€โ”€ verifier.py      # Post-write integrity verification
โ”‚   โ”‚       โ”œโ”€โ”€ mirror.py        # Mirror replication orchestrator
โ”‚   โ”‚       โ””โ”€โ”€ rotator.py       # GFS retention rotation
โ”‚   โ”œโ”€โ”€ storage/                 # Storage backends
โ”‚   โ”‚   โ”œโ”€โ”€ local.py             # Local / USB with drive-serial detection
โ”‚   โ”‚   โ”œโ”€โ”€ network.py           # SMB / CIFS network shares
โ”‚   โ”‚   โ”œโ”€โ”€ sftp.py              # SSH with tar-stream
โ”‚   โ”‚   โ”œโ”€โ”€ s3.py                # S3 + Object Lock
โ”‚   โ”‚   โ”œโ”€โ”€ s3_setup.py          # Bucket provisioning + cost simulation
โ”‚   โ”‚   โ””โ”€โ”€ base.py              # Abstract backend + retry + throttling
โ”‚   โ”œโ”€โ”€ security/                # Encryption, DPAPI, secure memory
โ”‚   โ”œโ”€โ”€ notifications/           # SMTP email with HTML reports
โ”‚   โ””โ”€โ”€ ui/                      # Tkinter GUI (Sun Valley theme)
โ”‚       โ”œโ”€โ”€ wizard.py            # Classic (3 steps) + Pro (11 steps) wizard
โ”‚       โ”œโ”€โ”€ app.py               # Main window with mode selector
โ”‚       โ””โ”€โ”€ tabs/                # Tab implementations
โ”œโ”€โ”€ tests/                       # 1429 tests (unit + integration)
โ”œโ”€โ”€ CHANGELOG.md
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ pyproject.toml

Requirements

RequirementVersion
OSWindows 10 / 11
Python3.11+ (dev only โ€” end users install the MSI)
cryptography>= 43.0.0
paramiko>= 3.0.0
boto3>= 1.35.0
Pillow>= 10.0.0
pystray>= 0.19.0
sv_ttk>= 2.6.0

License โ€” GPL v3.0 โ€” ยฉ 2026 Loic Ader โ€” loicata.com

Issues / PRs โ€” welcome on GitHub. Open an issue first for anything significant.