UPX
UPX is a free and open source executable packer supporting a number of file formats from different operating systems.
Compression
UPX uses a data compression algorithm called UCL, which is an open-source implementation of portions of the proprietary NRV algorithm.UCL has been designed to be simple enough that a decompressor can be implemented in just a few hundred bytes of code. UCL requires no additional memory to be allocated for decompression, a considerable advantage that means that a UPX packed executable usually requires no additional memory.
UPX can use LZMA on most platforms; however, this is disabled by default for 16-bit due to slow decompression speed on older computers.
Starting with version 3.91, UPX also supports 64-Bit PE files on the Windows platform. This feature is currently declared as experimental.
Decompression
UPX supports two mechanisms for decompression: an in-place technique and extraction to temporary file.The in-place technique, which decompresses the executable into memory, is not possible on all supported platforms. It has the advantage of being more efficient in terms of memory, and that the environment set up by the OS remains correct.
The rest uses extraction to temporary file. This procedure involves additional overhead and other disadvantages; however, it allows any executable file format to be packed. The extraction to temporary file method has several disadvantages:
- Special permissions are ignored, such as suid.
Command line interface#Anatomy of a shell CLI|argvwill not be meaningful. - Multiple running instances of the executable are unable to share common segments.
Supported formats
UPX supports the following formats:- Portable Executable :
- *ARM
- * 32-bit x86
- * 64-bit x86-64
- * RTM32
- COFF executables, used by DJGPP2
- a.out format, BSD i386
- Raw 8086/DOS files:
- * DOS/COM
- * DOS/EXE
- * DOS/SYS
- Watcom/LE
- TMT/adam
- Atari/TOS
- Linux kernel, i386, x86-64 and ARM
- Linux Executable and Linkable Format, i386, x86-64, ARM, PowerPC, MIPS
- PlayStation 1/EXE
- Darwin Mach-O, ppc32, i386, and x86-64