La compresión ejecutable 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 ocurre de forma transparente, por lo que el ejecutable comprimido se puede utilizar exactamente de la misma manera que el original. Los compresores ejecutables a menudo se denominan empaquetadores 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 , donde un ejecutable comprimido se empaqueta junto con el código de descompresión correspondiente en un archivo ejecutable. Algunos ejecutables comprimidos se pueden descomprimir para reconstruir el archivo de programa original sin ejecutarlos directamente. Dos programas que se pueden utilizar para hacer esto son CUP386 y UNP. [ cita necesaria ]
La mayoría de los ejecutables comprimidos descomprimen el código original en la memoria y la mayoría requiere 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 escriben el ejecutable descomprimido en el sistema de archivos antes de ejecutarlo.
La compresión ejecutable no se limita a ejecutables binarios, sino que también se puede aplicar a scripts, como JavaScript . Debido a que la mayoría de los lenguajes de secuencias de comandos 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 espacios en blanco .
Los distribuidores de software utilizan la compresión ejecutable por diversas razones, principalmente para reducir los requisitos de almacenamiento secundario de su software; Como los compresores ejecutables están diseñados específicamente para comprimir código ejecutable, a menudo logran una mejor relación de compresión que las instalaciones 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 los medios de distribución elegidos (como CD-ROM , DVD-ROM o disquete ), o reducir el tiempo y el ancho de banda que los clientes necesitan para acceder al software distribuido a través de Internet .
La compresión ejecutable también se utiliza con frecuencia para impedir la ingeniería inversa u ofuscar el contenido del ejecutable (por ejemplo, para ocultar la presencia de malware de los escáneres antivirus ) mediante métodos propietarios de compresión y/o cifrado añadido . La compresión ejecutable se puede utilizar para evitar el desensamblaje directo , enmascarar literales de cadenas y modificar firmas. Aunque esto no elimina la posibilidad de realizar ingeniería inversa, puede encarecer el proceso.
Un ejecutable comprimido requiere menos espacio de almacenamiento en el sistema de archivos y, por lo tanto, menos tiempo para transferir datos del 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 varios medios de almacenamiento no se ha mantenido a la altura de las velocidades promedio del procesador, por lo que el almacenamiento suele ser 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 comprimir 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 código auxiliar del descompresor asigna un bloque de memoria para contener 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 utiliza un archivo de intercambio, los datos descomprimidos deben escribirse en él para liberar la memoria en lugar de simplemente descartar los 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 bloques de datos que ya ha cargado, los datos deben descomprimirse en un nuevo bloque de memoria y Se puede cambiar de forma independiente si no se utiliza. Los requisitos adicionales de almacenamiento y tiempo significan que se debe sopesar cuidadosamente si se deben comprimir ejecutables que normalmente 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 código auxiliar del extractor vinculado estáticamente .
Además, algunos escáneres de virus más antiguos simplemente informan todos los ejecutables comprimidos como virus porque los códigos auxiliares 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 ejecutables diferentes para comprobar el ejecutable real que contiene, pero algunos escáneres antivirus y antimalware populares han tenido problemas con alarmas de falsos positivos en los ejecutables comprimidos. En un intento por resolver el problema del malware ofuscado con la ayuda de empaquetadores de tiempo de ejecución , IEEE Industry Connections Security Group ha introducido un sistema de etiquetado de software .
La compresión ejecutable solía ser más popular cuando las computadoras estaban limitadas a la capacidad de almacenamiento de los disquetes , que eran medios a la vez lentos y de baja capacidad, y discos duros pequeños ; permitió 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 ejecutable se ha vuelto menos popular debido al aumento de la capacidad de almacenamiento en las computadoras. Tiene su uso en la escena de demostración donde las demostraciones deben permanecer dentro de un límite de tamaño, por ejemplo, introducción de 64k . Sólo 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 bajo OS/2 :
Compresores ejecutables conocidos para nuevos ejecutables :
Compresores ejecutables conocidos para ejecutables portátiles :
Nota: Los clientes en color violeta ya no están en desarrollo.
Compresores ejecutables conocidos para archivos ELF :
Compresores ejecutables conocidos para archivos de ensamblaje CLI :
Compresores ejecutables para aplicaciones 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 :
Hay dos tipos de compresión que se pueden aplicar a los scripts 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 de MSX-DOS […] cambie el nombre del archivo […] para ejecutarlo [. …]
[…] SPACEMAKER y TERMULATOR, software básico 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, 8.000 líneas […]
[…] La opción /E del vinculador debería generar un archivo EXE que sea lógicamente equivalente al archivo EXE sin comprimir. La versión actual […] resulta en que AX sea golpeado. AX al ingresar a un archivo EXE tiene un significado definido (indica la validez de la unidad para los parámetros), por lo que debe 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 no tener este particular […]
[Miles:] Existe un cambio no documentado […] a
Microsoft
LINK.EXE […], que provocará una compactación automática durante el enlace. Este proceso eliminará el almacenamiento de matrices no inicializadas del archivo .EXE producido por el vinculador […] Para usar esta función, especifique la opción /E en la línea de comando […] [Nather:] La opción no existe en las versiones de MS Link 3.00 y 3.01 [Millas:] Al comparar los tamaños de los archivos (empaquetados) generados a partir de LINK ver 3.02 y la opción /E con el tamaño del archivo .EXE empaquetado manualmente con […] EXEPACK, he llegado a la conclusión de que La opción /E de LINK ver 3.02 genera EXACTAMENTE un archivo del mismo tamaño que ejecutar EXEPACK manualmente en un archivo .EXE normal generado por LINK […]
[…] > ningún empaquetador puede empaquetar combos 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 uno
. […] 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 código auxiliar hecho por usted mismo al archivo, una vez que ya se ha comprimido […] todos los controladores de dispositivos
DR-DOS
comprimidos utilizan una técnica similar para permitir que el descompresor PKLITE .COM normal funcione con archivos .SYS (mientras tanto, PKLITE admite una función similar para los archivos .SYS). ). […](NB. PKLITE 1.50 (1995) y versiones posteriores obtuvieron la capacidad de comprimir controladores de dispositivos, pero no controladores COM+SYS combinados).
{{cite web}}
: CS1 maint: archived copy as title (link)