Bombe zip comment ça marche. Que sont les bombes ZIP ou comment une petite archive peut facilement faire planter votre ordinateur

Un événement très intéressant et important s'est produit, offensivement, discrètement et inaperçu. Le président russe Vladimir Poutine a rencontré et s'est entretenu avec l'un des chefs de la fonction publique, dont le nom n'apparaît pas souvent dans la presse. Non, cette personne n’est pas un agent secret, même si, de par la nature de son activité, elle a accès à des informations secrètes et peut même être considérée comme une sorte de « combattant du front invisible ». En général, Poutine s'est entretenu avec le chef de l'Agence fédérale des archives, Andrei Artizov.

La conversation entre le chef de l'Etat et le chef de l'agence était de nature commerciale, dont les conséquences possibles pourraient dans certains endroits provoquer l'effet d'une bombe qui explose, et chez certaines personnes même la détonation d'une buse personnelle.

Le Président a déclaré discrètement qu'il avait décidé de déclassifier de nombreux documents d'archives et que le décret serait signé le même jour. En outre, Poutine a annoncé le transfert de Rosarkhiv sous la subordination directe du président russe, car de nombreux documents du département "ont une valeur particulière et ont une importance mondiale".

Le chef de l'agence a, à son tour, informé le président que le fonds d'archives russe stocke 500 millions de dossiers et que « jamais au cours des dernières décennies un travail de déclassification planifié et organisé n'a été réalisé comme il le fait actuellement ».

Le point clé est qu'immédiatement après la déclassification, les documents d'archives seront disponibles sur le site officiel des archives russes, pour lesquelles une base de données spéciale a déjà été créée.

Parmi les archives déjà déclassifiées se trouvent des documents sur lesquels les historiens nationaux et étrangers se lèchent depuis longtemps les lèvres : 1 400 directives uniques de Staline, des ordres du quartier général, des ordres de première ligne, des cartes opérationnelles, des résolutions et des photographies de l'époque, qui jusqu'à récemment étaient conservées. dans les archives sous la rubrique « top secret ».

On ne peut que se réjouir sincèrement pour les historiens, leur souhaiter des travaux nouveaux et intéressants, qui seront basés sur les documents mentionnés ci-dessus, mais seule la déclassification touchera plus d'un sujet d'histoire militaire.

Une source proche de Rosarkhiv fournit des détails intéressants : « Pour autant que je sache d'après les informations du service des archives, nous parlons de la période de 1930 à 1989. Il y a des cas, excusez-moi, d'informateurs - ainsi que de personnes innocentes réprimées, avec des noms de famille très intéressants. Il y aura des données sur les développements spatiaux et militaires qui pourront déjà être communiquées. En outre, les données sur le déroulement des batailles, les ordres et les renseignements reçus pendant la Grande Guerre patriotique, ainsi que sur les relations interétatiques pendant la guerre froide, sont déclassifiées.»

Et il ajoute avec beaucoup de force : « Certains documents vont surprendre la société. Vous devez connaître votre propre histoire, quelle qu’elle soit.

Les archives ont une longue mémoire et portent une charge potentielle pas pire qu’une bombe à hydrogène. Ce n’est pas un hasard si dans notre pays le « cas des maréchaux » et le « cas des médecins » restent classifiés, créant pendant longtemps la base de toutes sortes de spéculations. Il n'y a pas si longtemps, en Grande-Bretagne, une commission spéciale s'occupait des documents d'archives dont la période de secret touchait à sa fin, mais sur la base des données des contacts d'avant-guerre entre les services de renseignement britanniques et le SD nazi, il a été décidé d'étendre le régime du secret. pendant encore 50 ans.

La réserve concernant « certains documents surprendront la société » n’a pas été émise par hasard. À la fin des années 1980, tant en Russie que dans les républiques de l’ex-URSS, diverses personnes sont arrivées au pouvoir grâce à la vague de « démocratisation ».

Beaucoup d’entre eux font preuve d’une vitalité politique étonnante, malgré un manque évident de talent en matière de gestion et une tendance à enseigner aux gens la démocratie selon leur propre point de vue.

À l'étranger proche, d'anciens dirigeants des « fronts populaires », qui ont changé leur vision du monde d'antisoviétique à anti-russe, sont devenus fermement attachés au pouvoir et mènent depuis leur territoire une politique hostile envers la Russie - en organisant des congrès de toutes sortes. des exclus de la « Russie ouverte » pour former des militants profascistes et fournir une assistance militaire aux Banderaites.

La communauté européenne, ainsi que les citoyens de ces limitrophes, seront intéressés de savoir, à partir des documents déclassifiés des Archives fédérales, lesquels des « eurodémocrates » enregistrés étaient des informateurs du KGB. La terre est pleine de rumeurs selon lesquelles, dans leur jeunesse brumeuse, l'ancien chef du Front national lituanien Landsbergis et l'actuelle présidente Dalia Grybauskaite auraient «frappé» au KGB. Désormais, je pense qu'il sera possible d'en apprendre davantage sur cet aspect de leur biographie à partir de la source primaire.

Vous pouvez bavarder autant que vous le souhaitez sur « c’était il y a longtemps et ce n’est pas vrai », « c’est envahi par la réalité », mais il ne faut pas sous-estimer le pouvoir destructeur de telles révélations.

On se souvient que l'année dernière, un ensemble de documents, découverts par l'Institut de la Mémoire Nationale, sur la collaboration de Lech Walesa (sous le couvert opérationnel de « Bolek ») au milieu de ses activités au chantier naval de Gdansk, ont été rendus publics de façon spectaculaire en la presse polonaise. L’explosion de l’information n’a laissé aucun effort à l’image de l’icône du « Pôle n°1 », leader de Solidarité, lauréat du prix Nobel de la paix et premier président de la Pologne antisoviétique. Désormais et pour toujours, Walesa n'est qu'un gros vieillard moustachu, une ruine d'une époque révolue, dont la honte peut être vue de vos propres yeux sous la forme de 17 reçus exposés au même Institut de la Mémoire Nationale pour avoir reçu de l'argent pour le informations toc-toc transférées aux services spéciaux.

On ne peut que regretter que la « bombe » archivistique n’ait pas explosé sous l’agent « Bolek » dans les années 1980, lorsque lui et sa « Solidarité », en collaboration avec les services de renseignement occidentaux, secouaient la Pologne socialiste.

De nombreuses surprises intéressantes pourraient attendre les libéraux nationaux dévoués. Leur chemin de vie sinueux est à bien des égards similaire au chemin de Walesa vers les sommets du pouvoir. Malheureusement, le KGB n'était pas pressé de dénoncer les informateurs réformés pour de nombreuses raisons, parmi lesquelles les raisons éthiques n'étaient pas les moins importantes. Après tout, si vous révélez un agent, surtout volontaire, alors qui coopérera ? Les agents surpris en train de commettre des actes inconvenants et recrutés sur cette base ne vous mèneront pas très loin.

Des informations non officielles circulent dans les médias selon lesquelles « des personnalités éminentes du mouvement libéral-démocrate en Russie » auraient coopéré volontairement avec les services de renseignement soviétiques, pour des raisons égoïstes : voyages d'affaires intéressants, avancement de carrière, travail prestigieux, etc.

On ne peut qu'imaginer quel genre de vipères indicatrices étaient diverses associations créatives d'écrivains, d'ouvriers de théâtre et de cinéastes.

De nombreux critiques de l’URSS et du système soviétique avaient des parents qui n’étaient pas seulement des personnalités éminentes du parti ou de l’économie, mais qui servaient également dans le NKVD-MGB-KGB et prenaient même une part personnelle aux répressions.

Bien sûr, les enfants ne sont pas responsables de leurs pères, mais cela devient dégoûtant dans l'âme lorsqu'on repeint une progéniture qui ne veut pas se souvenir du passé de ses parents, mais qui, une fois, sans aucun remords, a utilisé sa position élevée comme tremplin vers un un avenir personnel brillant, commencez à exposer et à déchirer les couvertures.

Les archives déclassifiées peuvent influencer l’équilibre des pouvoirs dans une Ukraine en difficulté. On peut rappeler comment un certain nombre de documents publiés sur les réseaux sociaux par Miroslava Berdnik avant même le putsch de Maïdan, concernant la coopération des dirigeants de l'OUN avec le MGB et le ministère de l'Intérieur, ont provoqué des crises de contorsion et des fontaines de diarrhée parmi les fans du film de Bandera. des cadavres. Les Svidomites ont insulté et qualifié les photocopies de documents de « contrefaçons du FSB », mais n'ont pu contester aucun argument.

Pourquoi c'est important? Le nationalisme radical ukrainien est un mal sans aucune réserve. Mais elle est professée par diverses personnes. Parmi les membres modernes de l’OUN, il y a leurs idéalistes qui veulent nettoyer le nationalisme ukrainien des figures les plus odieuses de Bandera et de Choukhevych, car ils se sont depuis longtemps irrévocablement compromis en tant que marionnettes et forces punitives d’Hitler. Quoi qu'il en soit, les services de renseignement soviétiques d'après-guerre comprenaient bien les sentiments des nationalistes allemands, qui se séparaient clairement des nazis et des partisans du général Gehlen, tombé sous le contrôle des Américains. Les nationalistes allemands, qui considéraient Bismarck comme leur idole, ayant survécu aux horreurs de la guerre et voyant comment les Américains poussaient l'Allemagne dans une nouvelle guerre avec l'URSS, ont choisi de travailler pour les services secrets soviétiques et est-allemands. Ce point mérite certainement d’être pris en compte.

D’un autre côté, l’Ukraine regorge d’ardents néo-bandéristes qui ne souffrent pas d’un dégoût excessif et qui n’ont peur d’aucune preuve documentaire de la collaboration de leurs idoles avec les services spéciaux d’Hitler. Et si des documents déclassifiés étaient publiés disant que leurs idoles, comme Vasil Kuk, avaient divulgué au MGB des informations sur des « frères » cachés dans des caches ?

S’il s’avérait soudain que toutes sortes de « défenseurs des droits » et d’« indépendants » de la fin de la période soviétique se sont adressés au KGB pour assouplir le régime carcéral, contre un paquet supplémentaire de saindoux de chez eux ou un paquet de shag provenant d’un stand de camp ? La « spilnota » de Bandera, qui voit partout la main longue de Moscou, du FSB et de Poutine personnellement, résistera-t-elle à une telle épreuve de la force des convictions ?

Des informations de ce type peuvent provoquer une puissante libération de plasma thermonucléaire des doupas de Svidomo, dont les propriétaires se vantent de « pureté nationale » et de « Svidomo ». Pour certains, les révélations sur les idoles peuvent les faire reculer et reprendre leurs esprits.

Il serait intéressant d’en apprendre davantage sur la double vie des dirigeants du « Majlis » autoproclamé, ainsi que d’autres personnalités dégoûtantes qui croupissent sous le fardeau qu’elles s’imposent de la « conscience de la nation ».

Alors, sous quel derrière personnel la première « bombe » archivistique explosera-t-elle ? Qui sera la « locomotive » qui déroulera une longue chaîne de révélations ?

[Mise à jour] Maintenant, je suis sur une sorte de liste d'agences de renseignement parce que j'ai écrit un article sur une sorte de "bombe", n'est-ce pas ?

Si vous avez déjà hébergé un site Web ou administré un serveur, vous connaissez probablement bien les mauvaises personnes qui tentent de faire toutes sortes de mauvaises choses à votre propriété.

Lorsque j'ai hébergé pour la première fois ma petite machine Linux avec accès SSH à l'âge de 13 ans, j'ai regardé les journaux et chaque jour je voyais des adresses IP (principalement de Chine et de Russie) essayant de se connecter à ma jolie petite boîte (qui est en fait C'était en fait, un vieux portable ThinkPad T21 avec un écran cassé, bourdonnant sous le lit). J'ai signalé ces adresses IP à leurs fournisseurs.

En fait, si vous disposez d'un serveur Linux avec SSH ouvert, vous pouvez constater par vous-même combien de tentatives de connexion ont lieu quotidiennement :

Grep "échecs d'authentification" /var/log/auth.log


Des centaines de tentatives d'autorisation infructueuses, bien que l'authentification par mot de passe soit désactivée sur le serveur et qu'il s'exécute sur un port non standard

Wordpress nous a condamné

D'accord, soyons réalistes, les scanners de vulnérabilités Web existaient avant Wordpress, mais après que la plate-forme soit devenue si populaire, la plupart des scanners ont commencé à rechercher les dossiers wp-admin mal configurés et les plugins non corrigés.

Ainsi, si un petit gang de hackers en herbe veut obtenir de nouveaux comptes, il téléchargera l'un de ces outils d'analyse et l'installera sur un certain nombre de sites Web dans l'espoir d'accéder à un site et de le dégrader.


Exemples de journaux lors de la numérisation avec l'outil Nikto

C'est pourquoi tous les serveurs et administrateurs de sites Web gèrent des gigaoctets de journaux remplis de tentatives d'analyse. Donc je pensais...

Est-il possible de riposter ?

Après avoir expérimenté l’utilisation potentielle d’IDS ou de Fail2ban, je me suis souvenu des bonnes vieilles bombes ZIP du passé.

Qu'est-ce qu'une bombe ZIP ?

Il s'avère que la compression ZIP est excellente pour traiter les données répétitives, donc si vous avez un fichier texte géant rempli de données répétitives comme tous les zéros, il se compressera très bien. Je veux dire, TRÈS bien.

Comme l'a montré 42.zip, il est possible de compresser 4,5 pétaoctets (4 500 000 gigaoctets) en 42 kilo-octets. Lorsque vous essayez de visualiser le contenu de l'archive (l'extraire ou la décompresser), vous manquerez probablement d'espace disque ou de RAM.

Comment larguer une bombe ZIP sur un scanner de vulnérabilités ?

Malheureusement, les navigateurs Web ne comprennent pas ZIP, mais ils comprennent GZIP.

La première chose que nous ferons est donc de créer un fichier GZIP de 10 Go rempli de zéros. Il existe de nombreuses compressions imbriquées que vous pouvez effectuer, mais commençons simplement.

Jj si=/dev/zéro bs=1M nombre=10240 | gzip > 10G.gzip


Fabriquer une bombe et vérifier sa taille

Comme vous pouvez le constater, sa taille est de 10 Mo. Il aurait pu être mieux compressé, mais c'est suffisant pour l'instant.

Installons maintenant un script PHP qui le livrera au client.

Prêt!

Nous pouvons maintenant l'utiliser comme une simple défense :

Évidemment, ce script n'est pas l'incarnation de l'élégance, mais il peut nous protéger des script kids mentionnés plus haut, qui n'ont aucune idée que l'agent utilisateur peut être modifié dans les scanners.

Alors... Que se passe-t-il si vous exécutez ce script ?


(si vous avez testé la bombe sur d'autres appareils/navigateurs/scripts, veuillez

L'article mentionne 9 couches de fichiers zip, il ne s'agit donc pas d'un simple cas de regroupement d'un tas de zéros. Pourquoi 9, pourquoi 10 fichiers chacun ?

Premièrement, l'article Wikipédia parle actuellement de 5 couches de 16 fichiers. Je ne sais pas où se produit l'écart, mais ce n'est pas tout ce qui est pertinent. La vraie question est de savoir pourquoi utiliser l’imbrication en premier lieu.

DEFLATE, la seule méthode de compression prise en charge pour les fichiers zip*, a un taux de compression maximum de 1 032. Ceci peut être obtenu de manière asymptotique pour toute séquence répétitive de 1 à 3 octets. Peu importe ce que vous faites avec le fichier zip, tant qu'il est utilisé uniquement avec DEFLATE, la taille du fichier décompressé ne sera pas plus de 1032 fois la taille du fichier zip d'origine.

Par conséquent, pour obtenir des taux de compression vraiment scandaleux, vous devez utiliser des fichiers zip imbriqués. Si vous avez 2 couches de compression, le rapport maximum est de 1032^2 = 1065024. Pour 3, c'est 1099104768 et ainsi de suite. Pour les 5 couches utilisées dans 42.zip, le taux de compression maximum théorique est de 1170572956434432. Comme vous pouvez le constater, la taille réelle de 42.zip est loin de ce niveau. Cela s'explique en partie par la surcharge du format zip, et en partie par le fait qu'ils s'en moquent.

Si je devais deviner, je dirais que 42.zip a été formé en créant un gros fichier vide et en le copiant et en le copiant encore et encore. Il n'y a aucun moyen de repousser les limites du format ou de maximiser la compression ou quoi que ce soit - ils ont simplement choisi arbitrairement 16 copies par couche. L'idée était de créer une charge utile importante sans trop d'effort.

Note. D'autres formats de compression, tels que bzip2, offrent des taux de compression maximaux beaucoup plus élevés. Cependant, la plupart des analyseurs zip ne les acceptent pas.

P.S. Vous pouvez créer un fichier zip qui extraira une copie de lui-même (quine). Vous pouvez également en créer un qui décompresse plusieurs copies. Ainsi, si vous décompressez le fichier de manière récursive pour toujours, la taille maximale possible est infinie. La seule limitation est qu’il ne peut pas augmenter de plus de 1 032 à chaque itération.

P.P.S. Une valeur de 1 032 suppose que les données du fichier dans le zip ne se chevauchent pas. L'une des caractéristiques du format de fichier zip est qu'il dispose d'un répertoire central qui répertorie les fichiers de l'archive et les décalages de données des fichiers. Si vous créez plusieurs entrées dans des fichiers pointant vers les mêmes données, vous pouvez obtenir des taux de compression beaucoup plus élevés même sans imbrication, mais le fichier zip sera probablement rejeté par les analyseurs.

Essais de bombes à décompression

Une bombe de décompression est un fichier conçu pour détruire ou supprimer un programme ou un système inutile qui le lit, c'est-à-dire refuser le service. Les fichiers de ce projet peuvent être utilisés pour tester la vulnérabilité d'une application à un type d'attaque donné.

Télécharger des bombes

Une bombe zip, également connue sous le nom de bombe zip of death ou bombe de décompression, est un fichier d'archive malveillant conçu pour planter ou supprimer un programme ou un système inutile qui le lit. Il est souvent utilisé pour désactiver un logiciel antivirus afin de créer une ouverture pour des virus plus traditionnels. Au lieu de détourner le fonctionnement normal d'un programme, une bombe zip permet au programme de s'exécuter comme prévu, mais l'archive est soigneusement traitée de sorte que son déballage (par exemple, en utilisant un antivirus pour rechercher des virus) prend trop de temps, disque l'espace ou la mémoire.

Une bombe Zip est un petit fichier permettant de simplifier son transfert et d'éviter tout soupçon. Cependant, lorsque vous essayez de décompresser ce fichier, son contenu demande plus que ce que le système peut traiter. Un autre exemple de bombe zip est le fichier 42.zip, qui est un fichier zip contenant 42 kilo-octets de données compressées, contenant cinq niveaux de fichiers zip imbriqués par ensembles de 16, chaque archive de niveau inférieur contenant 4,3 gigaoctets (4 294 967 295 octets, ~ 3,99 Gio), sur un total de 4,5 pétaoctets (4 503 599 626 321 920 octets, ~3,99 PiB) de données non compressées. Ces fichiers peuvent toujours être téléchargés à partir de divers sites Web sur Internet. De nombreux antivirus n'effectuent que quelques niveaux de récursion sur les archives pour empêcher les attaques qui provoqueraient un débordement de tampon, une condition de mémoire insuffisante ou dépasseraient le temps d'exécution acceptable du programme. Les bombes Zip reposent souvent (sinon toujours) sur la répétition de fichiers identiques pour atteindre leurs taux de compression ultimes. Des techniques de programmation dynamique peuvent être utilisées pour limiter le parcours de ces fichiers afin qu'un seul fichier soit exécuté de manière récursive à chaque niveau, convertissant ainsi efficacement leur croissance exponentielle en croissance linéaire.

Lors des tests, il est toujours préférable de commencer petit et de progresser progressivement. Commencer à travailler avec le fichier le plus volumineux peut sérieusement nuire à l'application ou au système - utilisez ces bombes avec une grande prudence.

Tous les fichiers ont été compressés pour contourner la limite de téléchargement de fichiers de 50 Mo de GitMub. Des groupes de fichiers ont été compressés puis compressés à nouveau. Supprimez ces pré-codages supplémentaires avant de numériser.

Sources supplémentaires

  • HTTP/2 : analyse approfondie des quatre principales failles du protocole Web de nouvelle génération
  • Vous ne regardez pas la situation dans son ensemble
  • Dans le nid du frelon de la compression : une étude de sécurité de la compression des données dans les services réseau
  • Compression HTTP diabolique - bombes de compression (

*Il existe deux versions de 42.zip : l'ancienne fait 42 374 octets et la plus récente fait 42 838 octets. La différence est que le nouveau nécessite un mot de passe avant de le déballer. Nous comparons uniquement avec l'ancienne version. Voici une copie du fichier si vous en avez besoin : 42.zip.

Les bombes zip doivent surmonter le fait que l'algorithme de compression le plus couramment pris en charge par les analyseurs, DEFLATE, ne peut pas dépasser un taux de compression de 1032 à 1. Pour cette raison, les bombes zip s'appuient généralement sur la décompression récursive, en imbriquant les fichiers zip dans des fichiers zip pour gagner un supplément. facteur 1032 avec chaque couche. Mais l'astuce ne fonctionne que sur les implémentations qui décompressent de manière récursive, et la plupart ne le font pas. La bombe 42.zip la plus célèbre s'étend jusqu'à un formidable 4,5 Po si les six couches sont décompressées de manière récursive, mais sur la couche supérieure, elle n'a qu'un dérisoire 0,6 Mo. Les quines Zip, comme celles de Cox et Ellingsen, produisent une copie d'elles-mêmes et s'étendent ainsi à l'infini lorsqu'elles sont décompressées de manière récursive. Mais ils sont également totalement sûrs une fois déballés.

Cet article montre comment créer une bombe zip non récursive dont le taux de compression dépasse la limite DEFLATE de 1032. Il fonctionne en superposant des fichiers dans un conteneur zip pour référencer un « noyau » de données hautement compressées sur plusieurs fichiers sans faire plusieurs copies. La taille de sortie d'une bombe zip augmente quadratiquement avec la taille d'entrée ; c'est-à-dire que le taux de compression s'améliore à mesure que la taille de la bombe augmente. La conception dépend des fonctionnalités de zip et DEFLATE : elle ne transfère pas directement vers d'autres formats de fichiers ou algorithmes de compression. La bombe est compatible avec la plupart des analyseurs zip, à l'exception de ceux "en streaming", qui analysent les fichiers en un seul passage sans vérifier le répertoire central du fichier zip. Nous essayons d’équilibrer deux objectifs contradictoires :

  • Augmentez le taux de compression. Nous définissons le taux de compression comme la somme des tailles de tous les fichiers de l'archive divisée par la taille du fichier zip lui-même. Cela ne prend pas en compte les noms de fichiers ou autres métadonnées du système de fichiers, uniquement le contenu.
  • Maintenir la compatibilité. Zip est un format complexe et les analyseurs diffèrent, notamment dans les situations extrêmes et dans les fonctionnalités supplémentaires. N'utilisez pas de techniques qui ne fonctionnent qu'avec certains analyseurs. Nous soulignerons quelques moyens de rendre la bombe zip plus efficace avec une certaine perte de compatibilité.

Structure du fichier Zip

Le fichier zip se compose de catalogue central Liens vers des dossiers.

Le répertoire central se trouve à la fin du fichier zip. C'est la liste en-têtes du répertoire central. Chaque en-tête de répertoire central contient des métadonnées pour un fichier, telles que le nom du fichier et la somme de contrôle CRC-32, ainsi qu'un pointeur arrière vers l'en-tête du fichier local. L'en-tête du répertoire central fait 46 octets plus la longueur du nom du fichier.

Le fichier se compose d'un en-tête de fichier local suivi de données de fichier compressées. La longueur de l'en-tête du fichier local est de 30 octets plus la longueur du nom du fichier. Il contient une copie redondante des métadonnées de l'en-tête du répertoire central, ainsi que la taille des fichiers de données compressés et non compressés qui se trouvent derrière. Zip est un format de conteneur, pas un algorithme de compression. Les données de chaque fichier sont compressées à l'aide d'un algorithme spécifié dans les métadonnées - généralement DEFLATE.

Cette description du format zip omet de nombreux détails qui ne sont pas nécessaires pour comprendre la bombe zip. Pour des informations complètes, voir la section 4.3 APPNOTE.TXT ou "PKZip File Structure" par Florian Buchholz, ou voir .

La redondance considérable et les nombreuses ambiguïtés du format zip ouvrent la voie à des méfaits de toutes sortes. La bombe zip n’est que la pointe de l’iceberg. Liens pour des lectures complémentaires :

$ python3 -m zipfile -e chevauchement.zip . Traceback (dernier appel le plus récent) : ... __main__.BadZipFile : le nom du fichier dans le répertoire "B" et l'en-tête b "A" diffèrent.
Nous verrons ensuite comment modifier la conception pour assurer la cohérence des noms de fichiers tout en conservant la plupart des avantages des fichiers qui se chevauchent.

Deuxième découverte : citer les en-têtes de fichiers locaux

Nous devons diviser les en-têtes de fichiers locaux pour chaque fichier tout en réutilisant un noyau. La simple concaténation de tous les en-têtes ne fonctionne pas car l'analyseur zip trouvera l'en-tête du fichier local à l'endroit où il s'attend à ce que le flux DEFLATE démarre. Mais l’idée fonctionnera, avec des changements mineurs. Nous utiliserons la fonction DEFLATE des blocs non compressés pour « citer » les en-têtes de fichiers locaux afin qu'ils semblent faire partie du même flux DEFLATE qui aboutit dans le noyau. Chaque en-tête de fichier local (sauf le premier) sera interprété de deux manières : comme code (partie de la structure du fichier zip) et comme données (partie du contenu du fichier).

Un flux DEFLATE est une séquence de blocs, où chaque bloc peut être compressé ou décompressé. Nous ne pensons généralement qu'aux blocs compressés, par exemple le noyau est un gros bloc compressé. Mais il en existe aussi des non compressés, qui commencent par un en-tête de 5 octets avec un champ de longueur, ce qui signifie simplement : "imprimer ce qui suit n octets textuellement." Décompresser un bloc non compressé signifie uniquement supprimer l'en-tête de 5 octets. Les blocs compressés et non compressés peuvent être mélangés librement dans le flux DEFLATE. Le résultat est une concaténation des résultats de la décompression de tous les blocs dans l’ordre. Le terme « non compressé » n'a de signification qu'au niveau DEFLATE ; les données du fichier sont toujours considérées comme « compressées » au niveau zip, quels que soient les blocs utilisés.

La façon la plus simple de considérer cette structure est de la considérer comme un chevauchement interne, du dernier fichier au premier. On commence par insérer un noyau qui formera la fin du fichier de données pour chaque fichier. Ajout d'un en-tête au fichier LFH local N et en-tête de l'annuaire central CDH N, ce qui le pointe. Définissez le champ de métadonnées « taille compressée » sur LFH N et C.D.H. N par taille de noyau compressé. Nous ajoutons maintenant un en-tête de bloc non compressé de 5 octets (en vert dans le schéma), dont le champ de longueur est égal à la taille LFH. N. Ajouter un deuxième en-tête au fichier LFH local N−1 et l'entête du répertoire central CDH N−1 qui le pointe. Définissez le champ de métadonnées « taille compressée » comme étant le nouvel en-tête de taille du noyau compressé. plus taille de l'en-tête de bloc non compressé (5 octets) plus taille LFH N .

Pour le moment, le fichier zip contient deux fichiers nommés Y et Z. Passons en revue ce que l'analyseur verra lors de l'analyse. Supposons que la taille du noyau compressé soit de 1 000 octets et que la taille du LFH soit de N- 31 octets. Commençons par CDH N−1 et suivez le pointeur vers LFH N−1. Le premier nom de fichier est Y et la taille de son fichier de données compressées est de 1 036 octets. En interprétant les 1036 octets suivants comme un flux DEFLATE, nous rencontrons d'abord un en-tête de bloc non compressé de 5 octets qui nous demande de copier les 31 octets suivants. Écrivez les 31 octets suivants, qui sont LFH N, que nous décompressons et ajoutons au fichier Y. En continuant dans le flux DEFLATE, nous trouvons un bloc compressé (noyau), que nous décompressons dans le fichier Y. Nous avons maintenant atteint la fin des données compressées et en avons terminé avec le fichier Y.

En passant au fichier suivant, nous suivons le pointeur de CDH Nà LFH N et recherchez un fichier nommé Z, dont la taille compressée est de 1000 octets. En interprétant ces 1000 octets comme un flux DEFLATE, nous rencontrons immédiatement le bloc compressé (le noyau à nouveau) et le décompressons dans le fichier Z. Nous avons maintenant atteint la fin du fichier final et c'est terminé. Le fichier de sortie Z contient le noyau décompressé ; le fichier de sortie Y est le même, mais en plus préfixé par 31 octets LFH N .

Nous terminons la conception en répétant la procédure de citation jusqu'à ce que l'archive zip comprenne le nombre requis de fichiers. Chaque nouveau fichier ajoute un en-tête de répertoire central, un en-tête de fichier local et un bloc non compressé pour citer l'en-tête de fichier local immédiatement suivant. Les données d'un fichier compressé sont généralement une chaîne de blocs DEFLATE non compressés (en-têtes de fichiers locaux cités) suivis d'un noyau compressé. Chaque octet du noyau contribue pour environ 1032 Nà la taille de sortie car chaque octet fait partie de tous N des dossiers. Les fichiers de sortie sont également de tailles différentes : les plus anciens sont plus gros que les plus récents car ils citent davantage les en-têtes de fichiers locaux. Le contenu des fichiers de sortie n'a pas beaucoup de sens, mais personne n'a dit qu'il devait avoir un sens.

Cette construction de citations à chevauchement a une meilleure compatibilité que la construction à chevauchement complet de la section précédente, mais la compatibilité se fait au détriment de la compression. Là, chaque fichier ajouté ne coûte que l'en-tête du répertoire central, ici il coûte l'en-tête du répertoire central, l'en-tête du fichier local et 5 octets supplémentaires pour l'en-tête de citation.

Optimisation

Ayant reçu le design de base d’une bombe zip, nous essaierons de la rendre aussi efficace que possible. Nous souhaitons répondre à deux questions :
  • Quel est le taux de compression maximum pour une taille de fichier zip donnée ?
  • Quel est le taux de compression maximum compte tenu des limitations du format zip ?

Compression du noyau

Il est avantageux pour nous de compresser le noyau autant que possible, car chaque octet décompressé est multiplié par N. Pour cela, nous utilisons un compresseur DEFLATE personnalisé appelé Bulk_deflate, spécialisé dans la compression d'une chaîne d'octets répétitifs.

Tous les archiveurs DEFLATE décents se rapprochent d'un taux de compression de 1032 sur un flux infini d'octets répétitifs, mais nous nous soucions de la taille spécifique. Dans la taille de notre archive, Bulk_deflate contient plus de données que les archiveurs à usage général : environ 26 Ko de plus que zlib et Info-ZIP, et environ 15 Ko de plus que Zopfli, qui sacrifie la vitesse au profit de la qualité de la compression.

Le prix d’une compression Bulk_deflate élevée est le manque de polyvalence. Il ne peut compresser que des chaînes d'octets répétitifs et seulement d'une certaine longueur, à savoir 517 + 258. k pour un entier k≥ 0. En plus d'une bonne compression, Bulk_deflate est rapide, accomplissant le travail essentiellement dans le même laps de temps quelle que soit la taille des données d'entrée, sans compter le travail d'écriture de la chaîne compressée.

Noms de fichiers

Pour nos besoins, les noms de fichiers sont pratiquement un poids mort. Bien qu'ils contribuent à la taille de sortie en faisant partie des en-têtes cités des fichiers locaux, un octet dans le nom du fichier contribue beaucoup moins qu'un octet dans le noyau. Nous souhaitons que les noms de fichiers soient les plus courts possibles, mais différents, sans oublier la compatibilité.

Chaque octet dépensé sur un nom de fichier signifie deux octets non dépensés sur le noyau (deux car chaque nom de fichier apparaît deux fois : dans l'en-tête du répertoire central et dans l'en-tête du fichier local). Un octet de nom de fichier donne une moyenne de seulement ( N+ 1) / 4 octets de sortie, alors qu'un octet dans le noyau compte pour 1032 N. Exemples: , , .

La première considération de compatibilité est l’encodage. La spécification du format zip indique que les noms de fichiers doivent être interprétés comme CP 437 ou UTF-8 si un certain bit d'indicateur est défini (APPNOTE.TXT, Annexe D). Il s'agit d'un point d'incompatibilité majeur entre les analyseurs zip, qui peuvent interpréter les noms de fichiers dans un codage fixe ou spécifique aux paramètres régionaux. Par conséquent, pour des raisons de compatibilité, il est préférable de se limiter aux caractères ayant le même encodage en CP 437 et en UTF-8. À savoir, il s’agit de 95 caractères US-ASCII imprimables.

Nous sommes également liés par des restrictions de dénomination du système de fichiers. Certains systèmes de fichiers ne sont pas sensibles à la casse, donc « a » et « A » ne sont pas considérés comme des noms différents. Les systèmes de fichiers courants tels que FAT32 interdisent certains caractères tels que « * » et « ? ».

À titre de compromis sûr, mais pas nécessairement optimal, notre bombe zip utilisera des noms de fichiers de l'alphabet de 36 caractères, qui n'inclut pas de caractères spéciaux ou à casse mixte :

0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Les noms de fichiers sont générés de manière évidente, toutes positions dans l'ordre, avec l'ajout d'une position en fin de boucle :

"0", "1", "2", ..., "Z", "00", "01", "02", ..., "0Z", ..., "Z0", "Z1 ", "Z2", ..., "ZZ", "000", "001", "002", ...
Il existe 36 noms de fichiers comportant un caractère, 36² noms de fichiers comportant deux caractères, etc. Quatre octets suffisent pour 1 727 604 noms de fichiers différents.

Étant donné que les noms de fichiers dans une archive ont généralement des longueurs différentes, quelle est la meilleure façon de les classer : du plus court au plus long, ou vice versa ? En y réfléchissant un peu, il vaut mieux mettre en dernier les noms les plus longs. Cet ordre ajoute plus de 900 Mo de sortie à zblg.zip , par rapport à l'ordre du plus long au plus court. Cependant, il s'agit d'une optimisation mineure, car 900 Mo ne représentent que 0,0003 % de la taille totale de sortie.

Taille du noyau

La conception des citations superposées permet de stocker un noyau compressé de données, puis de le copier plusieurs fois à moindre coût. Pour une taille de fichier zip spécifique X, quelle quantité d'espace est optimale à allouer pour stocker le noyau et quelle quantité pour créer des copies ?

Pour trouver l’équilibre optimal, il vous suffit d’optimiser une variable N, nombre de fichiers dans l'archive zip. Chaque valeur N nécessite une certaine quantité de surcharge pour les en-têtes de répertoire central, les en-têtes de fichiers locaux, les en-têtes de blocs de citation et les noms de fichiers. Tout l'espace restant sera occupé par le noyau. Parce que le N doit être un entier, et vous ne pouvez insérer qu'un certain nombre de fichiers avant que la taille du noyau ne tombe à zéro, vérifiez simplement toutes les valeurs possibles N et choisissez ce qui donne les meilleurs résultats.

Application de la procédure d'optimisation à X= 42 374 pour 42.zip trouve le maximum à N= 250. Ces 250 fichiers nécessitent 21 195 octets de surcharge, laissant 21 179 octets au noyau. Un noyau de cette taille est décompressé en 21 841 249 octets (soit un rapport de 1031,3 pour 1). 250 copies du noyau décompressé plus quelques en-têtes de fichiers locaux cités donnent une sortie totale décompressée de 5 461 307 620 octets et un taux de compression de 129 000.

Le CRC-32 peut être modélisé comme une machine à états qui met à jour un registre d'état de 32 bits pour chaque bit d'entrée. Les opérations de mise à jour de base pour les bits 0 et 1 sont :

Uint32 crc32_update_0(uint32 state) ( // Décale le bit le moins significatif. bit b = state & 1; state = state >> 1; // Si le bit décalé était 1, XOR avec la constante CRC-32. if (b == 1) state = state ^ 0xedb88320; return state; ) uint32 crc32_update_1(uint32 state) ( // Faites comme pour un bit 0, puis XOR avec la constante CRC-32. return crc32_update_0(state) ^ 0xedb88320; )
Si vous représentez le registre d'état comme un vecteur binaire de 32 éléments et utilisez XOR pour l'addition et la multiplication, alors crc32_update_0 est un mappage linéaire ; c'est-à-dire qu'il peut être représenté comme une multiplication par une matrice de transition binaire 32x32. Pour comprendre pourquoi, notez que la multiplication matrice-vecteur consiste simplement à additionner les colonnes de la matrice après avoir multiplié chaque colonne par l'élément correspondant du vecteur. L'état d'opération de décalage >> 1 prend simplement chaque bit je vecteur d'état et le multiplie par un vecteur nul partout sauf le bit je− 1 (numérotation des bits de droite à gauche). Relativement parlant, l'état XOR final ^ 0xedb88320 ne se produit que lorsque le bit b est égal à un. Cela peut être considéré comme une première multiplication de b par 0xedb88320, puis un XOR dans cet état.

De plus, crc32_update_1 n'est que crc32_update_0 plus une constante (XOR). Cela fait de crc32_update_1 une transformation affine : multiplication matricielle suivie d'un mappage (c'est-à-dire une addition vectorielle). Nous pouvons représenter la multiplication et le mappage matriciels en une seule étape si nous augmentons les dimensions de la matrice de transformation à 33x33 et ajoutons un élément supplémentaire au vecteur d'état, qui est toujours égal à 1 (cette représentation est appelée coordonnées homogènes).


33 × 33 matrices de transformation M 0 et M 1 qui calculent le changement d'état du CRC-32 effectué respectivement par les bits 0 et 1. Les vecteurs colonnes sont stockés avec le bit de poids fort en bas : en lisant la première colonne de bas en haut, vous voyez la constante polynomiale CRC-32 edb8832016 = 111 011 011 0111 0001 0000011 001 00000 2 . Les deux matrices ne diffèrent que par la dernière colonne, qui représente le vecteur de translation en coordonnées uniformes. Dans M 0 la traduction est nulle, et dans M ​​1 c'est edb88320 16 , une constante polynomiale CRC-32. Ceux immédiatement au-dessus de la diagonale représentent l'état de fonctionnement >> 1

Les deux opérations crc32_update_0 et crc32_update_1 peuvent être représentées par une matrice de transition 33x33. Les matrices M 0 et M 1 sont représentées. L'avantage de la représentation matricielle est que les matrices peuvent être multipliées. Disons que nous voulons voir le changement d'état produit par le traitement du caractère ASCII "a", dont la représentation binaire est 01100001 2 . Nous pouvons représenter le changement d'état cumulé CRC-32 de ces huit bits dans une seule matrice de transformation :


Et nous pouvons imaginer le changement d’état d’une chaîne de « a » répétitifs en multipliant de nombreuses copies de M a – élevant la matrice à une puissance. Nous pouvons le faire rapidement en utilisant l'algorithme d'exponentiation rapide, qui nous permet de calculer M n en seulement log 2 n étapes. Par exemple, voici une matrice de changement d'état pour une chaîne de 9 caractères « a » :
L'algorithme de multiplication matricielle rapide est utile pour calculer le noyau M, la matrice d'un noyau non compressé, puisque le noyau est une chaîne d'octets répétitifs. Pour obtenir une somme de contrôle CRC-32 à partir d'une matrice, multipliez la matrice par le vecteur zéro (le vecteur zéro est en coordonnées uniformes, c'est-à-dire 32 zéros puis un un ; nous omettons ici la complication mineure des pré- et post- traitement de la somme de contrôle pour la correspondance). Pour calculer la somme de contrôle de chaque fichier, nous travaillons à rebours. Commençons par l'initialisation M:=M noyau. La somme de contrôle du noyau est également la somme de contrôle finale du fichier N, donc on multiplie M au vecteur zéro et stockez la somme de contrôle résultante dans CDH N et LFH N . Données du fichier N−1 identique aux données du fichier N, mais avec le préfixe LFH N ajouté. Par conséquent, nous calculons la matrice de changement d’état pour LFH N et la mettons à jour. Maintenant M représente le changement d'état cumulé depuis le traitement LFH N par noyau. Calculer la somme de contrôle du fichier N−1, multipliant à nouveau M au vecteur zéro. Nous continuons la procédure en accumulant des matrices de changement d'état dans M jusqu'à ce que tous les fichiers aient été traités.

Extension : Zip64

Auparavant, nous avons rencontré un problème d'extension en raison des limitations du format zip : il était impossible de produire plus de 281 To, quelle que soit l'intelligence avec laquelle le fichier zip était empaqueté. Il est possible de s'affranchir de ces limitations en utilisant Zip64, une extension du format zip qui augmente la taille de certains champs d'en-tête à 64 bits. La prise en charge de Zip64 n'est en aucun cas universelle, mais c'est l'une des extensions les plus couramment implémentées. En termes de taux de compression, l'effet de Zip64 est d'augmenter la taille de l'en-tête du répertoire central de 46 à 58 octets et la taille de l'en-tête du répertoire local de 30 à 50 octets. En regardant la formule du facteur d'expansion optimal dans un modèle simplifié, nous voyons que la bombe zip Zip64 croît toujours de manière quadratique, mais à un rythme plus lent en raison du dénominateur plus grand - comme le montre le diagramme ci-dessous. En raison de la perte de compatibilité et d’une croissance plus lente, presque toutes les restrictions sur la taille des fichiers sont supprimées.

Disons que nous voulons une bombe zip qui s'étend jusqu'à 4,5 Po comme 42.zip. Quelle doit être la taille des archives ? En utilisant la recherche binaire, nous constatons que la taille minimale d'un tel fichier est de 46 Mo.

  • zbxl.zip 46 Mo → 4,5 Po (Zip64, moins compatible)
zipbomb --mode=quoted_overlap --num-files=190023 --compressed-size=22982788 --zip64 > zbxl.zip
4,5 pétaoctets, c'est à peu près la quantité de données enregistrées par le télescope Event Horizon pour la première image d'un trou noir : des racks et des racks de disques durs dans un centre de données.

Avec Zip64, il n'est presque plus intéressant de considérer le taux de compression maximum, car on peut simplement continuer à augmenter la taille du fichier zip et le taux de compression avec lui, jusqu'à ce que même un fichier zip compressé devienne d'une taille prohibitive. Un seuil intéressant, cependant, est de 2,64 octets (18 EB ou 16 EiB) - ce n'est pas beaucoup de données qui tiendront sur la plupart des systèmes de fichiers. La recherche binaire trouve la plus petite bombe zip qui produit au moins autant de résultats : elle contient 12 millions de fichiers et un noyau compressé de 1,5 Go. La taille totale du fichier zip est de 2,9 Go et il est décompressé en 264+11727895877 octets avec un taux de compression de plus de 6,2 milliards pour un. Je n'ai pas rendu ce fichier disponible en téléchargement, mais vous pouvez le générer vous-même en utilisant . Ses fichiers sont si volumineux que même un bug dans Info-ZIP UnZip 6.0 a été découvert.

Zipbomb --mode=quoted_overlap --num-files=12056313 --compressed-size=1482284040 --zip64 > zbxxl.zip

Extension : bzip2

DEFLATE est l’algorithme de compression le plus courant pour le format zip, mais ce n’est qu’une parmi de nombreuses options. Le deuxième algorithme le plus courant est probablement bzip2. Bien qu'il ne soit pas aussi compatible que DEFLATE. Théoriquement, bzip2 a un taux de compression maximum d'environ 1,4 million pour un, ce qui permet un compactage plus dense du noyau.

Bzip2 code d'abord le codage de longueur d'exécution, réduisant ainsi la longueur de la chaîne d'octets répétitifs de 51 fois. Les données sont ensuite divisées en blocs de 900 Ko et chaque bloc est compressé séparément. Théoriquement, un bloc peut être compressé à 32 octets. 900 000 × 51/32 = 1 434 375.

En ignorant les pertes de compatibilité, bzip2 constitue-t-il une bombe plus efficace ?

Oui, mais uniquement pour les petits fichiers. Le problème est que bzip2 n'a rien de comparable aux blocs DEFLATE non compressés que nous utilisions pour citer les en-têtes de fichiers locaux. Ainsi, il n'est pas possible de superposer des fichiers et de réutiliser le noyau - chaque fichier doit écrire sa propre copie, donc le taux de compression global ne sera pas meilleur que celui de n'importe quel fichier individuel. Dans le graphique ci-dessous, nous voyons que sans chevauchement, bzip2 surpasse DEFLATE uniquement pour les fichiers d'une taille d'environ plusieurs mégaoctets.

Le seul espoir qui reste est de trouver un moyen alternatif de citer les en-têtes dans bzip2, qui est abordé dans la section suivante. De plus, si vous savez qu'un certain analyseur zip prend en charge bzip2 Et permet les incompatibilités de noms de fichiers, vous pouvez utiliser la construction de chevauchement complet, qui n'a pas besoin d'être citée.

Comparaison des taux de compression de différentes bombes zip. Notez les axes logarithmiques. Chaque modèle est présenté avec et sans Zip64. Les structures sans chevauchement ont un taux de croissance linéaire, comme en témoigne le rapport constant des axes. Le déplacement vertical du graphique bzip2 signifie que le taux de compression de bzip2 est environ mille fois supérieur à celui de DEFLATE. Les constructions DEFLATE avec citations ont un taux de croissance quadratique, comme en témoigne une pente de 2:1 par rapport aux axes. L'option Zip64 est légèrement moins efficace, mais permet plus de 281 To. Les graphiques pour bzip2 avec citation via un champ supplémentaire passent du quadratique au linéaire lorsque la taille maximale du fichier (2 32 −2 octets) ou le nombre maximum autorisé de fichiers est atteint.

Extension : citation via un champ supplémentaire

Jusqu'à présent, nous avons utilisé la fonction DEFLATE pour citer les en-têtes de fichiers locaux, et nous venons de voir que cette astuce ne fonctionne pas dans bzip2. Cependant, il existe une méthode de citation alternative, un peu plus limitée, qui utilise uniquement les fonctionnalités du format zip et est indépendante de l'algorithme de compression.

À la fin de la structure d'en-tête du fichier local, il y a champ supplémentaire longueur variable pour stocker des informations qui ne rentrent pas dans les champs d'en-tête normaux (APPNOTE.TXT, Section 4.3.7). Des informations supplémentaires peuvent inclure, par exemple, un horodatage ou un uid/gid d'Unix. Les informations Zip64 sont également stockées dans un champ supplémentaire. Le champ supplémentaire est représenté sous la forme d'une structure longueur-valeur ; si vous augmentez la longueur sans ajouter de valeur, le champ supplémentaire inclura ce qui se trouve derrière dans le fichier zip, à savoir le prochain en-tête du fichier local. En utilisant cette méthode, chaque en-tête de fichier local peut « citer » les en-têtes suivants en les enfermant dans son propre champ supplémentaire. Par rapport à DEFLATE, il y a trois avantages :

  1. La citation via le champ supplémentaire ne nécessite que 4 octets au lieu de 5, laissant plus d'espace au noyau.
  2. Cela n'augmente pas la taille du fichier, ce qui signifie une taille de noyau plus grande compte tenu des limitations du format zip.
  3. Il fournit une citation dans bzip2.
Malgré ces avantages, la citation via des champs supplémentaires est moins flexible. Il ne s'agit pas d'une chaîne, comme dans DEFLATE : chaque en-tête de fichier local doit contenir non seulement l'en-tête qui le suit immédiatement, mais également Tous titres suivants. Les champs supplémentaires augmentent à mesure que vous vous rapprochez du début du fichier zip. Puisque la longueur maximale du champ est de 2 16 −1 octets, vous ne pouvez citer que jusqu'à 1 808 en-têtes de fichiers locaux (ou 1 170 en Zip64), en supposant que les noms (dans le cas de DEFLATE, vous pouvez utiliser un champ supplémentaire pour citer le premier (les plus courts) en-têtes de fichiers locaux, puis passez à la citation DEFLATE pour le reste). Autre problème : pour correspondre à la structure de données interne du champ supplémentaire, vous devez sélectionner une balise de 16 bits pour le type (APPNOTE.TXT, section 4.5.2) précédant les données de citation. Nous souhaitons choisir une balise de type qui amènera les analyseurs à ignorer les données citées plutôt que d'essayer de les interpréter comme des métadonnées significatives. Les analyseurs Zip doivent ignorer les balises de type inconnu, afin que nous puissions choisir les balises au hasard, mais il existe un risque qu'à l'avenir certaines balises rompent la compatibilité de conception.

Le schéma précédent illustre la possibilité d'utiliser des champs supplémentaires dans bzip2, avec et sans Zip64. Les deux graphiques présentent un point d’inflexion où la croissance passe de quadratique à linéaire. Sans Zip64, cela se produit lorsque la taille maximale du fichier non compressé (2 32 −2 octets) est atteinte ; alors vous ne pouvez augmenter que le nombre de fichiers, mais pas leur taille. Le graphique se termine complètement lorsque le nombre de fichiers atteint 1809, alors nous manquons d'espace dans le champ supplémentaire pour citer des titres supplémentaires. Avec Zip64, le point de rupture se situe à 1171 fichiers, après quoi seule la taille des fichiers peut être augmentée, mais pas leur nombre. Le champ supplémentaire est également utile dans le cas de DEFLATE, mais la différence est si petite qu'elle n'est pas visuellement perceptible. Il augmente le taux de compression de zbsm.zip de 1,2 % ; zblg.zip de 0,019 % ; et zbxl.zip de 0,0025 %.

Discussion

Dans leur travail sur ce sujet, Ploetz et ses collègues utilisent le chevauchement de fichiers pour créer une archive zip presque auto-répliquante. Le chevauchement des fichiers lui-même a été suggéré plus tôt (diapositive 47) par Ginvael Coldwind.

Nous avons conçu la conception de la bombe zip over-quote pour prendre en compte la compatibilité - un certain nombre de différences de mise en œuvre, dont certaines sont présentées dans le tableau ci-dessous. La conception résultante est compatible avec les analyseurs zip, qui fonctionnent de la manière habituelle, c'est-à-dire en vérifiant d'abord un répertoire central et en l'utilisant comme index de fichiers. Parmi eux se trouve l'analyseur zip unique de Nail, qui est automatiquement généré à partir de la grammaire formelle. Cependant, la conception est incompatible avec les analyseurs « stream », qui analysent un fichier zip du début à la fin en un seul passage sans lire au préalable le répertoire central. De par leur nature, les analyseurs de flux ne permettent en aucun cas le chevauchement de fichiers. Très probablement, ils n’extraireont que le premier fichier. De plus, ils peuvent même générer une erreur, comme c'est le cas avec

mob_info