← retour aux outils back to tools

# 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.io

## Overview

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

1. Identify if a sample is UPX-packed

    upx -l suspicious.exe

2. 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 break `upx -d` force analysts into manual unpacking.
- Not all formats/architectures are supported — check `upx --help` output 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 casser `upx -d` forcent les analystes à un dépackage manuel.
- Tous les formats/architectures ne sont pas supportés : vérifier la sortie de `upx --help` pour 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.