148 votes

Comment on fait une bombe Zip ?

Cette question sur zip bombes m'a conduit tout naturellement à la page de Wikipedia sur le sujet. L'article mentionne un exemple de 45.1 ko fichier zip qui décompresse à 1,3 exaoctets.

Quels sont les principes et les techniques qui pourraient être utilisés pour créer un tel fichier, en premier lieu? Je ne veux pas faire ça, de plus en plus intéressé dans simplifié "comment-ça-œuvres" explication des concepts en jeu.

p.s.

L'article parle de 9 couches de fichiers zip, il n'est donc pas un simple cas de la compression d'un tas de zéros. Pourquoi 9, pourquoi 10 fichiers dans chaque?

101voto

Michael Borgwardt Points 181658

Citant à partir de la page de Wikipedia:

Un exemple d'un Zip à la bombe est le fichier 45.1.zip qui était de 45,1 kilo-octets de données compressées, contenant neuf couches imbriquées les fichiers zip dans des ensembles de 10, chaque couche de fond archive contenant un 1.30 gigaoctets de fichiers pour un total de 1,30 exaoctets de non compressé les données.

De sorte que tous vous avez besoin est de 1,3 GO de fichier plein de zéros, le compresser dans un fichier ZIP, faire 10 exemplaires, pack dans un fichier ZIP, et répéter ce processus à 9 reprises.

De cette façon, vous obtenez un fichier qui, lors de la décompression complètement, produit de l'absurdité d'un volume de données sans avoir à commencer avec ce montant.

En outre, les archives imbriquées les rendre beaucoup plus difficile pour des programmes tels que les scanners de virus (la cible principale de ces "bombes") d'être intelligent et de refuser de décompresser les archives qui sont "trop grand", parce que jusqu'à ce que le dernier niveau de la quantité totale de données n'est pas beaucoup, vous n'avez pas "voir" comment les grandes les fichiers au niveau le plus bas jusqu'à ce que vous avez atteint ce niveau, et chaque fichier n'est pas "trop grand" - seulement l'énorme nombre est problématique.

62voto

wefwfwefwe Points 1994

Créez un fichier de 1,3 exabyte de zéros.

Faites un clic droit > Envoyer à dossier compressé (zippé).

47voto

Thomi Points 5434

Cela se fait facilement sous Linux en utilisant la commande suivante :

``

Remplacer compte au nombre de Ko vous souhaitez compresser. L’exemple précédent crée une bombe de zip 10MiB (pas beaucoup d’une bombe du tout, mais il montre le processus).

Vous ne pas besoin d’espace disque pour stocker toutes les données non compressées.

10voto

Chris S Points 32376

Ci-dessous est pour Windows:

À partir de l' Accent sur la Sécurité de la preuve de concept (NSFW!), c'est un fichier ZIP avec 16 dossiers, chacun avec 16 dossiers, qui va comme (42 est le nom de fichier zip):

\42\lib 0\livre 0\chapitre 0\doc 0\0.dll
...
\42\lib F\book F\chapitre F\doc F\0.dll

Je suis probablement mal avec ce personnage, mais il produit 4^16 (4,294,967,296) répertoires. Parce que chaque répertoire besoins d'allocation de l'espace de N octets, il finit par être énorme. Le fichier dll à la fin est de 0 octets.

Décompressé le premier répertoire, seul, \42\lib 0\book 0\chapter 0\doc 0\0.dll des résultats dans les 4 go de répartition de l'espace.

9voto

wefwfwefwe Points 1994

Réponse sérieuse :

(Très gros) Compression dépend de repérer la répétition des motifs, ce fichier zip contiendra des données représentant quelque chose comme

Fichier zip très court, mais énorme lorsque vous l’étendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X