[ZIP] Créer un zip qui se contient lui même à l’infini ou presque !

clone army

 

Salut à tous,

 

Je reviens tout doucement de vacance, et j'avoue ça fait du bien !!!
La Bretagne c'est un peu mon petit coin de paradis, le soleil, l'eau fraîche et transparente de la côte, le relief mi-montagneux, mi-vallonné, les traditionnelles moules frites, les huîtres, les crabes.

... je m'égare ...

 

Mais que voulez-vous, la dure réalité de la reprise ...

 

Alors, je vous ai concocté un petit script qui crée une archive, sur autant de niveau que vous lui en donnerez : 10, 20, 100, 1 000, 1 000 000 000, ... 
L'archive finale ne contient rien, c'est une archive vide ...

Alors ...

Comment créé-t-on une archive vide, et quel poids ça fait ?

En moyenne selon les différents logiciels le poids varie.
Il oscille légèrement entre 20 et 22 octets

Sur Windows :

Un simple clic droit dans un dossier, "Nouveau", "Archive"

Capture2

Sur linux :

Un peu plus compliqué, mais tant que ça.
Il faut d'abord créer l'archive avec un fichier, puis supprimer ensuite le fichier de l'archive.

ziparchive_vide.zip    unFichier
zip -d archive_vide.zip    unFichier

 

Ok, jusque là on est plutôt bon !!!

 

Pourquoi créer une archive avec (x) récursion :

Plus le niveau de récursion sera haut, plus il sera difficile pour une personne physique ou un logiciel d'en contrôler la sécurité

 

Capture2

 

Lorsque je dis compliqué, je ne dit pas impossible.
Seulement ça demandera à votre machine de travailler, surtout si elle doit en contrôler plusieurs.

 

Capture

On peut également, très facilement imaginer un usage type "Zip Bomb"

Ou bien, ça peut servir de planque pour vos données ;)

Place au script de récursion (Linux) :

 

Vous allez devoir créer un script bash contenant ceci :

 

#!/bin/bash

# Partie configurable

level=50
filename="test.zip"
tmpfile="tmp$filename"

########## MAIN  ###############
i=0
#Creation d'une archive vide
touch $tmpfile
zip $filename $tmpfile
zip -d $filename $tmpfile
rm $tmpfile -f
#Récursion   de l'archive
while [ $i -lt $level ]; do
		 # On copie l'archive   et son contenu dans un fichier temporaire
		  cp $filename $tmpfile
		#  On vide l'archive  de son contenu
		  zip -d $filename $filename
		  # On inclu le fichier temporaire dans l'archive
		  zip $filename $tmpfile
		  # On renomme le fichier temporaire pour lui donner le même nom que l'archive
		  echo -e "@ $tmpfile\n@=$filename" | zipnote -w $filename
		  zip -d $filename $tmpfile > /dev/null
		  # On supprime le fichier temporaire
		  rm  $tmpfile -f
		  let i=$i+1
done

 

Je pense avoir suffisamment commenté le code pour que vous puissiez comprendre un peu comment tout ça se goupille.

Vous avez la possibilité de donner n'importe quel nom à votre archive, ainsi que de définir le nombre de niveau(x) de récursion.

 

Petit exemple généré par mon script : https://dyrk.org/divers/infinity_test.zip

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *