Ir al contenido principal

Empaquetar un ejecutable con UPX

 En este post pretendo compartirles un método para empaquetar un ejecutable reduciendo así lo más posible su tamaño en términos de comprensión, ahorrando espacio de almacenamiento ocupado por el mismo.

¿Que es un ejecutable?

En informática, un ejecutable o archivo ejecutable, es tradicionalmente un archivo binario, cuyo contenido se interpreta por el ordenador como un programa. En windows tipicamente suelen finalizar con la extensión ".exe o .com" y en linux si bien no tienen presente una extensión en particular se identifican por un atributo de permiso.
Empaquetamiento de ejecutables
El empaquetamiento de ejecutables es un proceso habitual que se realiza antes de lanzar a producción un ejecutable, este proceso permite desde cifrar, proteger y hasta comprimir el tamaño de nuestros ejecutables ejecutables.

https://es.wikipedia.org/wiki/Empaquetador_de_ejecutables

#UPX
UPX (Ultimate Packer for Executables) es empaquetador de ejecutables gratuito, portable y de alto rendimiento escrito en C++ y compatible con muchos tipos de ejecutables y sistemas operativos.

Como bien cita su sitio web:
UPX logra una excelente relación de compresión y ofrece una descompresión muy rápida . Sus ejecutables no sufren sobrecarga de memoria u otros inconvenientes para la mayoría de los formatos compatibles, debido a la descompresión in situ. Puntos fuertes de UPX en pocas palabras:

  • Excelente relación de compresión : normalmente se comprime mejor que WinZip / zip / gzip, use UPX para disminuir el tamaño de su distribución.
  • Descompresión muy rápida : ~ 10 MB / seg en un antiguo Pentium 133, ~ 200 MB / seg en un Athlon XP 2000+.
  • sin sobrecarga de memoria para sus ejecutables comprimidos debido a la descompresión en el lugar.
  • seguro : puede enumerar, probar y descomprimir sus ejecutables. Además, se mantiene internamente una suma de comprobación tanto del archivo comprimido como del descomprimido.
  • universal : UPX puede empaquetar varios formatos ejecutables.
  • portable : UPX está escrito en C ++ portable endian-neutral.
  • extensible : debido al diseño de la clase, es muy fácil agregar nuevos formatos ejecutables o nuevos algoritmos de compresión.
  • gratis : UPX se distribuye con el código fuente completo bajo la Licencia Pública General GNU v2 +, con excepciones especiales que otorgan el uso gratuito para programas comerciales como se establece en el Acuerdo de Licencia UPX .

Básicamente lo que hace UPX es aplicar una serie de algoritmos de compresión sobre nuestro ejecutable así consiguiendo reducir el espacio ocupado y sin alterar las propiedades ejecutables del mismo.

#Como empaquetar un ejecutable
A continuación una muestra del uso básico de la utilidad en Windows. En este caso tengo descargado y agregado a las variables de entorno el ejecutable UPX que se puede descargar desde el sitio oficial.

1)
Un ejecutable recién compilado con un peso estimado de 2,00MB en disco.

2)
upx dispone de varias opciones que podemos listas con el flag '-h', en este caso elegí el más potente (y lento) que probará con cada opción y erigirá la más optima para nuestro ejecutable.

3)
El proceso demorará un rato dependiendo el tamaño de nuestro ejecutable.

4)
Finalmente nuestro ejecutable quedará efectivamente empaquetado y habrá reducido su tamaño, en este caso de ocupar 2MB pasó a solamente 956KB! 

Como pueden apreciar es un proceso sencillo que nos puede brindar una ventaja a la hora de comprimir un ejecutable a cambio de descomprimirlo en el momento de su ejecución, concluyendo un sacrificio de CPU por espacio de disco pero ínfimo debido a la rapidez y efectividad que dispone UPX.

Espero que les haya servido! Saludos! :)