Skip to content

Commit

Permalink
Merge b4472fd into b2f41e9
Browse files Browse the repository at this point in the history
  • Loading branch information
bigfool committed May 2, 2016
2 parents b2f41e9 + b4472fd commit 39a7c16
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 2 deletions.
Binary file added .DS_Store
Binary file not shown.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Command line and GUI tools for produce Java source code from Android Dex and Apk

![jadx-gui screenshot](http://skylot.github.io/jadx/jadx-gui.png)


### Downloads
- [unstable](https://drone.io/github.com/skylot/jadx/files)
- from [github](https://github.com/skylot/jadx/releases)
Expand Down
89 changes: 89 additions & 0 deletions jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@
import java.io.OutputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
Expand Down Expand Up @@ -100,4 +105,88 @@ public static File prepareFile(File file) {
makeDirsForFile(file);
return file;
}

public static String bytesToHex(byte[] bytes) {
char[] hexArray = "0123456789abcdef".toCharArray();
if (bytes == null || bytes.length <= 0) {
return null;
}
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}

public static boolean isZipfile(File file) {
boolean isZipfile = false;
InputStream is = null;
try {
byte[] headers = new byte[4];
is = new FileInputStream(file);
is.read(headers, 0, 4);
System.out.println(bytesToHex(headers));
String headerString = bytesToHex(headers);
if (headerString.equals("504b0304")) {
isZipfile = true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return isZipfile;
}

public static List<String> getZipfileList(File file) {
List<String> filelist = new ArrayList<String>();
ZipFile zipFile = null;
try {
zipFile = new ZipFile(file);
Enumeration<? extends ZipEntry> entries = zipFile.entries();

while(entries.hasMoreElements()){
ZipEntry entry = entries.nextElement();
filelist.add(entry.getName());
System.out.println(entry.getName());
}
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}

return filelist;
}

public static boolean isApkfile(File file) {
boolean isApkfile = false;
if (isZipfile(file)) {
List<String> filelist = getZipfileList(file);
if (filelist.contains("AndroidManifest.xml") && filelist.contains("classes.dex")) {
isApkfile = true;
}
}
return isApkfile;
}

public static boolean isZipDexfile(File file) {
boolean isZipDexFile = false;
if (isZipfile(file)) {
List<String> filelist = getZipfileList(file);
if (filelist.contains("classes.dex")) {
isZipDexFile = true;
}
}

return isZipDexFile;
}
}
7 changes: 5 additions & 2 deletions jadx-core/src/main/java/jadx/core/utils/files/InputFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;


import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.android.dex.Dex;

import static jadx.core.utils.files.FileUtils.close;
import static jadx.core.utils.files.FileUtils.*;

public class InputFile {
private static final Logger LOG = LoggerFactory.getLogger(InputFile.class);
Expand All @@ -44,6 +45,7 @@ private InputFile(File file) throws IOException, DecodeException {

private void searchDexFiles() throws IOException, DecodeException {
String fileName = file.getName();

if (fileName.endsWith(".dex")) {
addDexFile(new Dex(file));
return;
Expand All @@ -52,7 +54,8 @@ private void searchDexFiles() throws IOException, DecodeException {
addDexFile(loadFromClassFile(file));
return;
}
if (fileName.endsWith(".apk") || fileName.endsWith(".zip")) {

if (fileName.endsWith(".apk") || fileName.endsWith(".zip") || isApkfile(file) || isZipDexfile(file)) {
loadFromZip(".dex");
return;
}
Expand Down

0 comments on commit 39a7c16

Please sign in to comment.