La compresión de ejecutables es cualquier método para comprimir un archivo ejecutable y combinar los datos comprimidos con el código de descompresión en un único ejecutable. Al ejecutar este ejecutable comprimido, el código de descompresión recrea el código original a partir del código comprimido antes de su ejecución. En la mayoría de los casos, esto ocurre de forma transparente, por lo que el ejecutable comprimido puede utilizarse exactamente igual que el original. Los compresores de ejecutables suelen denominarse empaquetadores de ejecutables , empaquetadores en 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 el ejecutable comprimido se empaqueta junto con el código de descompresión correspondiente en un archivo ejecutable. Algunos ejecutables comprimidos pueden descomprimirse para reconstruir el archivo del programa original sin ejecutarse directamente. Dos programas que pueden utilizarse para ello son CUP386 y UNP.
La mayoría de los ejecutables comprimidos descomprimen el código original en memoria y requieren un poco más de memoria para ejecutarse (ya que necesitan almacenar el código descompresor, los datos comprimidos y el código descomprimido). Además, algunos ejecutables comprimidos tienen requisitos adicionales, como aquellos que escriben el ejecutable descomprimido en el sistema de archivos antes de ejecutarlo.
La compresión de ejecutables no se limita a los ejecutables binarios, sino que también se puede aplicar a scripts, como JavaScript . Dado que la mayoría de los lenguajes de scripting están diseñados para trabajar con código legible por humanos , que tiene una alta redundancia , la compresión puede ser muy eficaz y tan simple como reemplazar los nombres largos utilizados para identificar variables y funciones por versiones más cortas o eliminar los espacios en blanco .
Ventajas y desventajas
Los distribuidores de software utilizan la compresión de ejecutables por diversas razones, principalmente para reducir los requisitos de almacenamiento secundario de su software. Dado que los compresores de ejecutables están diseñados específicamente para comprimir código ejecutable, suelen lograr una mejor relación de compresión que las herramientas de compresión de datos estándar como gzip , zip o bzip2 . 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 los clientes necesitan para acceder al software distribuido a través de Internet .
La compresión de ejecutables también se utiliza frecuentemente para disuadir la ingeniería inversa o para ofuscar el contenido del ejecutable (por ejemplo, para ocultar la presencia de malware a los antivirus ) mediante métodos de compresión propietarios o cifrado adicional . La compresión de ejecutables puede utilizarse para evitar el desensamblaje directo , enmascarar literales de cadena y modificar firmas. Si bien esto no elimina la posibilidad de ingeniería inversa, puede encarecer el proceso.
Un ejecutable comprimido requiere menos espacio de almacenamiento en el sistema de archivos, por lo que se necesita menos tiempo para transferir los datos del sistema de archivos a la memoria. Por otro lado, requiere cierto tiempo 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 la velocidad media de los procesadores, 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 los ordenadores de sobremesa modernos, esto rara vez se nota a menos que el ejecutable sea excepcionalmente grande, por lo que la velocidad de carga no es una razón principal a favor ni en contra de comprimir un ejecutable.
En los sistemas operativos que paginan las imágenes ejecutables bajo demanda desde el disco, los ejecutables comprimidos hacen que este proceso sea menos eficiente. El descompresor asigna un bloque de memoria para almacenar los datos descomprimidos, que permanece asignado mientras el ejecutable esté cargado, se use o no, compitiendo constantemente por los recursos de memoria con otras aplicaciones. Si el sistema operativo utiliza un archivo de intercambio, los datos descomprimidos deben escribirse en él para liberar memoria, en lugar de simplemente descartar los bloques de datos no utilizados y volver a cargarlos desde la imagen ejecutable si se necesitan de nuevo. Esto suele pasar desapercibido, pero se convierte en un problema cuando un ejecutable se carga más de una vez simultáneamente: 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 utilizan. Los requisitos adicionales de almacenamiento y tiempo implican que debe sopesarse cuidadosamente si conviene comprimir los ejecutables que normalmente se ejecutan más de una vez simultáneamente.
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 del extractor vinculado estáticamente .
Además, algunos antivirus antiguos simplemente detectan todos los ejecutables comprimidos como virus porque los descompresores comparten algunas características con ellos. La mayoría de los antivirus modernos pueden descomprimir varias capas de compresión de ejecutables para comprobar el contenido real, pero algunos antivirus y antimalware populares han tenido problemas con falsos positivos en ejecutables comprimidos. Para solucionar el problema del malware ofuscado mediante empaquetadores en tiempo de ejecución, el grupo de seguridad IEEE Industry Connections Security Group ha introducido un sistema de etiquetado de software .
La compresión de ejecutables era más popular cuando los ordenadores estaban limitados a la capacidad de almacenamiento de los disquetes , que eran medios lentos y de baja capacidad, y los discos duros pequeños ; permitía al ordenador almacenar más software en el mismo espacio, sin la incomodidad 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 los ordenadores. Tiene su utilidad en la demoscene, donde las demos deben mantenerse dentro de un límite de tamaño, por ejemplo, una introducción de 64k . 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.
Lista de empaquetadores ejecutables
Ejecutable de CP/M y MSX-DOS
Compresores ejecutables conocidos para archivos .COM de CP/M-80 / MSX-DOS :
- PMexe (desde 1990, escrito por Yoshihiko Mino , PMARC.COM+PMEXE.CPM, firma "-pms-" ) [ 1 ]
- PopCom! (desde 1992, escrito por Yoshihiko Mino, POPCOM.COM, firma "-pc1-")
ejecutable de MS-DOS
Compresores de ejecutables conocidos para archivos ejecutables compatibles con MS-DOS ( .COM o .EXE ):
- Realia Spacemaker (desde 1982, escrito por Robert BK Dewar , SM.COM, firma "MEMORY$" ) [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ]
- Microsoft EXEPACK (desde 1985, escrito por Reuben Borman, EXEPACK.EXE, LINK.EXE /E[XEPACK], firma "RB") [ 9 ] [ 5 ] [ 4 ] [ 10 ]
- LZEXE (desde 1989, escrito por Fabrice Bellard , LZEXE.EXE) [ 11 ] [ 12 ]
- PKWare PKLite (desde 1990, escrito por Phil Katz , PKLITE.EXE) [ 12 ] [ 13 ]
- DIETA (desde 1991, escrita por Teddy Matsumoto, DIET.EXE) [ 12 ]
- TINYPROG (TINYPROG.EXE)
- RJS Software RJCRUSH (desde 1994, escrito por Roland Skinner, RJCRUSH.EXE)
- XPA (desde 1995, escrito por JauMing Tseng, XPA.EXE)
- Ibsen Software aPACK (desde 1997, escrito por Jørgen Ibsen, APACK.EXE)
- UPX (desde 1998, escrito por Markus FXJ Oberhumer y László Molnár)
- 32LiTE (desde 1998, escrito por Oleg Prokhorov, 32LITE.EXE)
- Compresor LZW de Knowledge Dynamics [ 14 ]
- WWpack (desde 1994, escrito por Piotr Warezak y Rafal Wierzbicki, WWPACK.EXE)
- 624 (solo para archivos .COM menores de 25 KB, utiliza LZW )
- AINEXE
- AvPack
- ComPAck
- Sobre HASP
- LGLZ
- PMWLITE
- Paquete Pro
- UCEXE
- WDOSX
- XE
- Paquete X
ejecutable de OS/2
Compresores ejecutables conocidos en OS/2 :
- NeLite
- LxLite
Nuevo ejecutable
Compresores de ejecutables conocidos para nuevos ejecutables :
- PackWin
- PKWare PKLite (desde la versión 2.01)
- WinLite
Ejecutable portátil
Los compresores ejecutables conocidos para Portable Executables incluyen los siguientes. (Elementos con undecoración tachadaya no están en desarrollo.)
archivos ELF
Compresores ejecutables conocidos para archivos ELF :
- gzexe (utiliza un script de shell y gzip , funciona en la mayoría de los sistemas tipo Unix)
- Sobre HASP
- UPX
- 624 (para Linux/386) [ 20 ]
Archivos de ensamblaje de la CLI
Compresores ejecutables conocidos para archivos de ensamblaje de CLI :
- .NETZ
- Paquete de Ns
- Prensa
- Sobre HASP
- dotBundle
- Exepack.NET
- DotProtect: [ 21 ] Protector/empaquetador comercial para .net y mono. Ofrece verificaciones en línea y "cifrado estándar de la industria".
Aplicaciones clásicas de Mac OS
Compresores ejecutables para aplicaciones de Mac OS Classic :
- Aplicación VISE [ 22 ]
- Creador de instaladores de StuffIt
Archivos Mach-O (Apple Mac OS X)
Compresores ejecutables conocidos para archivos Mach-O (Apple Mac OS X):
- Sobre HASP
- UPX
- VMProtect
Commodore 64 y VIC-20
Compresores de ejecutables conocidos para ejecutables en Commodore 64 y VIC-20 :
Amiga
Compresores de ejecutables conocidos para archivos ejecutables en la serie Amiga :
Java
Compresores ejecutables conocidos para Java :
Archivos JAR :
- Sobre HASP
- paquete200
- ProGuard
Archivos WAR :
- Sobre HASP
JavaScript
Existen dos tipos de compresión que se pueden aplicar a los scripts de JavaScript :
- Reduce la redundancia en el script (eliminando comentarios y espacios en blanco, y acortando los nombres de variables y funciones). Esto no altera el comportamiento del script.
- Comprime el script original y crea un nuevo script que contenga el código de descompresión y los datos comprimidos. Esto es similar a la compresión de archivos ejecutables binarios.
Compresores autodescompresivos
Estos scripts comprimen el script original y generan un nuevo script que incluye un descompresor y datos comprimidos.
- JsSfx
- Packify
Compresores que reducen la redundancia
Estas opciones eliminan los espacios en blanco, los comentarios y acortan los nombres de las variables y funciones, pero no alteran el comportamiento del script.
- Envasador
- Compresor YUI [ 29 ] [ 30 ]
- Shrinksafe [ 30 ]
- JSMin [ 30 ]
Véase también
Referencias
- ↑ Gielen, Pierre; Taylor, Johnathan (1997) [1993]. Logan, Wolverine (ed.). "Manual de ayuda de PMarc" . Recuperado el 22 de febrero de 2019. [
…] PMEXE.CPM […] es un módulo […] en combinación con PMARC […] utilizado para crear archivos COM comprimidos ejecutables (al igual que 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 […] renombrar archivo […] para ejecutarlo […]
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Informe de experto de Robert BK Dewar en respuesta al informe de Kenneth D. Crews". Cambridge University Press et al v. Patton et al, Expediente 124, Divulgaciones iniciales suplementarias de Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. - Cambridge University Press, Oxford University Press, Inc. y Sage Publications, Inc. v. Mark P. Becker, Presidente de la Universidad Estatal de Georgia, et al, Acción civil n.° 1:08-CV-1425-ODE (documento judicial). Tribunal de Distrito de los Estados Unidos para el Distrito Norte de Georgia, División de Atlanta. pág. 18. Anexo A. Archivado del original el 1 de mayo de 2018. Recuperado el 23 de abril de 2019 .
[…] 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 […]
- ↑ Realia, Inc. (enero de 1983). "Si usa DOS, necesita este programa" . PC Magazine (anuncio). 2 (9). Ziff-Davis Publishing : 417. Recuperado el 22 de abril de 2019 .
{{cite journal}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - 1 2 Dewar, Robert Berriedale Keith (1984-03-13). "DOS 3.1 ASMB (Otro error tonto de Microsoft)" . info-ibmpc@USC-ISIB.ARPA . Archivado del original el 1 de mayo de 2018. Recuperado el 23 de abril de 2019.
[…] 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 […] provoca que AX se sobrescriba. AX al entrar en un archivo EXE tiene un significado definido (indica la validez de la unidad para los parámetros), por lo que debería pasarse a la imagen sin comprimir. Dada esta violación tan 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, huelga decir, no tiene esta particular […]
- 1 2 Paul, Matthias R. (2002-10-07) [2000]. "Re: masm .com (PSP) related trouble" . Newsgroup : alt.lang.asm . Recuperado el 2017-09-03 .
{{cite newsgroup}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Necasek, Michal (30 de abril de 2018). "Realia SpaceMaker" . Museo OS/2 . Archivado del original el 27 de enero de 2019. Consultado el 22 de febrero de 2019 .
- ↑ Parsons, Jeff (10 de enero de 2019). "Una actualización sobre las primeras utilidades de Norton" . PCjs . Archivado del original el 29 de enero de 2019. Recuperado el 22 de febrero de 2019 .
- ↑ Necasek, Michal (12 de enero de 2019). "Sí, Norton lo hizo" . Museo OS/2 . Archivado del original el 22 de abril de 2019. Recuperado el 22 de abril de 2019 .
- 1 2 Necasek, Michal (23-03-2018). "EXEPACK y la puerta A20" . Museo OS/2 . Archivado del original el 13-11-2018 . Recuperado el 20-04-2019 .
- ↑ Miles, Ya'akov; Nather, Ed (17-05-1986) [05-02-1986, 09-02-1986]. "Opción no documentada de Microsoft LINK: /E" . Lista de correo INFO-IBMPC . Archivado del original el 01-05-2018 . Recuperado el 26-04-2019 .
[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 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 (empaquetados) generados por LINK versión 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 versión 3.02 genera EXACTAMENTE el mismo tamaño de archivo que al ejecutar manualmente EXEPACK en un archivo .EXE normal generado por LINK […]
- ↑ Bellard, Fabrice (09-02-2003). "Página principal de LZEXE" . bellard.org . Archivado del original el 24-03-2019 . Recuperado el 18-03-2019 .
- 1 2 3 Salomon, David (2000) [1998]. "Capítulo 3.22: Compresores EXE" . Compresión de datos: La referencia completa (2.ª ed.). Springer-Verlag . pág. 212. doi : 10.1007/978-3-642-86092-8 . ISBN 978-3-540-78086-1. S2CID 35889155 . Archivado del original el 07-04-2022 . Recuperado el 26-04-2019 .
- ↑ Paul, Matthias R. (2002-04-11). "Re: [ fd-dev ] ANUNCIO: CuteMouse 2.0 alpha 1" . freedos-dev . Archivado del original el 21-02-2020 . Recuperado el 21-02-2020 .
[...] > 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 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 fragmento de código personalizado al archivo, después de que ya haya sido comprimido […] todos los controladores de dispositivo
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). […]
(Nota: PKLITE 1.50 (1995) y versiones posteriores adquirieron la capacidad de comprimir controladores de dispositivos, pero no controladores COM+SYS combinados).
- ↑ "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . Archivado del original el 3 de diciembre de 2021. Consultado el 7 de abril de 2022 .
- ↑ "DotBundle - Descargar una versión de evaluación" . Archivado del original el 21/08/2013 . Consultado el 06/05/2013 .
- 1 2 "Protección de software, licencias de software, virtualización de software" . Archivado del original el 13 de marzo de 2018. Recuperado el 12 de marzo de 2018 .
- 1 2 "Noticias de software WebtoolMaster" . Archivado del original el 20 de julio de 2020. Consultado el 15 de enero de 2012 .
- ↑ "Copia archivada" . www.xtreeme.prv.pl . Archivado del original el 25/05/2004 . Consultado el 15/01/2022 .
{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace ) - ↑ "Descargar | Sistema de protección de software Obsidium" . Archivado del original el 7 de febrero de 2019. Consultado el 18 de abril de 2017 .
- ↑ "624" .
- ↑ DotProtect http://site.yvansoftware.be/dotpacker1_0 Archivado el 22 de enero de 2011 en Wayback Machine
- ↑ Kiene, Steve; Mark, Dave (1999). "Una charla con Steve Kiene" . MacTech . Vol. 15, n.º 4. Archivado del original el 10 de diciembre de 2017. Consultado el 10 de diciembre de 2017 .
- ↑ "Programa de compresión de datos sin pérdidas: Hybrid LZ77 RLE" . www.cs.tut.fi. Archivado del original el 30 de julio de 2014. Consultado el 15 de enero de 2022 .
- ↑ web.comhem.se/~u13114991/exo/
- ↑ "ByteBoozer (PC)" . Archivado del original el 15 de agosto de 2022. Consultado el 7 de abril de 2022 .
- 1 2 3 "Crunchers para descargar" .
- ↑ "Askeksa/Shrinkler" . GitHub . 25/09/2021. Archivado del original el 07/04/2022 . Consultado el 07/04/2022 .
- ↑ "PackFire v1.2k de Neural" . Archivado del original el 30/06/2024 . Consultado el 07/04/2022 .
- ↑ Nizamettin Gok y Nitin Khanna. "Creación de aplicaciones híbridas para Android con Java y JavaScript" . Editorial: O'Reilly Media. 2013. pág. 32. Cita: "YUI Compressor es... es una de las herramientas de minificación de JavaScript más populares".
- 1 2 3 Nicholas C. Zakas "JavaScript profesional para desarrolladores web" . 2011. págs. 768-769. Cita: "Compresores: Una parte importante del proceso de compilación de JavaScript... JSMin... Dojo ShrinkSafe... y... compresor YUI..."
- Empaquetadores EXE