Custom executable packer with all UPX fingerprints stripped. Same compression, same speed, same format support — zero UPX signatures in the output. Packs ELF, PE (Windows EXE/DLL), Mach-O, and DOS binaries.
| What | Stock UPX | VPX (default) |
|---|---|---|
| Magic bytes | UPX! (0x21585055) |
m30w (0x7730336D) |
| PE sections | UPX0 UPX1 UPX2 |
M3W0 M3W1 M3W2 |
$Info / $Id strings |
Embedded in every packed binary | Gone |
| Copyright / URLs / author names | Embedded | Gone |
| Stub error messages | UPX-5.0 wants... |
m3w-5.0 wants... |
| CLI branding | UPX |
m30w |
Optionally rebrand the packer with any 4-character magic word. Changes all magic bytes, section names, stub identifiers, and CLI branding — then rebuilds.
# Configure + build in one step
python3 configure_magic.py Fl4N --build
# Just configure (no build)
python3 configure_magic.py d00m
# Show current magic
python3 configure_magic.py --showAny 4 ASCII characters. The default m30w works out of the box — only use this if you need a unique signature per deployment.
| Magic | Sections | Example |
|---|---|---|
m30w |
M3W0/1/2 | Default |
Fl4N |
FLN0/1/2 | Custom build |
d00m |
D0M0/1/2 | Custom build |
XpLt |
XPT0/1/2 | Custom build |
What gets patched:
src/conf.h— magic constantssrc/pefile.cpp— PE section namessrc/help.cpp— CLI branding- Stub headers and platform includes
Builds are statically linked by default.
git clone --recurse-submodules https://github.com/Syn2Much.git
cd vpx
# Option 1: configure magic + build in one step
python3 configure_magic.py XpLt --build
# Option 2: manual build
mkdir -p build/release && cd build/release
cmake ../.. -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-static"
cmake --build . --parallelRequires: cmake 3.13+, C++17 compiler (gcc 8+ or clang 5+)
# Pack (LZMA — best compression)
./VPX --lzma ./binary
# Pack (best available method)
./VPX --best ./binary
# Try all methods (slow but tightest)
./VPX --brute ./binary
# Decompress
./VPX -d ./binary
# List info
./VPX -l ./binary
# Test integrity
./VPX -t ./binary
# Verify no UPX fingerprint
strings ./binary | grep -i upx
# ^ returns nothing| Platform | Format | Arch | Status |
|---|---|---|---|
| Linux | linux/elf | x86, x86_64, ARM, MIPS, MIPSEL, PowerPC | OK |
| Windows | win32/pe | x86 (EXE, DLL) | OK |
| Windows | win64/pe | x86_64 | Upstream stub bug |
| macOS | macho | x86, x86_64, ARM, ARM64, PowerPC, FAT | Untested |
| BSD | bsd/elf | x86 | Untested |
| DOS | dos/exe | 8086+ | Untested |
=== stock UPX packed binary ===
$ strings packed | grep -i upx
UPX!
$Info: This file is packed with the UPX executable packer http://upx.sf.net $
$Id: UPX 5.12 Copyright (C) 1996-2026 the UPX Team. All Rights Reserved. $
=== VPX packed binary ===
$ strings packed | grep -i upx
(nothing)
GPLv2+. See COPYING and LICENSE.
Based on UPX by Markus Oberhumer, Laszlo Molnar & John Reiser.