From fe03c85b97d8ba055d20e13643dc6720ac9570f1 Mon Sep 17 00:00:00 2001 From: "chenzhong.cz" Date: Tue, 8 Nov 2016 15:45:35 +0800 Subject: [PATCH] ensure a zip file by file content. --- .../java/jadx/core/utils/files/FileUtils.java | 20 ++++++++++++++++++ .../java/jadx/core/utils/files/InputFile.java | 21 +++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java b/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java index 775210698..b3fe04b16 100644 --- a/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java @@ -11,6 +11,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; @@ -100,4 +102,22 @@ public class FileUtils { makeDirsForFile(file); return file; } + + public static boolean isZipFile(final File file) throws IOException { + ZipFile zipFile = null; + try { + zipFile = new ZipFile(file); + return zipFile.entries().hasMoreElements(); + } catch (ZipException e) { + return false; + } finally { + if (zipFile != null) { + try { + zipFile.close(); + } catch (IOException e) { + LOG.error(e.getMessage()); + } + } + } + } } diff --git a/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java b/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java index c97ed5575..d68b5f84f 100644 --- a/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java +++ b/jadx-core/src/main/java/jadx/core/utils/files/InputFile.java @@ -52,20 +52,19 @@ public class InputFile { addDexFile(loadFromClassFile(file)); return; } - if (fileName.endsWith(".apk") || fileName.endsWith(".zip")) { - loadFromZip(".dex"); - return; - } - if (fileName.endsWith(".jar")) { - // check if jar contains '.dex' files + if (FileUtils.isZipFile(file)) { + // check if zip contains '.dex' files if (loadFromZip(".dex")) { return; } - addDexFile(loadFromJar(file)); - return; - } - if (fileName.endsWith(".aar")) { - loadFromZip(".jar"); + if (fileName.endsWith(".jar")) { + addDexFile(loadFromJar(file)); + return; + } + if (fileName.endsWith(".aar")) { + loadFromZip(".jar"); + return; + } return; } //throw new DecodeException("Unsupported input file format: " + file);