UPX - UPX
lançamento inicial | 26 de maio de 1998 |
---|---|
Versão estável | 3,96 / 23 de janeiro de 2020
|
Repositório | |
Escrito em | C ++ , montagem |
Sistema operacional | Microsoft Windows , Linux , macOS , DOS , Atari TOS |
Plataforma | i386 , MIPS , AMD64 , ARM , PowerPC , m68k |
Disponível em | Inglês |
Tipo | Compressão executável |
Licença | GPL com exceção para executáveis compactados, proprietário para algoritmo de compactação em distribuições binárias |
Local na rede Internet | upx |
UPX ( Ultimate Packer for Executables ) é um compactador executável de código aberto que suporta vários formatos de arquivo de diferentes sistemas operacionais.
Compressão
O UPX usa um algoritmo de compactação de dados chamado UCL, que é uma implementação de código aberto de partes do algoritmo proprietário NRV ( Not Really Vanished ).
O UCL foi projetado para ser simples o suficiente para que um descompressor possa ser implementado em apenas algumas centenas de bytes de código. UCL não requer memória adicional a ser alocada para descompactação, uma vantagem considerável que significa que um executável compactado UPX geralmente não requer memória adicional.
UPX (desde 2.90 beta) pode usar LZMA na maioria das plataformas; entretanto, isso é desabilitado por padrão para 16 bits devido à baixa velocidade de descompressão em computadores mais antigos (use --lzma
para forçá-lo).
A partir da versão 3.91, o UPX também oferece suporte a arquivos executáveis de 64 bits (x64) na plataforma Windows . Este recurso está atualmente declarado como experimental .
Descompressão
O UPX suporta dois mecanismos de descompactação: uma técnica local e extração para arquivo temporário .
A técnica local, que descompacta o executável na memória, não é possível em todas as plataformas suportadas. Tem a vantagem de ser mais eficiente em termos de memória, e que o ambiente configurado pelo SO permanece correto.
O resto usa a extração para arquivo temporário. Este procedimento envolve sobrecarga adicional e outras desvantagens; entretanto, permite que qualquer formato de arquivo executável seja compactado. O método de extração para arquivo temporário tem várias desvantagens:
- Permissões especiais são ignoradas, como suid .
-
argv[0]
não será significativo. - Várias instâncias em execução do executável são incapazes de compartilhar segmentos comuns.
A embalagem UPX não modificada é freqüentemente detectada e descompactada por scanners de software antivírus . O UPX também possui um recurso integrado para descompactar executáveis não modificados compactados com ele mesmo.
Formatos suportados
UPX suporta os seguintes formatos:
- Executável portátil ( arquivos PE, EXE e DLL ):
- Executáveis COFF , usados por DJGPP2
- formato a.out , BSD i386 (removido)
- Arquivos 8086 / DOS simples:
- Watcom / LE (usado por DOS4G , PMODE / W , DOS32A e CauseWay )
- TMT / adam (conforme gerado pelo compilador TMT Pascal)
- Atari / TOS
- Kernel Linux , i386, x86-64 e ARM
- Linux Executable and Linkable Format , i386, x86-64 , ARM , PowerPC , MIPS
- PlayStation 1 / EXE (MIPS R3000)
- Darwin Mach-O , ppc32, i386 e x86-64
Atualmente, o UPX não oferece suporte a arquivos PE contendo código CIL destinado a ser executado no .NET Framework .