Swiss Army Knife Utility - Professional Windows toolkit for PC technicians: system migration, user profile management, and advanced file operations.
S.A.K. Utility is a modern C++23 desktop application designed for PC technicians who perform system migrations, user profile management, and file operations during repairs, upgrades, and replacements. Built with Qt6 and following modern C++ best practices, it delivers enterprise-grade reliability with a technician-friendly interface.
- ✅ Zero-Install Deployment - Portable executable with embedded dependencies
- ✅ Production-Ready - FIPS 140-2 encryption, OWASP-compliant validation, comprehensive error handling
- ✅ Performance-Optimized - Multi-threaded operations, streaming decompression, efficient memory management
- ✅ Technician-Focused - Designed for real-world PC repair workflows
- ✅ Open Source - Fully auditable, transparent automated builds
Target Users: PC technicians, computer repair shops, IT support specialists, system administrators
Version: 0.5.0
Platform: Windows 10/11 (x64 only)
Package Size: ~21.5 MB compressed | ~95 MB extracted
- Download the latest release from Releases
- Extract to your preferred location (e.g.,
C:\Tools\SAK-Utility\) - Run
sak_utility.exe- no installation required! - (Optional) Create empty
portable.inifile for portable mode
# Add Windows Defender exclusion (recommended for first-time users)
Add-MpPreference -ExclusionPath "C:\Tools\SAK-Utility"
# Or bypass SmartScreen warning: "More info" → "Run anyway"Why the warning? Not code-signed (certificates cost $300+/year). All builds are automated via GitHub Actions - fully transparent and auditable.
Automate software installation on new/refreshed Windows systems using embedded Chocolatey.
Key Capabilities:
- Intelligent Scanning - Windows Registry (32/64-bit) + AppX packages via PowerShell
- Smart Matching - 42 pre-defined mappings + fuzzy algorithms (Levenshtein, Jaro-Winkler)
- Confidence Scoring - High/Medium/Low/Manual ratings for match quality
- Version Control - Pin specific versions for reproducible deployments
- Batch Installation - Install 50+ apps with one click
- Zero System Chocolatey - Fully embedded (67 MB) in
tools/chocolatey/
Real-World Use Case:
Migrate a user from Windows 10 to Windows 11 - scan old PC, export app list, import on new PC, install all apps automatically.
Enterprise-grade user profile management with 6-page wizards and military-grade encryption.
Page 1: Welcome - Process overview, safety warnings
Page 2: User Selection - Scan local users (NetUserEnum API), multi-select with size estimates
Page 3: Data Customization - 11 folder types per user (Documents, Desktop, Pictures, Videos, Music, Downloads, AppData, Favorites, Start Menu, Custom)
Page 4: Smart Filters - Auto-exclude temp files, caches, thumbnails, dangerous system files
Page 5: Security Settings - AES-256-CBC encryption (FIPS 140-2), ZIP compression, SHA-256 verification
Page 6: Execution - Real-time progress, MB/s speed, estimated time, detailed logging
Page 1: Select Backup - Browse backups, read manifests
Page 2: User Mapping - Map backup users → current users (3 merge modes: Replace, Merge, Create New)
Page 3: Conflict Resolution - Skip, Overwrite, or Rename duplicates
Page 4: Folder Selection - Choose which folders to restore
Page 5: Permissions - ACL preservation settings
Page 6: Execution - Decrypt, decompress, restore with progress tracking
Security Highlights:
- AES-256-CBC via Windows BCrypt API (FIPS 140-2 compliant)
- PBKDF2 key derivation (100,000 iterations)
- Random salt (32 bytes) + random IV (16 bytes) per backup
- SHA-256 integrity verification for all files
Automatically organize chaotic directories by file extension.
Features:
- 6 Default Categories - Images, Documents, Videos, Audio, Archives, Executables
- Custom Rules - Add your own categories and extension mappings
- Collision Handling - Rename (add suffix), Skip, or Overwrite
- Recursive Processing - Scan subdirectories
- Preview Mode - Dry run before committing changes
- Detailed Logging - Action-by-action report
Eliminate duplicate files using cryptographic hashing.
Capabilities:
- MD5 Hashing - True byte-level duplicate detection (not filename-based)
- Streaming Algorithm - Memory-efficient for large files (1 MB chunks)
- Multi-Threaded - Parallel hashing with QtConcurrent
- Size Filter - Skip tiny files (configurable threshold)
- 3 Actions - Delete, Move to folder, or Report only
Best-effort tool to locate software license keys in Windows Registry.
Features:
- Registry Scanning - Pattern matching for "key", "serial", "license", "product", "activation"
- Filesystem Scanning - Finds
.lic,.key,.license,.regfiles - Multi-Threaded - Fast registry traversal
- UAC Elevation - Auto-prompt when admin access needed
- Export Results - CSV/TXT format
Important Limitations:
- ❌ Cannot decrypt encrypted keys
- ❌ Many modern apps use cloud licensing or hardware tokens
- ❌ Best-effort only - no guarantees
Create bootable USB drives with 4-page wizard and streaming decompression.
Page 1: Image Source - Local file (ISO/IMG/WIC/ZIP/GZ/BZ2/XZ) or download Windows ISO
Page 2: Target Drives - Multi-select USB drives (system drive protection, cannot select boot drive)
Page 3: Flash Progress - 5 states (Validate → Unmount → Decompress → Flash → Verify), MB/s speed, per-drive status
Page 4: Completion - Success/failure summary, SHA-512 verification results
Supported Formats:
| Format | Extension | Decompression |
|---|---|---|
| ISO | .iso |
Direct write |
| IMG | .img |
Direct write |
| WIC | .wic |
Direct write |
| ZIP | .zip |
Qt built-in |
| GZIP | .gz |
zlib streaming |
| BZIP2 | .bz2 |
libbz2 streaming |
| XZ | .xz |
liblzma streaming |
| DMG | .dmg |
Read-only |
| DSK | .dsk |
Direct write |
Key Features:
- Streaming Decompression - NO temporary files (decompresses on-the-fly)
- Parallel Writing - Flash to multiple drives simultaneously
- 64 MB Buffer - 16-buffer pipeline (1 GB total for read-ahead)
- SHA-512 Verification - Optional post-write checksum
- System Protection - Cannot select boot/system drives
Windows ISO Downloader:
- Download official Windows 10/11 ISOs directly from Microsoft
- Language and edition selection (Home, Pro, Education)
- Architecture choice (x64, ARM64)
Comprehensive Windows user profile backup with intelligent 6-page wizards and enterprise-grade encryption.
Page 1: Welcome & Instructions
- Introduction to backup process, safety warnings, documentation links
Page 2: Scan & Select Users
- Windows User Detection: Uses
NetUserEnumAPI to enumerate all local users - Displayed Info: Username, SID (Security Identifier), Profile Path (
C:\Users\Username), Estimated Size, Current User indicator - Actions: Scan Users, Select All, Select None, real-time progress bar
- Summary: X users selected, Y GB total
Page 3: Customize Per-User Data
- Per-User Customization Dialog:
per_user_customization_dialog.cpp/h - 11 Folder Types Supported:
- Documents, Desktop, Pictures, Videos, Music, Downloads
- AppData\Roaming, AppData\Local
- Favorites, Start Menu, Custom paths
- Folder Options: Enable/disable each folder, include patterns (
["*"]or specific files), exclude patterns, calculated size and file count per folder
Page 4: Smart Filter Configuration
- Size Limits (Optional): Max single file size (2 GB default), Max folder size (50 GB warning threshold)
- Dangerous Files Excluded:
NTUSER.DAT,UsrClass.dat,NTUSER.DAT.LOG*,*.lock,hiberfil.sys,pagefile.sys - Excluded Folders:
AppData\Local\Temp, browser caches (INetCache,Temporary Internet Files) - Pattern Exclusions:
*.tmp,*.temp,*.cache,thumbs.db,desktop.ini - Actions: Reset to Defaults, View Dangerous Files List
- Implementation:
smart_file_filter.cpp- OWASP-compliant path validation
Page 5: Backup Settings
- Compression: 4 levels (None, Fast, Balanced, Maximum) using PowerShell
Compress-Archive→ ZIP format - Encryption: AES-256-CBC via Windows BCrypt API (FIPS 140-2 compliant)
- Key Derivation: PBKDF2 with 100,000 iterations
- Salt: 32 bytes (random per backup)
- IV: 16 bytes (random per backup)
- Format:
[Salt(32)][IV(16)][EncryptedData] - Password confirmation with strength validation
- Verification: SHA256 checksum for integrity (stored in manifest file)
- Destination: Browse for backup location, automatic manifest generation
Page 6: Execution & Progress
- Progress Tracking: Overall progress bar (%), current file progress, current operation label, speed (MB/s), elapsed time
Automatically organize messy directories by file extension with intelligent categorization.
Features:
- Extension-Based Sorting: Moves files into category folders
- 6 Default Categories:
- Images:
.jpg,.jpeg,.png,.gif,.bmp,.svg - Documents:
.pdf,.doc,.docx,.txt,.odt - Videos:
.mp4,.avi,.mkv,.mov,.wmv - Audio:
.mp3,.wav,.flac,.m4a,.ogg - Archives:
.zip,.rar,.7z,.tar,.gz - Executables:
.exe,.msi,.bat,.sh
- Images:
- Customization: Add/remove categories, custom extension mappings
- Collision Handling: Rename (add suffix), Skip (leave existing), Overwrite (replace)
- Recursive Processing: Scan subdirectories option
- Preview Mode: Dry run before committing changes
- Detailed Logging: Action-by-action report
Technical Components:
organizer_panel.cpp/h- GUI panelorganizer_worker.cpp/h- Background thread for file operationsource machine, backup date, users in backup, total size, encryption status
Page 2: User Mapping
- Auto-Detect Destination Users: Scans local users via
NetUserEnumAPI - 3 Merge Modes:
- ReplaceDestination: Overwrite destination user's files
- MergeIntoDestination: Combine files with conflict resolution
- CreateNewUser: Create new user profile
- Mapping Table: Source Username → Destination Username (dropdown), Source/Dest SID, Merge Mode dropdown
- Actions: Auto-Map (matches by username), Manual mapping per row
Page 3: Merge Configuration
Create bootable USB drives with 4-page wizard, supporting multiple image formats and streaming decompression.
Page 1: Select Image
- Image Sources:
- Local file: ISO, IMG, WIC, ZIP, GZIP (.gz), BZIP2 (.bz2), XZ (.xz), DMG (read-only), DSK
- Download Windows ISO: Opens
windows_iso_download_dialog.cpp
- Image Info Display: Path, Size, Format, Compression type (if applicable)
Page 2: Select Target Drives
- Drive List: Name, Size, Bus Type (USB, SATA, NVMe, SD), Mount Points
- Multi-Select: Flash to multiple drives simultaneously (parallel writing)
- System Drive Protection: System/boot drives grayed out, cannot select
- Safety Options: "Show All Drives" checkbox (includes non-removable when enabled)
- Summary: "X drives selected"
Page 3: Flash Progress
- Overall Progress Bar: 0-100%
- State Label: "Validating → Unmounting → Decompressing → Flashing → Verifying"
- Details: "Writing to \.\PhysicalDrive1 (SanDisk Ultra)"
- Speed: Current write speed (MB/s)
- Per-Drive Status: Active drives count, failed drives count, completed drives count
- Cancel Button: Graceful abort with cleanup
Page 4: Completion
- Success Message: "Successfully flashed X drives"
- Failed Drives List: Error details for each failure
- Verification Results: SHA-512 checksums (if verification enabled)
- Actions: "Flash Another" (restart wizard), "Done" (close panel)
| Format | Extension | Description | Decompression |
|---|---|---|---|
| ISO | .iso |
ISO 9660 CD/DVD image | None (direct write) |
| IMG | .img |
Raw disk image | None (direct write) |
| WIC | .wic |
Windows Imaging Format | None (direct write) |
| ZIP | .zip |
ZIP archive containing image | Built-in Qt |
| GZIP | .gz |
GZIP compressed | zlib (streaming) |
| BZIP2 | .bz2 |
BZIP2 compressed | libbz2 (streaming) |
| XZ | .xz |
XZ/LZMA compressed | liblzma (streaming) |
| DMG | .dmg |
Apple Disk Image | Read-only support |
| DSK | .dsk |
Generic disk image | None (direct write) |
Find and manage duplicate files using cryptographic hashing.
Capabilities:
- MD5-Based Detection: True byte-level duplicate detection (not just filename matching)
- Streaming Hashing: Memory-efficient for large files (1 MB chunks via
file_hash.cpp) - Multi-Threaded Scanning: Parallel hashing for large directories using QtConcurrent
- Minimum Size Filter: Skip tiny files (configurable threshold in KB)
- Recursive Scanning: Option to scan subdirectories
- 3 Actions: Delete duplicates (keeps one copy), Move to folder, Report only (export list)
Attempt to locate software license keys stored in Windows Registry (best-effort tool).
Features:
- Registry Scanning: Searches
HKLMandHKCUwith pattern matching (keywords: "key", "serial", "license", "product", "activation") - Filesystem Scanning: Detects license files (
.lic,.key,.license,.reg) - Multi-Threaded: Parallel registry traversal for performance
- UAC Elevation: Automatic elevation prompt when registry access requires admin
- Export: Save findings to CSV/TXT file
- Additional Paths: Add custom directories to scan
Scan Options:
- Scan Registry (HKLM, HKCU)
- Scan Filesystem (Program Files, ProgramData, etc.)
- Scan system licenses (Windows activation, Office)
- Custom paths (line edit)
Limitations:
- Only finds registry-stored keys - Many modern apps use:
- Cloud-based licensing (keys stored on vendor servers)
- Hardware tokens or dongles
- Encrypted credential storage (Windows Credential Manager, KeyChain)
- Cannot decrypt protected keys - Encrypted keys cannot be recovered
- False Positives: May find unrelated registry values
- Best-effort basis only - No guarantees
Technical Components:
license_scanner_panel.cpp/h- GUI panel with result tablelicense_scanner_worker.cpp/h- Background registry/filesystem scanning threadelevation_manager.cpp/h- UAC integration for admin accesses,QueryDosDeviceAPI,GetDriveType,DeviceIoControlfor geometry- Drive Information Collected:
- Device path (
\\.\PhysicalDrive1) - Name, Size (bytes), Block Size (512 or 4096)
- System drive flag, Removable flag, Read-only flag
- Bus type (USB, SATA, NVMe, SD)
- Mount points (e.g.,
["E:\", "F:\"]), Volume label
- Device path (
- Continuous Monitoring:
DriveScannerruns in background thread, emitsdrivesUpdatedsignal on drive insertion/removal
Safety Features:
- System Drive Protection: Prevents selecting boot drive (grayed out in UI)
- Write-Protection Detection: Warns if drive is read-only
- Size Validation: Ensures target drive is large enough for image
- Confirmation Dialog: Shows all drives that will be erased, requires explicit confirmation
Flash Coordinator (flash_coordinator.cpp - 249 lines):
5 Flash States:
- Validating: Check image file exists, validate drives, verify size compatibility
- Unmounting: Unmount all volumes on target drives (
drive_unmounter.cpp) - Decompressing: Stream decompress (if needed) - NO TEMPORARY FILES (key feature)
- Flashing: Parallel writes to multiple drives
- Buffer: 64 MB per buffer
- Pipeline: 16 buffers for read-ahead (1 GB total pipeline)
- Parallelism: Writes to all selected drives simultaneously
- Verifying: SHA-512 checksum per drive (optional, can be disabled in settings)
Progress Tracking:
- State enum, Percentage (0-100), Bytes written (total across all drives)
- Total bytes, Speed (MB/s), Active/failed/completed drive counts
Streaming Decompression (NO TEMP FILES):
- Key Feature: Decompresses on-the-fly without creating temporary files
- Libraries: zlib (gzip), libbz2 (bzip2), liblzma (xz)
- Buffer Management: 64 MB chunks, 16-buffer pipeline for continuous streaming
- Memory-Efficient: Only buffers in RAM, never writes full decompressed file to disk
- Implementation:
streaming_decompressor.cpp/h(base),gzip_decompressor.cpp,bzip2_decompressor.cpp,xz_decompressor.cpp
Use Case: Create bootable Windows installation USB drives for PC repairs and fresh installations, flash Raspberry Pi images, create Linux live USBs.
| Component | Version | Purpose |
|---|---|---|
| Language | C++23 | Modern features: std::expected, std::format, std::source_location |
| GUI Framework | Qt 6.5.3 | Cross-platform library (Windows deployment) |
| Build System | CMake 3.28+ | Project configuration and orchestration |
| Compiler | MSVC 19.44+ | Visual Studio 2022 with C++23 compliance |
| Threading | QtConcurrent + std::stop_token |
Parallel operations with modern cancellation |
| Cryptography | Windows BCrypt + QCryptographicHash | AES-256-CBC, MD5/SHA-256/SHA-512 hashing |
| Compression | zlib, bzip2, liblzma | Streaming decompression (no temp files) |
| Package Manager | Chocolatey (embedded) | 67 MB in tools/chocolatey/ |
| Error Handling | std::expected<T, E> |
Modern C++23 error propagation (100+ codes) |
| Validation | OWASP-compliant | Path traversal prevention (input_validator.cpp) |
| Logging | Async file logging | Thread-safe, ISO 8601, auto-rotation |
| CI/CD | GitHub Actions | Automated builds, vcpkg caching (2-4 min builds) |
S.A.K.-Utility/
├── src/
│ ├── core/ # Business logic (35+ files, ~8,000 lines)
│ │ ├── app_scanner.cpp # Registry + AppX detection
│ │ ├── chocolatey_manager.cpp # Embedded Chocolatey integration
│ │ ├── package_matcher.cpp # Fuzzy matching algorithms
│ │ ├── user_data_manager.cpp # Backup/restore orchestration
│ │ ├── encryption.cpp # AES-256-CBC (339 lines)
│ │ ├── file_hash.cpp # MD5/SHA-256/SHA-512 streaming
│ │ ├── drive_scanner.cpp # USB drive detection
│ │ ├── flash_coordinator.cpp # Flash operation state machine
│ │ ├── streaming_decompressor.cpp # Base decompression interface
│ │ ├── gzip_decompressor.cpp # zlib wrapper
│ │ ├── bzip2_decompressor.cpp # libbz2 wrapper
│ │ ├── xz_decompressor.cpp # liblzma wrapper
│ │ ├── logger.cpp # Async logging (286 lines)
│ │ └── input_validator.cpp # OWASP path validation
│ │
│ ├── gui/ # Qt interface (21+ files, ~7,000 lines)
│ │ ├── main_window.cpp # 5-tab main window (180 lines)
│ │ ├── user_profile_backup_wizard.cpp # 6 pages (1090+ lines)
│ │ ├── user_profile_restore_wizard.cpp # 6 pages (1081 lines)
│ │ ├── app_migration_panel.cpp # Migration GUI (921 lines)
│ │ ├── image_flasher_panel.cpp # Flash GUI (600+ lines)
│ │ └── settings_dialog.cpp # Multi-tab settings
│ │
│ ├── threading/ # Background workers
│ │ ├── organizer_worker.cpp # File organization thread
│ │ ├── duplicate_finder_worker.cpp # Hashing thread
│ │ └── flash_worker.cpp # USB flash thread
│ │
│ └── main.cpp # Entry point
│
├── include/sak/ # Public headers (50+ files)
├── tests/ # 11 test executables
├── tools/chocolatey/ # Embedded Chocolatey (67 MB)
├── resources/ # Icons, Qt resources
└── CMakeLists.txt # Build configuration
# MSVC (Visual Studio 2022)
/W4 # Warning level 4 (highest)
/WX # Treat warnings as errors
/permissive- # Strict C++ conformance
/Zc:__cplusplus # Correct __cplusplus macro
/sdl # Security Development Lifecycle
/MP # Multi-processor compilation
/guard:cf # Control Flow Guard
/O2 /LTCG # Maximum optimization + Link-Time Codegen
# Code Standards
✓ Zero warnings (all treated as errors)
✓ RAII everywhere (no manual memory management)
✓ Qt QT_NO_KEYWORDS mode (Q_EMIT, Q_SIGNALS, Q_SLOTS)
✓ Modern error handling (std::expected)
✓ Type safety (no C-style casts)| Test | Purpose | Lines |
|---|---|---|
test_app_scanner |
Registry + AppX detection | ~200 |
test_chocolatey_manager |
Embedded Chocolatey | ~300 |
test_package_matcher |
Fuzzy matching algorithms | ~400 |
test_user_data_manager |
Backup/restore core | ~500 |
test_migration_report |
Report generation (JSON/CSV/HTML) | ~300 |
test_app_migration_worker |
Background installer | ~350 |
test_app_migration_panel |
GUI integration | ~450 |
test_backup_wizard |
Backup wizard GUI | ~400 |
test_restore_wizard |
Restore wizard GUI | ~400 |
test_integration_phase1_2 |
Full workflow tests | ~600 |
test_choco_install |
Real package installation | ~250 |
- ✅ Automated Builds - Every push to
mainbranch - ✅ vcpkg Caching -
installed/,packages/,buildtrees/ - ✅ CMake Caching -
build/directory (excludes artifacts) - ✅ Build Time - 2-4 minutes (down from 7+ without caching)
- ✅ SHA-256 Hashes - Generated for all release assets
- ✅ Automatic Releases - On
v*tags (e.g.,v0.5.0)
| Optimization | Impact | Files Affected |
|---|---|---|
| Loop Size Caching | 5-15% faster iterations | 5 core files |
| Vector Pre-Allocation | 30-50% fewer allocations | 4 core files |
| String Operation Caching | 20-40% faster | 2 core files |
| Overall Throughput | 10-25% improvement | Production codebase |
Technical Details:
- Cached
size()calls before loops (eliminates repeated function calls) - Pre-reserved vector capacity with reasonable estimates
- Cached expensive string operations (
toLower()) - Used
constreferences in range-based for loops
Algorithm: AES-256-CBC via Windows BCrypt API
Key Derivation: PBKDF2-SHA-256
- 100,000 iterations (OWASP recommended minimum)
- 32-byte key (256-bit)
- 16-byte IV (128-bit AES block size)
- 32-byte salt (random per encryption)
Format: [Salt(32)][IV(16)][EncryptedData]
Security Benefits:
- ✅ Random salt prevents rainbow table attacks
- ✅ Random IV prevents pattern analysis
- ✅ PBKDF2 slows brute-force attacks
- ✅ FIPS 140-2 certified cryptography
Path Traversal Prevention (input_validator.cpp - 345 lines):
- Rejects
..,..\,../patterns - Blocks absolute paths (
C:\,\\server\) - Sanitizes directory separators
- Validates against allowed paths
Injection Attack Prevention:
- Command injection detection
- SQL injection patterns
- Script injection patterns
sak_utility.exe- Main application (1.5 MB)portable.ini- Enables portable mode (create empty file)
- Qt6Core.dll, Qt6Gui.dll, Qt6Widgets.dll, Qt6Network.dll, Qt6Concurrent.dll, Qt6Svg.dll
- Platform plugins:
platforms/qwindows.dll - Style plugins:
styles/qwindowsvistastyle.dll - Image plugins:
imageformats/(PNG, JPEG, SVG, ICO, GIF) - TLS plugins:
tls/(HTTPS support)
zlib1.dll- gzip compression/decompressionbz2.dll- bzip2 compression/decompressionliblzma.dll- xz/lzma compression/decompression
tools/chocolatey/choco.exe- Main executabletools/chocolatey/bin/- Helper tools (7z, wget, shimgen, checksum)tools/chocolatey/helpers/- PowerShell modulestools/chocolatey/lib/- Package cache (initially empty)- No system installation required - completely self-contained
Total: ~95 MB extracted | ~21.5 MB compressed
# 1. Scan installed applications
Click "Scan Applications" → Administrator prompt → Wait for completion
# 2. Match to Chocolatey packages
Click "Match Packages" → View confidence scores (High/Medium/Low)
# 3. Select apps to install
Check boxes in "Select" column → Optional: Check "Lock Version" for pinning
# 4. Install on target system
Click "Install Selected" → Administrator prompt → Monitor progress
# 5. Export/Import migration plans
File → Generate Report (JSON/CSV/HTML)
File → Import (load previously exported plans)Pro Tips:
- Use High confidence matches for automatic installation
- Review Medium/Low matches manually before installing
- Lock versions for reproducible deployments across multiple PCs
- Save migration plans as templates for common configurations
Backup → Backup User Profiles...
├─ Page 1: Read overview, click Next
├─ Page 2: Scan Users → Check users to backup
├─ Page 3: Click "Customize" → Select folders per user
├─ Page 4: Review exclusion rules (temp files, caches)
├─ Page 5: Choose destination → Enable encryption (recommended)
└─ Page 6: Monitor progress → Finish
Backup Best Practices:
- ✅ Always enable encryption for sensitive data
- ✅ Enable compression to save space (ZIP format)
- ✅ Enable verification for integrity checks (SHA-256)
- ✅ Store backups on external drive (not same disk)
- ✅ Test restores periodically to verify backup integrity
Backup → Restore User Profiles...
├─ Page 1: Read overview, click Next
├─ Page 2: Browse backup folder → Reads manifest.json
├─ Page 3: Map users (Source → Destination) → Choose merge mode
├─ Page 4: Select merge behavior (Skip/Overwrite/Rename conflicts)
├─ Page 5: Choose folders to restore
└─ Page 6: Monitor progress → Finish
Restore Best Practices:
- ✅ Use "Replace" mode for clean installs
- ✅ Use "Merge" mode when combining profiles
- ✅ Use "Skip" conflict mode to preserve existing files
- ✅ Verify ACL preservation if moving between Windows versions
Image Flasher Tab
├─ Page 1: Select Image
│ ├─ Local file (ISO/IMG/WIC/ZIP/GZ/BZ2/XZ)
│ └─ Download Windows ISO (opens downloader dialog)
│
├─ Page 2: Select Target Drives
│ ├─ Multi-select USB drives
│ └─ System drive protection (cannot select boot drive)
│
├─ Page 3: Flash Progress
│ ├─ Validating → Unmounting → Decompressing → Flashing → Verifying
│ └─ Real-time speed (MB/s), per-drive status
│
└─ Page 4: Completion
├─ Success/failure summary
└─ SHA-512 verification results
Safety Tips:
⚠️ Double-check drive selection - flashing erases ALL data⚠️ Backup important data before flashing- ✅ System drives are grayed out and cannot be selected
- ✅ Enable verification to ensure successful write
Create an empty portable.ini file in the same directory as sak_utility.exe:
# Enable portable mode
New-Item -Path "portable.ini" -ItemType FileBenefits:
- ✅ Settings stored in
settings.ini(same directory) instead of Windows Registry - ✅ No registry access - truly portable
- ✅ Copy entire folder to USB/network - works instantly
- ✅ Chocolatey packages cache in
tools/chocolatey/lib/
Log Location: %LOCALAPPDATA%\SAK\Utility\logs\sak_utility.log
Features:
- Thread-safe multi-threaded writes
- ISO 8601 timestamps:
2025-12-13T14:32:15.123Z - 5 severity levels: Debug, Info, Warning, Error, Critical
- Automatic log rotation when exceeds size threshold
- Async file writing for performance
View Logs:
# Open log directory
explorer "$env:LOCALAPPDATA\SAK\Utility\logs"
# Tail log file (PowerShell)
Get-Content -Path "$env:LOCALAPPDATA\SAK\Utility\logs\sak_utility.log" -Tail 50 -WaitSettings Dialog: Edit → Settings
Tabs:
- General - Window geometry, theme
- Backup - Thread count, MD5 verification, default location
- Organizer - Preview mode, default categories
- Duplicate Finder - Minimum file size, keep strategy
- License Scanner - Registry/filesystem scan options
- Image Flasher - Validation mode, buffer size, notifications
- Windows 10/11 x64
- Visual Studio 2022 (Community Edition is free)
- Workload: "Desktop development with C++"
- C++23 support required
- CMake 3.28+
- Qt 6.5.3 (msvc2019_64 kit)
- Git
# Clone repository
git clone https://github.com/RandyNorthrup/S.A.K.-Utility.git
cd S.A.K.-Utility
# Configure with CMake
cmake -B build -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_PREFIX_PATH="C:/Qt/6.5.3/msvc2019_64" `
-DCMAKE_BUILD_TYPE=Release
# Build Release
cmake --build build --config Release --parallel
# Executable location
# build\Release\sak_utility.exe| Issue | Solution |
|---|---|
| Qt not found | Verify -DCMAKE_PREFIX_PATH points to Qt installation |
| Missing DLLs at runtime | Run windeployqt build\Release\sak_utility.exe manually |
| C++23 errors | Ensure Visual Studio 2022 17.4+ with latest C++ tools |
| vcpkg errors | Delete build/ and reconfigure |
- ✅ Windows 10/11 x64 - Fully supported and tested
- ❌ macOS - Not supported (code stubs exist but non-functional)
- ❌ Linux - Not supported (code stubs exist but non-functional)
Why Windows-Only?
- Chocolatey is Windows-exclusive
- Windows Registry scanning (License Scanner, App Scanner)
- NetUserEnum API for user detection
- Windows ACL/permissions handling
- NTFS filesystem features
License Scanner:
- ❌ Only finds registry-stored keys
- ❌ Cannot decrypt encrypted keys
- ❌ Many modern apps use cloud licensing or hardware tokens
- ✅ Best-effort basis only
User Profile Backup:
- ❌ Not a full system image backup
- ❌ No incremental backup support (full backup only)
- ❌ No automatic scheduling (manual execution only)
Keep-Awake:
- ✅ Backend exists (
keep_awake.cpp) - ❌ No GUI checkbox yet (planned for v0.6)
- ✅ Keep-Awake GUI checkbox
- ✅ Incremental backup support
- ✅ Dark mode theme
- ✅ Enhanced log viewer with filtering
- ✅ CTest integration
- ✅ Backup scheduling via Windows Task Scheduler
- ✅ Network backup capabilities
- ✅ Settings sync across multiple PCs
- ✅ Plugin system for extensibility
- ✅ Full ACL backup/restore verification
- ✅ Code signing certificate
- ✅ MSI installer package
- ✅ Comprehensive user documentation
- Cloud backup integration (OneDrive, Google Drive)
- macOS support (requires significant development)
- Linux support (requires significant development)
Why does this happen?
- Application is not code-signed (certificates cost $300+/year for hobbyists)
- Windows SmartScreen flags new executables without established reputation
- This is a false positive - source code is fully open and auditable
Solutions:
# Option 1: Add Windows Defender exclusion (recommended)
Add-MpPreference -ExclusionPath "C:\Tools\SAK-Utility"
# Option 2: Add firewall exception for network operations
New-NetFirewallRule -DisplayName "SAK Utility" `
-Direction Inbound -Program "C:\Tools\SAK-Utility\sak_utility.exe" `
-Action AllowSmartScreen Bypass:
- Click "More info" → "Run anyway"
- Warning disappears as app builds reputation
Verify Download Integrity:
# Verify SHA-256 hash matches release notes
Get-FileHash -Algorithm SHA256 sak_utility.exe| Issue | Cause | Solution |
|---|---|---|
| UAC prompts repeatedly | Chocolatey operations require admin | Run as administrator once |
| Qt DLLs missing | windeployqt didn't run | Re-extract release package |
| Backup fails with "Access Denied" | NTFS permissions | Run as administrator |
| Flash fails on system drive | Safety protection active | Use external USB drive |
| Settings not persisting | No write permissions | Check folder permissions or enable portable mode |
GNU General Public License v2.0
Copyright (C) 2025 Randy Northrup
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
See LICENSE file for full text.
- Qt Framework 6.5.3 - LGPL v3 | https://www.qt.io/
- Chocolatey - Apache 2.0 | https://chocolatey.org/
- zlib - zlib License | https://zlib.net/
- bzip2 - bzip2 License | https://sourceware.org/bzip2/
- liblzma - Public Domain | https://tukaani.org/xz/
Want to help? We welcome contributions!
- 📝 Issues - GitHub Issues
- 💬 Discussions - GitHub Discussions
- 🔧 Pull Requests - See CONTRIBUTING.md
Areas Needing Help:
- 🌍 macOS/Linux implementations (significant effort)
- 📦 Additional Chocolatey package mappings
- 🎨 UI/UX improvements and dark mode
- 📖 Documentation and tutorials
- 🧪 Testing on various Windows configurations
- 📚 Documentation - This README + CONTRIBUTING.md
- 🐛 Bug Reports - Open an Issue
- 💡 Feature Requests - Start a Discussion
- 💬 Community Chat - GitHub Discussions
Development:
- Lead Developer - Randy Northrup
- Original Concept - Python proof-of-concept (archived in
python_archive/)
Third-Party Components:
- Qt Framework - Cross-platform GUI and cryptography
- Chocolatey - Windows package manager (embedded)
- Microsoft Windows API - User enumeration, Registry, ACLs
Special Thanks:
- C++ and Qt communities for support
- Microsoft for Windows API documentation
- Chocolatey community for package database
- GitHub Actions for CI/CD platform