Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
zeroturnaround__zt-zip_CVE-2018-1002201_1-12 | Kitploit
Outils/GitHubGitHub/shoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12
Utilitaires GénérauxUtilitaires et Frameworks
GitHubshoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12

zeroturnaround__zt-zip_CVE-2018-1002201_1-12

Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
il y a 1 anPas encore vérifié

ZIP - méthodes de commodité

Intégration continue

Build Status

Aperçu rapide

Le projet a été initié et codé par Rein Raudjärv lorsqu'il a eu besoin de traiter un grand ensemble de grandes archives ZIP pour les besoins internes de LiveRebel. Peu de temps après, nous avons commencé à utiliser cet utilitaire dans d'autres projets en raison de sa simplicité d'utilisation et du fait qu'il fonctionnait tout simplement.

Le projet est construit à l'aide des paquetages java.util.zip.* pour un accès basé sur les flux. La plupart des méthodes de commodité pour l'utilisation du système de fichiers sont également prises en charge.

Installation

Maven Central

Les artefacts du projet sont disponibles dans le dépôt central Maven. Pour l'inclure dans votre projet Maven, vous devez spécifier la dépendance.

root@kitploit:~
...
<dependency>
    <groupId>org.zeroturnaround</groupId>
    <artifactId>zt-zip</artifactId>
    <version>1.11</version>
    <type>jar</type>
</dependency>
...

Notez que 1.8 est la dernière version compatible avec Java 1.4. Depuis lors, Java 1.5 est requis.

Contexte

Nous avions les exigences fonctionnelles suivantes :

  1. compresser et décompresser des répertoires de manière récursive
  2. inclure/exclure des entrées
  3. renommer des entrées
  4. compression/décompression sur place - le ZIP devient un répertoire et vice versa
  5. parcourir les entrées du ZIP
  6. ajouter ou remplacer des entrées à partir de fichiers ou de tableaux d'octets
  7. transformer des entrées ZIP
  8. comparer deux archives - comparer toutes les entrées en ignorant les horodatages

et ces exigences non fonctionnelles :

  1. utiliser au maximum les API existantes
  2. être simple à utiliser
  3. être efficace à l'utilisation - ne pas parcourir un fichier ZIP entier si une seule entrée est nécessaire
  4. être sûr à l'utilisation - ne pas permettre à l'utilisateur de laisser des flux ouverts et de garder des fichiers verrouillés
  5. ne pas déclarer d'exceptions
  6. être compatible avec Java 1.5

Exemples

Extraction

Vérifier si une entrée existe dans une archive ZIP

root@kitploit:~
boolean exists = ZipUtil.containsEntry(new File("/tmp/demo.zip"), "foo.txt");

Extraire une entrée d'une archive ZIP dans un tableau d'octets

root@kitploit:~
byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt");

Extraire une entrée d'une archive ZIP avec un Charset spécifique dans un tableau d'octets

root@kitploit:~
byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", Charset.forName("IBM437"));

Extraire une entrée d'une archive ZIP dans le système de fichiers

root@kitploit:~
ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", new File("/tmp/bar.txt"));

Extraire une archive ZIP

root@kitploit:~
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"));

Extraire une archive ZIP qui devient un répertoire

root@kitploit:~
ZipUtil.explode(new File("/tmp/demo.zip"));

Extraire un répertoire d'une archive ZIP en incluant le nom du répertoire

root@kitploit:~
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith("doc/") ? name : null;
  }
});

Extraire un répertoire d'une archive ZIP en excluant le nom du répertoire

root@kitploit:~
final String prefix = "doc/"; 
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith(prefix) ? name.substring(prefix.length()) : name;
  }
});

Extraire les fichiers d'une archive ZIP qui correspondent à un motif de nom

root@kitploit:~
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    if (name.contains("/doc")) {
      return name;
    }
    else {
      // returning null from the map method will disregard the entry
      return null;
    }
  }
});

Afficher les noms des entrées .class d'une archive ZIP

root@kitploit:~
ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipInfoCallback() {
  public void process(ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".class"))
      System.out.println("Found " + zipEntry.getName());
  }
});

Afficher les entrées .txt d'une archive ZIP (utilise IoUtils de Commons IO)

root@kitploit:~
ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipEntryCallback() {
  public void process(InputStream in, ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".txt")) {
      System.out.println("Found " + zipEntry.getName());
      IOUtils.copy(in, System.out);
    }
  }
});

Compression

Compresser un répertoire dans une archive ZIP

root@kitploit:~
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"));

Compresser un répertoire qui devient une archive ZIP

root@kitploit:~
ZipUtil.unexplode(new File("/tmp/demo.zip"));

Compresser un répertoire dans une archive ZIP avec un répertoire parent

root@kitploit:~
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"), new NameMapper() {
  public String map(String name) {
    return "foo/" + name;
  }
});

Ajouter une entrée à partir d'un fichier dans une archive ZIP

root@kitploit:~
ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("f/tmp/oo.txt"), new File("/tmp/new.zip"));

Ajouter une entrée à partir d'un tableau d'octets dans une archive ZIP

root@kitploit:~
ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));

Ajouter une entrée à partir d'un fichier et d'un tableau d'octets dans une archive ZIP

root@kitploit:~
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));

Ajouter une entrée à partir d'un fichier et d'un tableau d'octets vers un flux de sortie

root@kitploit:~
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
OutputStream out = null;
try {
  out = new BufferedOutputStream(new FileOutputStream(new File("/tmp/new.zip")));
  ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, out);
}
finally {
  IOUtils.closeQuietly(out);
}

Remplacer une entrée d'archive ZIP à partir d'un fichier

root@kitploit:~
boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("/tmp/foo.txt"), new File("/tmp/new.zip"));

Remplacer une entrée d'archive ZIP à partir d'un tableau d'octets

root@kitploit:~
boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));

Remplacer une entrée d'archive ZIP à partir d'un fichier et d'un tableau d'octets

root@kitploit:~
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
boolean replaced = ZipUtil.replaceEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));

Ajouter ou remplacer des entrées dans une archive ZIP

root@kitploit:~
ZipEntrySource[] addedEntries = new ZipEntrySource[] {
        new FileSource("/path/in/zip/File1.txt", new File("/tmp/file1.txt")),
        new FileSource("/path/in/zip/File2.txt", new File("/tmp/file2.txt")),
        new FileSource("/path/in/zip/File3.txt", new File("/tmp/file2.txt")),
    };
ZipUtil.addOrReplaceEntries(new File("/tmp/demo.zip"), addedEntries);

Transformation

Transformer une entrée d'archive ZIP en majuscules

root@kitploit:~
boolean transformed = ZipUtil.transformEntry(new File("/tmp/demo"), "sample.txt", new StringZipEntryTransformer() {
    protected String transform(ZipEntry zipEntry, String input) throws IOException {
        return input.toUpperCase();
    }
}, new File("/tmp/demo.zip"));

Comparaison

Comparer deux archives ZIP (en ignorant les horodatages des entrées)

root@kitploit:~
boolean equals = ZipUtil.archiveEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"));

Comparer deux entrées d'archives ZIP portant le même nom (en ignorant les horodatages des entrées)

root@kitploit:~
boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo.txt");

Comparer deux entrées d'archives ZIP portant des noms différents (en ignorant les horodatages des entrées)

root@kitploit:~
boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo1.txt", "foo2.txt");

Débogage

La bibliothèque utilise le framework de journalisation slf4j-api. Toutes les instructions de journalisation sont de niveau DEBUG ou TRACE. Selon le framework de journalisation que vous utilisez, un simple -Dorg.slf4j.simpleLogger.defaultLogLevel=debug ou System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); suffira pour afficher les instructions de journalisation de la bibliothèque zt-zip. Vous pouvez également affiner les niveaux et l'inclusion des messages de journalisation par paquetage avec votre framework de journalisation.

Télécharger l’outil