Veamos un ejemplo de cómo funcionaría con N=3: El programa empieza consultando la primera cabecera del directorio central, «CD Header 1», que le redirige a «Header 1». Zip procede a ejecutar lo que haya detrás de «Header 1». Se encuentra la cabecera «Escape next 2 headers», con lo que el programa escribe en el output tal y como están las cabeceras «Header 2», «Escape next header» y «Header 3». Después, se encuentra con «Data 1» y lo descomprime en el output. A continuación pasa al siguiente fichero, consultando la siguiente cabecera del directorio central, «CD Header 2», que le redirige a «Header 2». Zip procede a ejecutar lo que hay detrás, y se encuentra con la cabecera «Escape next header» por lo que escribe en el output la cabecera «Header N» y pasa a descomprimir «Data 1». Para terminar el programa pasa a la última cabecera del directorio central, «CD Header N», le redirige a la cabecera «Header N» y descomprime en el output «Data 1».
En este ejemplo hay 3 cabeceras de ficheros de 31 bytes, 2 cabeceras de escape de 5 bytes, un fichero con los datos comprimidos y 3 cabeceras del directorio central de 1 byte. Si ponemos un fichero comprimido en «Data 1» de 1000 bytes, tenemos un total de 1106 bytes. Ese fichero estará lleno de ceros para obtener la máxima tasa de descompresión de DEFLATE, por lo que al descomprimirse se convierte en 1.032.000 bytes. Al repetirse 3 veces, tenemos 3.096.000 bytes. Más las cabeceras escapadas, hacen un total de 3.096.108 bytes a partir de 1.106 bytes.
David Fifield ha conseguido optimizar esto hasta el punto de conseguir una tasa de descompresión cuadrática, con la que de un archivo comprimido de 42kB se obtiene un archivo de 5.5GB, y con un archivo de 46MB se obtienen 4.5 PB.
Puedes descargarte tanto las bombas zip como el código fuente del programa que las genera en el blog de David Fifield. Pero ten cuidado, porque a día de hoy funciona y si lo intentas descomprimir se bloqueará tu ordenador. En ese blog también tienes explicado más detalladamente todo el proceso de construcción y optimización de la bomba zip.
Con esta entrada acabo la serie de bombas zip, tras haber mostrado las bombas recursivas, las bombas quine y las bombas de superposición.
Lethani.
Interesting