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 solo ejecutable. Cuando se ejecuta este ejecutable comprimido, el código de descompresión recrea el código original 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 usar exactamente de la misma manera que el original. Los compresores ejecutables a menudo se denominan "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 un ejecutable comprimido se empaqueta junto con el código de descompresión relevante en un archivo ejecutable. Algunos ejecutables comprimidos se pueden descomprimir para reconstruir el archivo de programa original sin que se ejecuten directamente. Dos programas que se pueden utilizar para hacer esto son CUP386 y UNP.
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 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 scripting están diseñados para funcionar en código legible por humanos , que tiene una alta redundancia , la compresión puede ser muy efectiva y tan simple como reemplazar nombres largos utilizados para identificar variables y funciones con versiones más cortas y / o eliminar espacios en blanco .
Ventajas y desventajas
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 que los distribuidores de software se mantengan dentro de las limitaciones de sus 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 usa con frecuencia para disuadir 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 patentados de compresión y / o cifrado agregado . La compresión ejecutable se puede utilizar para evitar el desensamblaje directo , enmascarar cadenas literales y modificar firmas. Aunque esto no elimina la posibilidad de la 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 tanto, menos tiempo para transferir datos desde el sistema de archivos a la memoria. Por otro lado, se requiere 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 medias 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 la compresión de un ejecutable.
En los sistemas operativos que leen imágenes ejecutables bajo demanda desde el disco (ver memoria virtual ), los ejecutables comprimidos hacen que este proceso sea menos eficiente. El stub 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. Por lo general, esto 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 ser intercambiado de forma independiente si no se utiliza. Los requisitos adicionales de almacenamiento y tiempo significan que hay que sopesar cuidadosamente si comprimir los 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 se ve el código auxiliar del extractor vinculado estáticamente .
Además, algunos escáneres de virus más antiguos simplemente notifican todos los ejecutables comprimidos como virus porque los stubs 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 verificar el ejecutable real en su interior, pero algunos escáneres antivirus y antimalware populares han tenido problemas con alarmas falsas positivas en ejecutables comprimidos. En un intento por resolver el problema del malware oculto con la ayuda de los empaquetadores en tiempo de ejecución, el Grupo de seguridad de conexiones de la industria IEEE 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 tanto medios lentos como de baja capacidad, y 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 de almacenamiento cada vez que el usuario deseaba utilizar 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 como 64 kilobytes para participar en algunas competencias. 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 competencias.
Lista de empaquetadores ejecutables
Ejecutable CP / M y MSX-DOS
Compresores ejecutables conocidos para archivos CP / M / MSX-DOS .COM :
- PMexe (desde 1990, escrito por Yoshihiko Mino, PMARC.COM + PMEXE.CPM) [1]
Ejecutable de DOS
Compresores ejecutables conocidos para archivos ejecutables de 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]
- DIET (desde 1991, escrito por Teddy Matsumoto , DIET.EXE) [12]
- TINYPROG (TINYPROG.EXE)
- Software RJS 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 Knowledge Dynamics LZW [14]
- WWpack (escrito por Piotr Warezak y Rafal Wierzbicki, WWPACK.EXE)
- 624 (solo para archivos .COM de menos de 25 KB, usa LZW )
- AINEXE
- AvPack
- ComPAck
- Sobre HASP
- LGLZ
- PMWLITE
- ProPack
- UCEXE
- WDOSX
- XE
- XPack
Ejecutable 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
Compresores ejecutables conocidos para ejecutables portátiles :
Nota: Los clientes en violeta ya no están en desarrollo.
Nombre | Último establo | Licencia de software | soporte x86-64 |
---|---|---|---|
32Lite | |||
Alienyze | 1.4 (17 de agosto de 2020 | )Propiedad | No |
ANDpakk2 | |||
Armadillo | 9,62 (7 de junio de 2013 | )Propiedad | sí |
ASPack | 2.40 (7 de diciembre de 2018 | )Propiedad | sí |
ASPR (ASProtect) | 2.78 (7 de diciembre de 2018 | )Propiedad | sí |
BeRoEXEPacker | |||
BIN-crypter | |||
Empaquetador de BoxedApp | 3.3 (26 de julio de 2015 | )Propiedad | sí |
CExe | 1.0b (20 de julio de 2001 | )GPL | No |
Arruga | 2.2 (15 de junio de 2019 | )Freeware | sí |
dotBundle | 1.3 (4 de abril de 2013 | ) [15]Propiedad | sí |
Protector Enigma | 6.60 (21 de agosto de 2019 | ) [16]Propiedad | sí |
Caja virtual Enigma | 9.40 (10 de octubre de 2019 | ) [16]Propiedad | sí |
exe32pack | |||
Paquete EXE | 3.11 (7 de enero de 2011 | ) [17]Propiedad | ? |
EXECryptor | |||
EXE Stealth | 4.14 (29 de junio de 2011 | ) [17]Propiedad | ? |
eXPressor | 1.8.0.1 (14 de enero de 2010 | )Propiedad | ? |
FSG | 2.0 (24 de mayo de 2004 | ) [18]Freeware | No |
kkrunchy src | 0.23a4 (Desconocido) | Dominio publico | No |
MAULLAR | 1.1 (Desconocido) | Freeware | No |
MPRESS | 2.19 (2 de enero de 2012 | )Freeware | sí |
MuCruncher | |||
NeoLite | |||
.netshrink | 2.7 (2 de julio de 2016 | ) [19]Propiedad | sí |
NsPack | |||
Obsidium | 1.6 (11 de abril de 2017 | ) [20]Propiedad | sí |
PECompact | |||
PELock | 2.06 (15 de agosto de 2016 | ) [21]Propiedad | No |
PEPack | |||
PESpin | 1.33 (3 de mayo de 2011 | )Freeware | sí |
Chiquita | 2.4 (22 de septiembre de 2016 | )Freeware | No |
PKLite32 | |||
RLPack básico | 1.21 (31 de octubre de 2008 | )GPL | No |
Shrinker32 | |||
Empaquetadora inteligente Pro X | 2.0.0.1 (3 de junio de 2019 | )Propiedad | sí |
Themida / WinLicense | 3.0 (24 de octubre de 2019 | )Propiedad | sí |
Upack | |||
UPX | 3.96 (23 de enero de 2020 | )GPL | experimental |
VMProtect | 3.4 (3 de agosto de 2019 | )Propiedad | sí |
WWPack32 | |||
XComp / XPack | 0,98 (18 de febrero de 2007 | )Freeware | No |
Cripta de Yoda | |||
YZPack |
Archivos ELF
Compresores ejecutables conocidos para archivos ELF :
- gzexe (utiliza un código auxiliar de script de shell y gzip , funciona en la mayoría de los sistemas similares a Unix)
- Sobre HASP
- UPX
- 624 (para Linux / 386) [22]
Archivos de ensamblaje CLI
Compresores ejecutables conocidos para archivos de ensamblaje CLI :
- .NETZ
- NsPack
- Mpress
- Sobre HASP
- .netshrink
- dotBundle
- Exepack.NET
- DotProtect: [23] Protector / empaquetador comercial para .net y mono. Cuenta con verificaciones en línea y "cifrado estándar de la industria".
Archivos de la aplicación Mac OS Classic
Compresores ejecutables conocidos para archivos de aplicación Mac OS Classic :
- Aplicación VISE [24]
- StuffIt InstallerMaker
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 ejecutables conocidos para ejecutables en Commodore 64 y VIC 20 :
- PuCrunch [25]
- Exomizador [26]
- ByteBoozer [27]
Comodoro Amiga
Compresores ejecutables conocidos para ejecutables en la serie Commodore Amiga :
- empaquetador de energía [28]
- Triturador de Titanics [28]
- implosionador [28]
- Trituradora TNM
- Shrinkler [29]
- PackFire [30]
Java
Compresores ejecutables conocidos para Java :
Archivos JAR :
- Sobre HASP
- paquete200
- ProGuard
Archivos WAR :
- Sobre HASP
Secuencias de comandos de JavaScript
Hay dos tipos de compresión que se pueden aplicar a los scripts de JavaScript :
- Reduzca la redundancia en el script (eliminando comentarios, espacios en blanco y acortando los nombres de variables y funciones). Esto no altera el comportamiento del script.
- Comprima el script original y cree un nuevo script que contenga código de descompresión y datos comprimidos. Esto es similar a la compresión ejecutable binaria.
Compresores autodescompresores
Estos comprimen el script original y generan un nuevo script que tiene un descompresor y datos comprimidos.
- JsSfx
- Packify
Compresores reductores de redundancia
Estos eliminan los espacios en blanco, eliminan los comentarios y acortan los nombres de variables y funciones, pero no alteran el comportamiento del script.
- Envasador
- Compresor YUI
- Shrinksafe
- JSMin
Ver también
- Compresión de datos
- Compresión de disco
- Compresión RAM
- Ejecutable
- Complejidad de Kolmogorov
- Archivo autoextraíble
Referencias
- ^ Gielen, Pierre; Taylor, Johnathan (1997) [1993]. Logan, Wolverine (ed.). "Manual de ayuda de PMarc" . Archivado desde el original el 22 de abril de 2019 . Consultado el 22 de febrero de 2019 .
[…] PMEXE.CPM […] es un módulo […] en combinación con PMARC […] utilizado para crear archivos COM comprimidos ejecutables (como LZEXE o PKLITE […] tipo: PMARC
.COM = PMEXE2.CPM archivo COM de MSX-DOS […] renombrar archivo […] para ejecutarlo [ …][opciones] El nombre de archivo debe ser .COM […] no .PMA. El archivo de salida tendrá la extensión .CPM. Es un - ^ "Informe experto de Robert BK Dewar en respuesta al informe de Kenneth D. Crews". Cambridge University Press et al v. Patton et al, Filing 124, Supplemental Initial Disclosures by Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. - Cambridge University Press, Oxfort University Press, Inc. y Sage Publications, Inc. contra Mark P. Becker, presidente de la Universidad Estatal de Georgia, y otros, Acción Civil No. 1: 08-CV-1425-ODE (documento judicial). Tribunal de Distrito de los Estados Unidos para el Distrito Norte de Georgia, División de Atlanta. pag. 18. Anexo A. Archivado desde el original el 1 de mayo de 2018 . Consultado el 23 de abril de 2019 .
[…] SPACEMAKER and 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 […]
- ^ Realia, Inc. (enero de 1983). "Si usa DOS, necesita este programa" . Revista PC (publicidad). Publicación Ziff-Davis . 2 (9): 417. Archivado desde el original el 22 de abril de 2019 . Consultado el 22 de abril de 2019 .
- ^ a b Dewar, Robert Berriedale Keith (13 de marzo de 1984). "DOS 3.1 ASMB (Otro error tonto de Microsoft)" . [email protected] . Archivado desde el original el 1 de mayo de 2018 . Consultado el 23 de abril de 2019 .
[…] La opción / E del enlazador debería generar un archivo EXE que es lógicamente equivalente al archivo EXE sin comprimir. La versión actual […] resulta en una paliza de AX. 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 pasar 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 tengo este particular […]
- ^ a b Paul, Matthias R. (7 de octubre de 2002) [2000]. "Re: problema relacionado con masm .com (PSP)" . Grupo de noticias : alt.lang.asm . Archivado desde el original el 3 de septiembre de 2017 . Consultado el 3 de septiembre de 2017 .}
- ^ Necasek, Michal (30 de abril de 2018). "Realia SpaceMaker" . Museo OS / 2 . Archivado desde el 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 desde el original el 29 de enero de 2019 . Consultado el 22 de febrero de 2019 .
- ^ Necasek, Michal (12 de enero de 2019). "Sí, Norton lo hizo" . Museo OS / 2 . Archivado desde el original el 22 de abril de 2019 . Consultado el 22 de abril de 2019 .
- ^ a b Necasek, Michal (23 de marzo de 2018). "EXEPACK y la puerta A20" . Museo OS / 2 . Archivado desde el original el 13 de noviembre de 2018 . Consultado el 20 de abril de 2019 .
- ^ Miles, Ya'akov; Nather, Ed (17 de mayo de 1986) [5 de febrero de 1986, 9 de febrero de 1986]. "Opción de LINK de Microsoft sin documentar: / E" . Lista de correo INFO-IBMPC . Archivado desde el original el 1 de mayo de 2018 . Consultado el 26 de abril de 2019 .
[Miles:] Existe un cambio […] indocumentado a Microsoft LINK.EXE […], que provocará una compactación automática durante la encuadernación. Este proceso eliminará el almacenamiento para 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 comando […] [Nather:] La opción no existe en las versiones de MS Link 3.00 y 3.01 [Miles:] 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 LINK ver 3.02 / E genera EXACTAMENTE el mismo tamaño de archivo que la ejecución manual de EXEPACK en un archivo .EXE normal generado por LINK […]
- ^ Bellard, Fabrice (9 de febrero de 2003). "Página de inicio de LZEXE" . bellard.org . Archivado desde el original el 24 de marzo de 2019 . Consultado el 18 de marzo de 2019 .
- ^ a b c Salomon, David (2000) [1998]. "Capítulo 3.22: Compresores EXE" . Compresión de datos: la referencia completa (2 ed.). Springer-Verlag . pag. 212. doi : 10.1007 / 978-3-642-86092-8 . ISBN 978-3-540-78086-1. S2CID 35889155 . Consultado el 26 de abril de 2019 .
- ^ Paul, Matthias R. (11 de abril de 2002). "Re: [fd-dev] ANUNCIO: CuteMouse 2.0 alpha 1" . freedos-dev . Archivado desde el original el 21 de febrero de 2020 . Consultado el 21 de febrero de 2020 .
[…]> Ningún empacador 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 creado por uno mismo al archivo, después de que ya se haya 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 en sí ). […]
(NB. PKLITE 1.50 (1995) y versiones posteriores obtuvieron la capacidad de comprimir controladores de dispositivo, pero no controladores combinados COM + SYS). - ^ https://code.google.com/archive/p/mz-explode/
- ^ "Copia archivada" . Archivado desde el original el 21 de agosto de 2013 . Consultado el 6 de mayo de 2013 .CS1 maint: copia archivada como título ( enlace )
- ^ a b http://www.enigmaprotector.com/en/downloads/changelog.html
- ^ a b http://webtoolmaster.com/news.xml
- ^ https://web.archive.org/web/20040525022811/http://www.xtreeme.prv.pl/
- ^ https://www.pelock.com/products/netshrink/download
- ^ https://www.obsidium.de/show/download
- ^ https://www.pelock.com/products/pelock/download
- ^ http://sed.free.fr/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 no. 4 . Consultado el 10 de diciembre de 2017 .
- ^ https://web.archive.org/web/20140730211711/http://www.cs.tut.fi/~albert/Dev/pucrunch/
- ^ web.comhem.se/~u13114991/exo/
- ^ https://csdb.dk/release/?id=33093
- ^ a b c http://www.amiga-stuff.com/crunchers-download.html
- ^ https://github.com/askeksa/Shrinkler
- ^ http://www.pouet.net/prod.php?which=54840