Compresión ejecutable


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 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 usar exactamente de la misma manera que el original. Los compresores ejecutables a menudo se denominan "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 se puede considerar 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 ejecutarlos directamente. Dos programas que se pueden usar 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 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 de ejecutables 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 en 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 una variedad de 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 para reducir el tiempo y el ancho de banda que necesitan los clientes 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 o para 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 encriptación adicional . La compresión ejecutable se puede utilizar para evitar el desensamblado directo , enmascarar cadenas literales y modificar firmas. Aunque esto no elimina la posibilidad de ingeniería inversa, puede hacer que el proceso sea más costoso.