Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
zeroturnaround__zt-zip_CVE-2018-1002201_1-12 | Kitploit
Strumenti/GitHubGitHub/shoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12
Utilità GenericheUtilità e Framework
GitHubshoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12

zeroturnaround__zt-zip_CVE-2018-1002201_1-12

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
1 anno faNon ancora revisionato

ZIP - metodi di convenienza

=========================

Integrazione continua

Build Status

Panoramica rapida

Il progetto è stato avviato e scritto da Rein Raudjärv quando aveva bisogno di elaborare un grande insieme di grandi archivi ZIP per i componenti interni di LiveRebel. Subito dopo abbiamo iniziato a usare l'utility in altri progetti grazie alla facilità d'uso e funzionava e basta.

Il progetto è realizzato usando i pacchetti java.util.zip.* per l'accesso basato su stream. È supportata anche la maggior parte dei metodi di convenienza per l'uso con il filesystem.

Installazione

Maven Central

Gli artefatti del progetto sono disponibili nel Maven Central Repository. Per includerlo nel tuo progetto Maven devi specificare la dipendenza.

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

Nota che la 1.8 è l'ultima release compatibile con Java 1.4. Da allora è richiesto Java 1.5.

Contesto

Avevamo i seguenti requisiti funzionali:

  1. comprimere e decomprimere directory ricorsivamente
  2. includere/escludere voci
  3. rinominare voci
  4. compressione/decompressione in place - la ZIP diventa una directory e viceversa
  5. iterare attraverso le voci della ZIP
  6. aggiungere o sostituire voci da file o array di byte
  7. trasformare le voci della ZIP
  8. confrontare due archivi - confrontare tutte le voci ignorando i timestamp

e questi requisiti non funzionali:

  1. usare il più possibile le API esistenti
  2. essere semplice da usare
  3. essere efficiente da usare - non attraversare un intero file ZIP se serve solo una singola voce
  4. essere sicuro da usare - non consentire all'utente di lasciare stream aperti e file bloccati
  5. non dichiarare eccezioni
  6. essere compatibile con Java 1.5

Esempi

Decompressione

Verificare se una voce esiste in un archivio ZIP

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

Estrarre una voce da un archivio ZIP in un array di byte

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

Estrarre una voce da un archivio ZIP con uno Charset specifico in un array di byte

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

Estrarre una voce da un archivio ZIP nel filesystem

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

Estrarre un archivio ZIP

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

Estrarre un archivio ZIP che diventa una directory

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

Estrarre una directory da un archivio ZIP includendo il nome della directory

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;
  }
});

Estrarre una directory da un archivio ZIP escludendo il nome della directory

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;
  }
});

Estrarre da un archivio ZIP i file che corrispondono a un pattern di nome

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;
    }
  }
});

Stampare i nomi delle voci .class in un archivio 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());
  }
});

Stampare le voci .txt in un archivio ZIP (usa IoUtils da 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);
    }
  }
});

Compressione

Comprimere una directory in un archivio ZIP

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

Comprimere una directory che diventa un archivio ZIP

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

Comprimere una directory in un archivio ZIP con una directory padre

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

Aggiungere una voce da file a un archivio ZIP

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

Aggiungere una voce da array di byte a un archivio ZIP

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

Aggiungere una voce da file e da array di byte a un archivio 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"));

Aggiungere una voce da file e da array di byte a un output stream

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);
}

Sostituire una voce di un archivio ZIP da file

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

Sostituire una voce di un archivio ZIP da array di byte

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

Sostituire una voce di un archivio ZIP da file e array di byte

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"));

Aggiungere o sostituire voci in un archivio 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);

Trasformazione

Trasformare una voce di un archivio ZIP in maiuscolo

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"));

Confronto

Confrontare due archivi ZIP (ignorando i timestamp delle voci)

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

Confrontare due voci di archivi ZIP con lo stesso nome (ignorando i timestamp delle voci)

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

Confrontare due voci di archivi ZIP con nomi diversi (ignorando i timestamp delle voci)

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

Debugging

La libreria usa il framework di logging slf4j-api. Tutte le istruzioni di log sono di livello DEBUG o TRACE. A seconda del framework di logging che stai usando, un semplice -Dorg.slf4j.simpleLogger.defaultLogLevel=debug o System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); farà al caso tuo per mostrare le istruzioni di log della libreria zt-zip. Puoi inoltre regolare con precisione i livelli e l'inclusione dei messaggi di log per pacchetto con il tuo framework di logging.

Scarica lo strumento