Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/shoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12
Utilidades de Propósito GeneralUtilidades y Frameworks
GitHubshoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12

zeroturnaround__zt-zip_CVE-2018-1002201_1-12

Librería Java que proporciona métodos convenientes para la manipulación de archivos ZIP, incluyendo empaquetado, desempacado, iteración de entradas, transformación y comparación.

Ver Repositorio
3hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

ZIP - métodos de conveniencia

Integración continua

Build Status

Descripción general rápida

El proyecto fue iniciado y codificado por Rein Raudjärv cuando necesitaba procesar un gran conjunto de archivos ZIP grandes para los componentes internos de LiveRebel. Poco después empezamos a utilizar la utilidad en otros proyectos por su facilidad de uso y porque simplemente funcionaba.

El proyecto está construido utilizando los paquetes java.util.zip.* para el acceso basado en flujos. También se admite la mayoría de los métodos de conveniencia para el uso del sistema de archivos.

Instalación

Maven Central

Los artefactos del proyecto están disponibles en el Repositorio Central de Maven. Para incluirlo en tu proyecto Maven, tienes que especificar la dependencia.

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

Ten en cuenta que 1.8 es la última versión compatible con Java 1.4. Desde entonces se requiere Java 1.5.

Antecedentes

Teníamos los siguientes requisitos funcionales:

  1. empaquetar y desempaquetar directorios de forma recursiva
  2. incluir/excluir entradas
  3. renombrar entradas
  4. empaquetar/desempaquetar en el mismo lugar: el ZIP se convierte en directorio y viceversa
  5. iterar a través de las entradas del ZIP
  6. añadir o reemplazar entradas desde archivos o matrices de bytes
  7. transformar entradas del ZIP
  8. comparar dos archivos: comparar todas las entradas ignorando las marcas de tiempo

y estos requisitos no funcionales:

  1. usar las API existentes tanto como sea posible
  2. ser sencillo de usar
  3. ser eficaz en su uso: no recorrer un archivo ZIP completo si solo se necesita una única entrada
  4. ser seguro de usar: no permitir que el usuario deje flujos abiertos y mantenga archivos bloqueados
  5. no declarar excepciones
  6. ser compatible con Java 1.5

Ejemplos

Desempaquetado

Comprobar si una entrada existe en un archivo ZIP

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

Extraer una entrada de un archivo ZIP a una matriz de bytes

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

Extraer una entrada de un archivo ZIP con un Charset específico a una matriz de bytes

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

Extraer una entrada de un archivo ZIP al sistema de archivos

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

Extraer un archivo ZIP

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

Extraer un archivo ZIP que se convierte en un directorio

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

Extraer un directorio de un archivo ZIP incluyendo el nombre del directorio

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

Extraer un directorio de un archivo ZIP excluyendo el nombre del directorio

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

Extraer archivos de un archivo ZIP que coincidan con un patrón de nombre

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

Imprimir los nombres de las entradas .class en un archivo 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());
  }
});

Imprimir las entradas .txt en un archivo ZIP (utiliza 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);
    }
  }
});

Empaquetado

Comprimir un directorio en un archivo ZIP

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

Comprimir un directorio que se convierte en un archivo ZIP

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

Comprimir un directorio en un archivo ZIP con un directorio padre

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

Añadir una entrada desde un archivo a un archivo ZIP

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

Añadir una entrada desde una matriz de bytes a un archivo ZIP

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

Añadir una entrada desde un archivo y desde una matriz de bytes a un archivo 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"));

Añadir una entrada desde un archivo y desde una matriz de bytes a un flujo de salida

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

Reemplazar una entrada de un archivo ZIP desde un archivo

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

Reemplazar una entrada de un archivo ZIP desde una matriz de bytes

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

Reemplazar una entrada de un archivo ZIP desde un archivo y una matriz de bytes

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

Añadir o reemplazar entradas en un archivo 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);

Transformación

Transformar una entrada de un archivo ZIP a mayúsculas

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

Comparación

Comparar dos archivos ZIP (ignorando las marcas de tiempo de las entradas)

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

Comparar dos entradas de archivos ZIP con el mismo nombre (ignorando las marcas de tiempo de las entradas)

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

Comparar dos entradas de archivos ZIP con nombres diferentes (ignorando las marcas de tiempo de las entradas)

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

Depuración

La biblioteca utiliza el framework de registro slf4j-api. Todas las declaraciones de registro son de nivel DEBUG o TRACE. Dependiendo del framework de registro que estés utilizando, un simple -Dorg.slf4j.simpleLogger.defaultLogLevel=debug o System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); bastará para mostrar las declaraciones de registro de la biblioteca zt-zip. Puedes ajustar aún más los niveles y la inclusión de mensajes de registro por paquete con tu framework de registro.

Descargar herramienta