UPX (Ultimate Packer for eXecutables)
Compresse et packe des exécutables ; couramment utilisé, et détourné, pour obfusquer des payloads et échapper à la détection AV basée sur signatures statiques. Compresses and packs executables; commonly used, and abused, to obfuscate payloads and evade static signature-based AV detection.
↗ https://upx.github.ioOverview
UPX is a legitimate executable packer/compressor supporting a wide range of formats (PE, ELF, Mach-O, and more). Legitimately it just shrinks binary size, but on the offensive side packing a payload with UPX (often combined with further obfuscation or a custom stub) changes its byte signature enough to slip past naive static AV/EDR detection that hasn’t specifically fingerprinted the packed form. On the defensive side, reversers use upx -d to unpack samples before static analysis.
Common Usage
Compress a binary in place (default settings)
upx payload.exe
Best compression ratio (slower)
upx --best payload.exe
Maximum compression, ultra-brute (very slow, smallest output)
upx --ultra-brute payload.exe
Decompress/unpack a UPX-packed binary
upx -d packed.exe
List info about a packed file without modifying it
upx -l packed.exe
Keep a backup of the original before packing
upx -k payload.exe
Evasion Context
Pack a payload to alter its static signature
upx --best -o payload_packed.exe payload.exe
# Note: many EDR/AV engines specifically fingerprint the UPX stub itself,
# so packing alone is rarely sufficient — often combined with a custom
# packer/crypter or UPX stub modification for real evasion testing
Reversing/Malware Analysis Workflow
- Identify if a sample is UPX-packed
upx -l suspicious.exe
- Attempt standard unpacking
upx -d suspicious.exe -o unpacked.exe
# 3. If UPX's own unpacker fails (modified stub), fall back to
# manual unpacking in a debugger (dump at OEP)
Tips
- UPX’s magic bytes/section names (
UPX0,UPX1) are a well-known IOC — many AV engines flag “packed with UPX” outright regardless of payload. -d(decompress) only works on unmodified UPX stubs; attackers who patch the stub to breakupx -dforce analysts into manual unpacking.- Not all formats/architectures are supported — check
upx --helpoutput for your target’s format before relying on it.
Help / Man page
Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..
Commands:
-1 compress faster -9 compress better
--best compress best (can be slow) --ultra-brute try all methods & filters
-d decompress
-l list compressed file
-t test compressed file
-V display version number
-h give this help
-L display software license
Options:
-q be quiet -v be verbose
-o FILE write output to FILE
-f, --force force compression / overwrite
-k, --backup keep backup of the original file
--no-backup no backup files
This version supports: dos/exe, win32/pe, linux/elf386, macho/x86,
macho/arm64, atari/tos, and more.
Vue d’ensemble
UPX est un packer/compresseur d’exécutables légitime supportant un large éventail de formats (PE, ELF, Mach-O, et plus). De manière légitime, il réduit simplement la taille des binaires, mais côté offensif, packer un payload avec UPX (souvent combiné à davantage d’obfuscation ou un stub personnalisé) modifie suffisamment sa signature d’octets pour passer sous le radar d’une détection AV/EDR statique naïve qui n’a pas spécifiquement fingerprinté la forme packée. Côté défensif, les reversers utilisent upx -d pour dépacker des échantillons avant analyse statique.
Utilisation courante
# Compresser un binaire sur place (paramètres par défaut)
upx payload.exe
# Meilleur taux de compression (plus lent)
upx --best payload.exe
# Compression maximale, ultra-brute (très lent, sortie la plus petite)
upx --ultra-brute payload.exe
# Décompresser/dépacker un binaire packé avec UPX
upx -d packed.exe
# Lister les infos d'un fichier packé sans le modifier
upx -l packed.exe
# Garder une sauvegarde de l'original avant de packer
upx -k payload.exe
Contexte d’évasion
# Packer un payload pour altérer sa signature statique
upx --best -o payload_packed.exe payload.exe
# Note : de nombreux moteurs EDR/AV fingerprintent spécifiquement le stub UPX lui-même,
# donc le packing seul est rarement suffisant : souvent combiné à un
# packer/crypter personnalisé ou à une modification du stub UPX pour un vrai test d'évasion
Workflow de reversing/analyse de malware
# 1. Identifier si un échantillon est packé avec UPX
upx -l suspicious.exe
# 2. Tenter le dépackage standard
upx -d suspicious.exe -o unpacked.exe
# 3. Si le propre dépackeur d'UPX échoue (stub modifié), passer à
# un dépackage manuel dans un débogueur (dump à l'OEP)
Conseils
- Les magic bytes/noms de section d’UPX (
UPX0,UPX1) sont un IOC bien connu : de nombreux moteurs AV signalent “packé avec UPX” purement et simplement, quel que soit le payload. -d(décompression) ne fonctionne que sur des stubs UPX non modifiés ; les attaquants qui patchent le stub pour casserupx -dforcent les analystes à un dépackage manuel.- Tous les formats/architectures ne sont pas supportés : vérifier la sortie de
upx --helppour le format de votre cible avant de s’y fier.
Aide / Page de manuel
Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..
Commands:
-1 compress faster -9 compress better
--best compress best (can be slow) --ultra-brute try all methods & filters
-d decompress
-l list compressed file
-t test compressed file
-V display version number
-h give this help
-L display software license
Options:
-q be quiet -v be verbose
-o FILE write output to FILE
-f, --force force compression / overwrite
-k, --backup keep backup of the original file
--no-backup no backup files
This version supports: dos/exe, win32/pe, linux/elf386, macho/x86,
macho/arm64, atari/tos, and more.