La compresión de ejecutables es cualquier medio de comprimir un archivo ejecutable y combinar los datos comprimidos con el código de descompresión en un único ejecutable. Cuando se ejecuta este ejecutable comprimido, el código de descompresión recrea el código original a partir del código comprimido antes de ejecutarlo. En la mayoría de los casos, esto sucede de forma transparente, por lo que el ejecutable comprimido se puede utilizar exactamente de la misma manera que el original. Los compresores de ejecutables a menudo se denominan empaquetadores de ejecutables , empaquetadores de tiempo de ejecución , empaquetadores de software , protectores de software o incluso " empaquetadores polimórficos " y " herramientas de ofuscación ".
Un ejecutable comprimido puede considerarse un archivo autoextraíble , en el que se incluye un ejecutable comprimido junto con el código de descompresión correspondiente en un archivo ejecutable. Algunos ejecutables comprimidos pueden descomprimirse para reconstruir el archivo de programa original sin ejecutarse directamente. Dos programas que pueden utilizarse para hacer esto son CUP386 y UNP. [ cita requerida ]
La mayoría de los ejecutables comprimidos descomprimen el código original en la memoria y requieren un poco más de memoria para ejecutarse (porque necesitan almacenar el código del descompresor, los datos comprimidos y el código descomprimido). Además, algunos ejecutables comprimidos tienen requisitos adicionales, como los que requieren escribir el ejecutable descomprimido en el sistema de archivos antes de ejecutarlo.
La compresión de archivos ejecutables no se limita a los archivos ejecutables binarios, sino que también se puede aplicar a scripts, como JavaScript . Debido a que la mayoría de los lenguajes de scripting están diseñados para funcionar con código legible por humanos , que tiene una alta redundancia , la compresión puede ser muy efectiva y tan simple como reemplazar los nombres largos utilizados para identificar variables y funciones con versiones más cortas y/o eliminar los espacios en blanco .
Los distribuidores de software utilizan la compresión de archivos ejecutables por diversas razones, principalmente para reducir los requisitos de almacenamiento secundario de su software; como los compresores de archivos ejecutables están diseñados específicamente para comprimir código ejecutable, a menudo logran una mejor relación de compresión que las herramientas de compresión de datos estándar como gzip , zip o bzip2 [ cita requerida ] . Esto permite a los distribuidores de software mantenerse dentro de las limitaciones de su medio de distribución elegido (como CD-ROM , DVD-ROM o disquete ) o reducir el tiempo y el ancho de banda que requieren los clientes para acceder al software distribuido a través de Internet .
La compresión de ejecutables también se utiliza con frecuencia para impedir la ingeniería inversa o para ofuscar el contenido del ejecutable (por ejemplo, para ocultar la presencia de malware a los escáneres antivirus ) mediante métodos propietarios de compresión y/o cifrado adicional . La compresión de ejecutables se puede utilizar para evitar el desensamblado directo , enmascarar literales de cadena y modificar firmas. Aunque esto no elimina la posibilidad de ingeniería inversa, puede hacer que el proceso sea más costoso.
Un ejecutable comprimido requiere menos espacio de almacenamiento en el sistema de archivos, por lo que se necesita menos tiempo para transferir los datos desde el sistema de archivos a la memoria. Por otro lado, se necesita algo de tiempo para descomprimir los datos antes de que comience la ejecución. Sin embargo, la velocidad de los distintos medios de almacenamiento no ha seguido el ritmo de las velocidades promedio de los procesadores, por lo que el almacenamiento es muy a menudo el cuello de botella. Por lo tanto, el ejecutable comprimido se cargará más rápido en la mayoría de los sistemas comunes. En las computadoras de escritorio modernas, esto rara vez se nota a menos que el ejecutable sea inusualmente grande, por lo que la velocidad de carga no es una razón principal a favor o en contra de la compresión de un ejecutable.
En los sistemas operativos que paginan imágenes ejecutables a pedido desde el disco, los ejecutables comprimidos hacen que este proceso sea menos eficiente. El stub del descompresor asigna un bloque de memoria para almacenar los datos descomprimidos, que permanece asignado mientras el ejecutable permanezca cargado, ya sea que se use o no, compitiendo por los recursos de memoria con otras aplicaciones todo el tiempo. Si el sistema operativo usa un archivo de intercambio, los datos descomprimidos deben escribirse en él para liberar la memoria en lugar de simplemente descartar bloques de datos no utilizados y volver a cargarlos desde la imagen ejecutable si es necesario nuevamente. Esto generalmente no se nota, pero se convierte en un problema cuando un ejecutable se carga más de una vez al mismo tiempo: el sistema operativo no puede reutilizar los bloques de datos que ya ha cargado, los datos deben descomprimirse en un nuevo bloque de memoria y se intercambiarán de forma independiente si no se usan. Los requisitos adicionales de almacenamiento y tiempo significan que debe evaluarse cuidadosamente si se deben comprimir los ejecutables que generalmente se ejecutan más de una vez al mismo tiempo.
Otra desventaja es que algunas utilidades ya no pueden identificar las dependencias de la biblioteca en tiempo de ejecución , ya que solo es visible el fragmento de extractor vinculado estáticamente .
Además, algunos escáneres de virus antiguos simplemente informan que todos los ejecutables comprimidos son virus porque los fragmentos de código del descompresor comparten algunas características con ellos. La mayoría de los escáneres de virus modernos pueden descomprimir varias capas de compresión de ejecutables diferentes para verificar el ejecutable real que contienen, pero algunos escáneres antivirus y antimalware populares han tenido problemas con falsas alarmas positivas en ejecutables comprimidos. En un intento por resolver el problema del malware ofuscado con la ayuda de empaquetadores de tiempo de ejecución , el IEEE Industry Connections Security Group ha presentado un sistema de etiquetado de software .
La compresión de ejecutables solía ser más popular cuando las computadoras estaban limitadas a la capacidad de almacenamiento de los disquetes , que eran medios lentos y de baja capacidad, y los discos duros pequeños ; permitía a la computadora almacenar más software en la misma cantidad de espacio, sin el inconveniente de tener que descomprimir manualmente un archivo cada vez que el usuario quería usar el software. Sin embargo, la compresión de ejecutables se ha vuelto menos popular debido al aumento de la capacidad de almacenamiento en las computadoras. Tiene su uso en la escena de demostraciones donde las demostraciones deben mantenerse dentro de un límite de tamaño, por ejemplo, 64k intro . Solo los formatos de compresión muy sofisticados, que aumentan el tiempo de carga, mantienen un ejecutable lo suficientemente pequeño como para participar en estas competiciones.
Compresores ejecutables conocidos para archivos .COM CP/M-80 / MSX-DOS :
Compresores ejecutables conocidos para archivos ejecutables compatibles con MS-DOS ( .COM o .EXE ):
Compresores ejecutables conocidos en OS/2 :
Compresores ejecutables conocidos para nuevos ejecutables :
Compresores ejecutables conocidos para ejecutables portátiles :
Nota: Los clientes en morado ya no están en desarrollo.
Compresores ejecutables conocidos para archivos ELF :
Compresores ejecutables conocidos para archivos de ensamblaje CLI :
Compresores ejecutables para aplicaciones de Mac OS Classic :
Compresores ejecutables conocidos para archivos Mach-O (Apple Mac OS X):
Compresores ejecutables conocidos para ejecutables en Commodore 64 y VIC-20 :
Compresores ejecutables conocidos para ejecutables de la serie Amiga :
Compresores ejecutables conocidos para Java :
Archivos JAR :
Archivos WAR :
Hay dos tipos de compresión que se pueden aplicar a los scripts de JavaScript :
Estos comprimen el script original y generan un nuevo script que tiene un descompresor y datos comprimidos.
Estos eliminan espacios en blanco, eliminan comentarios y acortan los nombres de variables y funciones, pero no alteran el comportamiento del script.
[…] PMEXE.CPM […] es un módulo […] en combinación con PMARC […] utilizado para crear archivos COM comprimidos ejecutables (como LZEXE o PKLITE […] tipo: PMARC <archivo>.COM=PMEXE2.CPM <nombre de archivo> [opciones] El nombre del archivo debe ser .COM […] no .PMA. El archivo de salida tendrá la extensión .CPM. Es un archivo COM MSX-DOS […] renombrar archivo […] para ejecutarlo […]
[…] SPACEMAKER y TERMULATOR, software comercial para IBM PC (
utilidad de compresión de archivos
PC DOS y emulador
VT-100
), comercializado por Realia, Inc.
RBK Dewar
(1982-1983), lenguaje ensamblador 8088, 8000 líneas […]
[…] La opción /E del enlazador debería generar un archivo EXE que sea lógicamente equivalente al archivo EXE sin comprimir. La versión actual […] hace que AX sea superado. AX al ingresar a un archivo EXE tiene un significado definido (indica la validez de la unidad para los parámetros), por lo tanto, debería pasarse a la imagen sin comprimir. Dada esta violación muy obvia de las reglas de la interfaz, puede haber otras, no me he molestado en investigar más […] Escribí el programa Realia SpaceMaker que hace algo similar a la opción EXEPACK (pero no hace falta decir que no tiene esta […]
[Miles:] Existe un cambio no documentado […] a
Microsoft
LINK.EXE […], que provocará una compactación automática durante la vinculación. Este proceso eliminará el almacenamiento de matrices no inicializadas del archivo .EXE producido por el enlazador […] Para usar esta función, especifique la opción /E en la línea de comandos […] [Nather:] La opción no existe en las versiones 3.00 y 3.01 de MS Link [Miles:] Al comparar los tamaños de los archivos (comprimidos) generados a partir de LINK ver 3.02 y la opción /E con el tamaño del archivo .EXE comprimido manualmente con […] EXEPACK, he llegado a la conclusión de que la opción /E de LINK ver 3.02 genera EXACTAMENTE el mismo tamaño de archivo que ejecutar EXEPACK manualmente en un archivo .EXE normal generado por LINK […]
[…] > ningún empaquetador puede empaquetar combinaciones como .SYS+.COM o .SYS+.EXE. […] Hay empaquetadores para .COM o .EXE y otros para .SYS, pero yo tampoco he visto un empaquetador que admita
ambos en un solo
. […] posibilidad de
combinar un programa/TSR y un controlador de dispositivo
en archivos .EXE […] y un programa/TSR.COM y un controlador de dispositivo en un programa .COM […] También podría ser posible agregar otro stub hecho por uno mismo al archivo, después de que ya haya sido comprimido […] todos los controladores de dispositivos
DR-DOS
comprimidos usan una técnica similar para permitir que el descompresor .COM PKLITE normal funcione con archivos .SYS (mientras tanto, PKLITE admite una característica similar para los archivos .SYS). […](NB. PKLITE 1.50 (1995) y versiones posteriores adquirieron la capacidad de comprimir controladores de dispositivos, pero no controladores COM+SYS combinados).
{{cite web}}
: CS1 maint: archived copy as title (link)