Compresores de ejecutables

Desde joven que me entusiasma la informática. Especialmente admiro los compresores y los antivirus. La idea de comprimir no es nueva en absoluto. Recuerdo ya en los tiempos del Spectrum utilizar RLE… Pero es un mercado que ha evolucionado tremendamente rápido.

Probablemente una de las cosas que más me sorprendió fue descubrir los compresores de EXEs.

Todo empezó hace más de 15 años, Fabrice Bellard, un por aquel entonces estudiante de informática francés, crea un programa llamado LZEXE.

LZEXE era lo que después se englobó en la categoría genérica de compresores de ejecutables. A diferencia de los compresores tradicionales, LZEXE no requería expandir el archivo antes de ejecutarlo, sino que incluía un pequeño descompresor, que descomprimía el contenido directamente en memoria, y lo ejecutaba.

Es cierto que lo que hacía LZEXE, ya existía en el enlazador de Microsoft, y como utilidad separada llamada EXEPACK. Pero su relación de compresión era irrisoria.

La operativa de LZEXE no tenía nada que ver con los compresores que podían crear archivos autoextraíbles (SFX). Éstos descomprimían a disco los archivos, mientras que LZEXE lo hacía directamente.

De esta forma, los programas quedaban reducidos de tamaño, y hacía que en ocasiones, cargaran más rápido. Al mismo tiempo que se dificultaba su posterior manipulación por ingeniería inversa. Para el usuario final, todo ocurría de forma transparente.

PKWare adoptó la idea en su PKLite, que ofrecía un ratio de compresión similar a los archivos .ZIP, y su uso se extendió a multitud de software, fuera éste comercial o no. La ristra de herramientas no paró de crecer: Diet, Megalite, UCEXE, Pro-Pack, XPack, AXE, AINEXE, EXELite, Tinyprog, LGLZ, Optilink… A los que luego se les unieron descompresores, identificadores, modificadores, …

Luego llegaron WWPack, y finalmente UPX, que además de excelentes grados de compresión, era gratuito y soportaba diferentes tipos de ejecutables.

Una vez el entorno Windows se popularizó, las cosas siguieron evolucionando a gran velocidad, quedando el antiguo UPX relegado del liderazgo. ASPack primero, luego PECompact, posteriormente nSpack, y por último UPack, fueron poco a poco mejorando los procesos de compresión, para reducir más si cabe, el tamaño de archivo resultante.

En cualquier caso, con el progresivo incremento del espacio disponible en disco, la utilidad de estas herramientas es hoy en día marginal. Se utilizan actualmente para necesidades de ahorro de espacio muy concretas (sistemas embedidos, stubs, …). El nivel de protección anti-hacking que ofrecen, es mejor que el del ejecutable plano, pero queda lejos de productos específicos (Armadillo, ASProtect, …). Como contrapartida, suelen dar algún que otro programa con antivirus mal programados (lentitud al escanearlos, falsos positivos, …).

Personalmente sigo usando UPX para lidiar con aplicaciones DOS; PKLite para Win16; y nSpack o UPack para Win32.

Ya podemos vislumbrar la evolución a medio plazo: Soporte de ejecutables de 64 bits, compresión .NET, mayores relaciones de compresión, …



5 comentarios en “Compresores de ejecutables”

  1. Guti,

    En tu artículo echo en falta el famoso ARJ que si no me falla la memoria su autor era Robert K. Jung.
    Este compresor para MS-DOS tenía montones y montones de opciones, bastaba hacer un arj /? para ver la impresionante lista.
    Creo que llegó a existir para Windows pero en esa época el ZIP ya dominaba el escenario de compresores.
    En alguna ocasión, por allá el año 94 llegué a hacer alguna que otra prueba para comparar el ARJ con el ZIP (aquellos pkzip y pkunzip… ¡qué tiempos!) y normalmente salía ganando el ARJ (creo recordar que si había muchos archivos de texto era mejor el ZIP) aunque en cualquier caso la diferencia de compresión era mínima.
    Recuerdo también que ARJ tenía un parámetro para reparar el archivo lo que te permitía recuperar la mayoría de los archivos comprimidos.

  2. Hola endy,

    El artículo se centra en compresores de ejecutables, por lo que de momento ARJ no entra en esta lista. Pero no desesperes, ya he empezado a escribir un artículo sobre la evolución de la compresión de archivos en general. En cuanto esté finalizado lo publicaré.

    En efecto hay un ARJ para Windows, llamado ARJ32, pero con pocas novedades respecto a la versión para DOS que comentas

  3. Muy bueno el post. Yo me quede en el UPX

    Y sobre lo que comenta endy… madre mia!!, mi bonito arj (¿has "aerrejoteado" el fichero?), tambien habia un tal ain que tenia unos ratios pelin mejores pero estaba muy extendido

Deja un comentario