Existem quaisquer desvantagens de usar UPX para compactar um executável do Windows?

votos
34

Eu usei UPX antes para reduzir o tamanho dos meus executáveis do Windows, mas devo admitir que eu sou ingênuo a quaisquer efeitos colaterais negativos que isso poderia ter. Qual é a desvantagem de tudo isso embalagem / descompactação?

Existem cenários em que qualquer um recomendaria não UPX-ing um arquivo executável (por exemplo, ao escrever uma DLL, o Windows, ou quando o direcionamento Vista ou Win7)? Eu escrevo mais do meu código em Delphi, mas eu usei UPX para compactar arquivos executáveis ​​C / C ++ também.

Em uma nota lateral, eu estou não correr UPX, de alguma tentativa de proteger o meu exe de disassemblers, apenas para reduzir o tamanho do executável e evitar adulteração superficial.

Publicado 09/12/2008 em 18:53
fonte usuário
Em outras línguas...                            


12 respostas

votos
45

A razão é que existem desvantagens de usar compressores EXE. Mais notavelmente:

Na inicialização de um comprimido EXE / DLL, todo o código é descomprimido a partir da imagem de disco para a memória em uma única passagem, o que pode causar surra disco se o sistema está com pouca memória e é forçado a acessar o arquivo de swap. Em contraste, com descompactado EXE / DLLs, o sistema operacional aloca memória para páginas de código de encomenda (ou seja, quando são executadas).

Várias instâncias de um comprimido EXE / DLL criar várias instâncias do código na memória. Se você tem um EXE compactado que contém 1 MB de código (antes da compressão) eo usuário começa 5 instâncias dele, cerca de 4 MB de memória é desperdiçado. Da mesma forma, se você tem uma DLL que é de 1 MB e é usado por 5 aplicativos em execução, cerca de 4 MB de memória é desperdiçado. Com descompactado EXE / DLLs, o código só é armazenado na memória uma vez e é compartilhada entre instâncias.

http://www.jrsoftware.org/striprlc.php#execomp

Respondeu 09/12/2008 em 19:11
fonte usuário

votos
18

Estou surpreso este ainda não foi mencionado, mas usando executáveis ​​UPX-embalados também aumenta o risco de produzir resultados falso-positivos de software anti-vírus heurística porque estatisticamente um monte de malware também utiliza UPX.

Respondeu 10/12/2008 em 11:04
fonte usuário

votos
12

Há três inconvenientes:

  1. O código todo será totalmente descompactado na memória virtual, enquanto em um EXE regular ou DLL, apenas o código realmente usado é carregado na memória. Isto é especialmente relevante se apenas uma pequena parte do código em seu EXE / DLL é usado em cada corrida.
  2. Se houver várias instâncias do seu DLL e EXE em execução, seu código não podem ser compartilhados entre as instâncias, de modo que você vai usar mais memória.
  3. Se o seu EXE / DLL já está em cache, ou em um meio de armazenamento muito rápido, ou se a CPU está executando em é lento, você vai experimentar a velocidade de inicialização reduzido como descompressão ainda terá de ter lugar, e você não vai beneficiar do tamanho reduzido. Isto é especialmente verdadeiro para um EXE que será chamado várias vezes repetidamente.

Assim, os inconvenientes acima são mais de um problema se o seu EXE ou DLL contém grande quantidade de recursos, mas caso contrário, eles podem não ser muito de um fator na prática, dado o tamanho relativo dos executáveis ​​e memória disponível, a menos que você está falando de DLLs usado por muitos executáveis ​​(como o sistema DLLs).

Para desmentir algumas informações incorretas em outras respostas:

  • UPX não irá afectar a sua capacidade de rodar em máquinas protegidas-DEP.
  • UPX não vai afetar a capacidade dos principais softwares anti-vírus, como eles suportam executáveis ​​UPX-comprimido (bem como outros formatos de compressão de executáveis).
  • UPX tem sido capaz de utilizar a compressão LZMA já há algum tempo (algoritmo de compressão de 7zip), use a opção --lzma.
Respondeu 11/12/2008 em 14:22
fonte usuário

votos
9

As únicas matérias do tamanho de tempo é durante o download da Internet. Se você estiver usando UPX então você realmente piorar o desempenho do que se você usar o 7-zip (com base no meu teste 7-Zip é duas vezes melhor que UPX). Então, quando ele é realmente deixou comprimido no computador de destino o seu desempenho é reduzida (ver resposta Lars'). Então UPX não é uma boa solução para o tamanho do arquivo. Apenas 7zip a coisa toda.

Tão longe como para impedir a manipulação ilícita, é uma FALHA também. UPX suporta descompressão também. Se alguém quiser modificar o EXE, em seguida, eles vão ver que é comprimir com UPX e, em seguida, descompactá-lo. A percentagem de possíveis biscoitos que você pode abrandar não justifica a perda de esforço e desempenho.

Uma solução melhor seria usar assinatura binária ou pelo menos apenas um hash. Um sistema de verificação de hash simples é tomar um hash de seu binário e um valor secreta (geralmente um guid). Apenas o seu EXE sabe o valor secreto, por isso, quando ele recalcula o hash para verificação pode usá-lo novamente. Esta não é perfeito (o valor secreto pode ser recuperada). A situação ideal seria a utilização de um certificado e uma assinatura.

Respondeu 09/12/2008 em 19:39
fonte usuário

votos
4

O tamanho final do executável no disco é em grande parte irrelevante nos dias de hoje. Seu programa pode carregar alguns milissegundos mais rápido, mas uma vez que começa a correr a diferença é indistinguível.

Algumas pessoas podem ser mais desconfiado de seu executável só porque ele é compactado com UPX. Dependendo de seus usuários finais, este pode ou não ser uma consideração importante.

Respondeu 09/12/2008 em 19:05
fonte usuário

votos
2

Se o seu único interesse é diminuir o tamanho dos executáveis, então você já tentou comparar o tamanho do executável com e sem pacotes de tempo de execução? Concedido você terá que também incluem os tamanhos dos pacotes geral, juntamente com seu executável, mas se você tiver vários executáveis ​​que usam os mesmos pacotes base, em seguida, a sua poupança seria bastante elevado.

Outra coisa é olhar para seriam os gráficos / glifos que você usa em seu programa. Você pode economizar um pouco de espaço, consolidando-los para um único TImageList incluído em um módulo global de dados, em vez de tê-los repetido em cada formulário. Eu acredito que cada imagem é armazenada no recurso forma como hex, então isso significaria que cada byte ocupa dois bytes ... você pode reduzir isso um pouco por carregar a imagem de um recurso RCDATA usando um TResourceStream.

Respondeu 09/12/2008 em 22:32
fonte usuário

votos
2

A última vez que eu tentei usá-lo em um assembly gerenciado, ele munged-lo tão ruim que o tempo de execução recusou-se a carregá-lo. Essa é a única vez que eu posso pensar que você não iria querer usá-lo (e, realmente, tem sido assim por muito tempo desde que eu tentei isso que a situação pode até ser melhor agora). Eu usei-o extensivamente no passado em todos os tipos de binários não gerenciados, e nunca teve um problema.

Respondeu 09/12/2008 em 19:00
fonte usuário

votos
1

Não há desvantagens.

Mas apenas FYI, há um equívoco muito comum sobre UPX as--

recursos não são apenas sendo comprimido

Essencialmente, você está construindo um novo executável que tem um "loader" dever eo executável "real", bem, está sendo secção-despojado e compactado, colocado como um recurso-dados binários do executável loader (independentemente dos tipos de recursos estavam em o executável original).

Usando métodos reversa engenharia e ferramentas tanto para fins de educação ou outra irá mostrar-lhe as informações sobre o "executável loader", e não variável informações sobre o executável original.

executável descompactado por UPX

executável compactado por UPX

Respondeu 21/10/2015 em 18:24
fonte usuário

votos
1

A razão UPX tem tantos falsos alarmes é porque o seu licenciamento aberto permite que os autores de malware de usar e modificá-lo com impunidade. Naturalmente, esta questão é inerente à indústria, mas infelizmente o grande projeto UPX é atormentado por este problema.

UPDATE: Note que como o projeto taggant for concluída, a capacidade de usar UPX (ou qualquer outra coisa), sem causar falsos positivos será reforçada, assumindo UPX suporta.

Respondeu 26/09/2010 em 17:34
fonte usuário

votos
1

scanners de vírus que procuram vírus 'desconhecidos' pode flag UPX comprimido executáveis ​​como tendo um vírus. Foi-me dito isto é porque vários vírus usar UPX para se esconder. Eu usei UPX em software e McAfee irá marcar o arquivo como tendo um vírus.

Respondeu 02/05/2009 em 01:47
fonte usuário

votos
1

IMHO rotineiramente UPXing é inútil, mas as razões são explicitadas acima, principalmente, a memória é mais caro do que em disco.

Erik: o toco LZMA pode ser maior. Mesmo se o algoritmo é melhor, não ser sempre um plus net.

Respondeu 25/04/2009 em 23:32
fonte usuário

votos
0

Eu acredito que há uma possibilidade de que ele pode não funcionar em computadores que tenham DEP (Data Execution Prevention) ligado.

Respondeu 09/12/2008 em 19:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more