¿Hay algún inconveniente en usar UPX para comprimir un ejecutable de Windows?

votos
34

He usado UPX antes para reducir el tamaño de mis ejecutables de Windows, pero debo admitir que soy ingenuo ante cualquier efecto secundario negativo que pueda tener. ¿Cuál es la desventaja de todo este embalaje / desembalaje?

¿Hay escenarios en los que alguien recomiende NO UPX-ing de un ejecutable (por ejemplo, al escribir un archivo DLL, servicio de Windows o cuando se dirige a Vista o Win7)? Escribo la mayor parte de mi código en Delphi, pero también he usado UPX para comprimir ejecutables C / C ++.

En una nota lateral, estoy no correr UPX en un intento de proteger a mi exe de desensambladores, sólo para reducir el tamaño del ejecutable y evitar su alteración superficial.

Publicado el 09/12/2008 a las 18:53
fuente por usuario
En otros idiomas...                            


12 respuestas

votos
45

La razón es que hay desventajas al uso de compresores EXE. Más destacado:

Tras el inicio de un archivo EXE / DLL comprimido, todo el código se descomprime de la imagen de disco en memoria en una pasada, lo que puede causar agitación del disco si el sistema tiene poca memoria y se ve forzado a acceder al archivo de intercambio. Por el contrario, con EXE / DLL sin comprimir, el sistema operativo asigna memoria para páginas de códigos bajo demanda (es decir, cuando se ejecutan).

Múltiples instancias de un EXE / DLL comprimido crean múltiples instancias del código en la memoria. Si tiene un EXE comprimido que contiene 1 MB de código (antes de la compresión) y el usuario inicia 5 instancias del mismo, se desperdicia aproximadamente 4 MB de memoria. Del mismo modo, si tiene una DLL que es de 1 MB y es utilizada por 5 aplicaciones en ejecución, se desperdicia aproximadamente 4 MB de memoria. Con EXE / DLL sin comprimir, el código solo se almacena en la memoria una vez y se comparte entre las instancias.

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

Respondida el 09/12/2008 a las 19:11
fuente por usuario

votos
18

Me sorprende que esto no se haya mencionado aún, pero el uso de ejecutables repletos de UPX también aumenta el riesgo de producir falsos positivos del software antivirus heurístico porque, estadísticamente, muchos programas maliciosos también usan UPX.

Respondida el 10/12/2008 a las 11:04
fuente por usuario

votos
12

Hay tres inconvenientes:

  1. Todo el código estará completamente descomprimido en la memoria virtual, mientras que en un archivo EXE o DLL normal, solo el código realmente utilizado se carga en la memoria. Esto es especialmente relevante si solo se usa una pequeña porción del código en su EXE / DLL en cada ejecución.
  2. Si hay varias instancias de ejecución de DLL y EXE, su código no se puede compartir entre las instancias, por lo que utilizará más memoria.
  3. Si su EXE / DLL ya está en caché, o en un medio de almacenamiento muy rápido, o si la CPU que está ejecutando es lenta, experimentará una velocidad de inicio reducida ya que la descompresión tendrá que tener lugar, y no lo hará se beneficia del tamaño reducido. Esto es especialmente cierto para un EXE que se invocará varias veces repetidamente.

Por lo tanto, los inconvenientes anteriores son más un problema si su EXE o DLL contiene muchos recursos, pero de lo contrario, pueden no ser un factor importante en la práctica, dado el tamaño relativo de los ejecutables y la memoria disponible, a menos que esté hablando de archivos DLL utilizado por muchos ejecutables (como DLL de sistema).

Para disipar información incorrecta en otras respuestas:

  • UPX no afectará su capacidad para ejecutar en máquinas protegidas por DEP.
  • UPX no afectará la capacidad del software antivirus principal, ya que son compatibles con ejecutables UPX comprimidos (así como con otros formatos de compresión ejecutables).
  • UPX ha podido usar la compresión LZMA desde hace un tiempo (algoritmo de compresión 7zip), usa el interruptor --lzma.
Respondida el 11/12/2008 a las 14:22
fuente por usuario

votos
9

El único momento importante es el tamaño durante la descarga de Internet. Si está usando UPX, en realidad obtiene un rendimiento peor que si usa 7-zip (basado en mi prueba, 7-Zip es dos veces mejor que UPX). Luego, cuando se deja comprimido en la computadora de destino, su rendimiento disminuye (consulte la respuesta de Lars). Entonces, UPX no es una buena solución para el tamaño del archivo. Solo 7zip todo el asunto.

En cuanto a prevenir la manipulación, también es un FALLO . UPX también admite la descompresión. Si alguien quiere modificar el EXE, verá que se comprime con UPX y luego lo descomprime. El porcentaje de posibles crackers que puede ralentizar no justifica el esfuerzo y la pérdida de rendimiento.

Una mejor solución sería usar la firma binaria o al menos solo un hash. Un sistema simple de verificación de hash consiste en tomar un hash de su código binario y un valor secreto (generalmente un guid). Solo su EXE conoce el valor secreto, por lo que cuando vuelve a calcular el hash para la verificación, puede volver a usarlo. Esto no es perfecto (se puede recuperar el valor secreto). La situación ideal sería usar un certificado y una firma.

Respondida el 09/12/2008 a las 19:39
fuente por usuario

votos
4

El tamaño final del ejecutable en el disco es en gran medida irrelevante en estos días. Su programa puede cargar unos milisegundos más rápido, pero una vez que comienza a funcionar, la diferencia es indistinguible.

Algunas personas pueden ser más sospechosas de su ejecutable simplemente porque está comprimido con UPX. Dependiendo de sus usuarios finales, esto puede o no ser una consideración importante.

Respondida el 09/12/2008 a las 19:05
fuente por usuario

votos
2

Si su único interés es disminuir el tamaño de los archivos ejecutables, ¿ha intentado comparar el tamaño del ejecutable con y sin paquetes de tiempo de ejecución? De acuerdo, también deberá incluir los tamaños de los paquetes en general junto con su ejecutable, pero si tiene varios archivos ejecutables que usan los mismos paquetes base, entonces sus ahorros serían bastante altos.

Otra cosa a considerar serían los gráficos / glifos que usa en su programa. Puede ahorrar bastante espacio al consolidarlos en una única lista de Timage incluida en un módulo de datos global en lugar de repetirlos en cada formulario. Creo que cada imagen se almacena en el recurso de forma como hexadecimal, lo que significa que cada byte ocupa dos bytes ... puede reducirlo un poco cargando la imagen de un recurso RCData utilizando un TResourceStream.

Respondida el 09/12/2008 a las 22:32
fuente por usuario

votos
2

La última vez que traté de usarlo en un ensamblado administrado, lo dañó tanto que el tiempo de ejecución se negó a cargarlo. Es el único momento en el que puedo pensar que no querrías usarlo (y, en realidad, ha pasado tanto tiempo desde que lo intenté que la situación puede ser incluso mejor ahora). Lo he usado extensamente en el pasado en todo tipo de binarios no administrados, y nunca tuve un problema.

Respondida el 09/12/2008 a las 19:00
fuente por usuario

votos
1

No hay inconvenientes.

Pero lo digo, hay un error muy común en relación con UPX como-

los recursos no son sólo están comprimiendo

Esencialmente, usted está construyendo una nueva ejecutable que tiene un "cargador" deber y el ejecutable "real", así, está siendo sección despojado y comprimido, colocado como un recurso de datos binarios del ejecutable cargador (sin tener en cuenta los tipos de recursos se encontraban en el ejecutable original).

El uso de métodos de ingeniería inversa y herramientas , ya sea con fines educativos o de otro le mostrará la información sobre el "ejecutable cargador", y no de información variable en relación con el ejecutable original.

ejecutable comprimido mediante UPX

ejecutable comprimido por UPX

Respondida el 21/10/2015 a las 15:24
fuente por usuario

votos
1

La razón UPX tiene tantas falsas alarmas es debido a que su licenciamiento abierto permite a los autores de malware para utilizar y modificar con impunidad. Por supuesto, este problema es inherente a la industria, pero por desgracia el gran proyecto UPX está plagada de este problema.

ACTUALIZACIÓN: Tenga en cuenta que a medida que se complete el proyecto señalizador, la capacidad de utilizar UPX (o cualquier otra cosa) sin causar falsos positivos se verá reforzada, asumiendo UPX lo soporta.

Respondida el 26/09/2010 a las 17:34
fuente por usuario

votos
1

Los escáneres de virus que buscan virus "desconocidos" pueden indicar que los ejecutables comprimidos UPX tienen un virus. Me han dicho que esto se debe a que varios virus usan UPX para ocultarse. He usado UPX en el software y McAfee marcará que el archivo tiene un virus.

Respondida el 02/05/2009 a las 01:47
fuente por usuario

votos
1

En mi humilde opinión, UPXing no tiene sentido, pero las razones se deletrearon anteriormente, en su mayoría, la memoria es más costosa que el disco.

Erik: el tope LZMA podría ser más grande. Incluso si el algoritmo es mejor, no siempre es una ventaja neta.

Respondida el 25/04/2009 a las 23:32
fuente por usuario

votos
0

Creo que existe la posibilidad de que no funcione en las computadoras que tienen DEP (Prevención de ejecución de datos) activada.

Respondida el 09/12/2008 a las 19:48
fuente por usuario

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