diff --git a/jadx-core/build.gradle b/jadx-core/build.gradle index 90d6784e8..d29bcccdd 100644 --- a/jadx-core/build.gradle +++ b/jadx-core/build.gradle @@ -1,8 +1,7 @@ ext.jadxClasspath = 'clsp-data/android-4.3.jar' dependencies { - compile 'com.google.android.tools:dx:1.7' - + compile files('lib/dx-1.8.jar') runtime files(jadxClasspath) } diff --git a/jadx-core/lib/dx-1.8.jar b/jadx-core/lib/dx-1.8.jar new file mode 100644 index 000000000..6f0a0a730 Binary files /dev/null and b/jadx-core/lib/dx-1.8.jar differ diff --git a/jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java b/jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java index be78db638..5c70602e1 100644 --- a/jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java @@ -3,7 +3,7 @@ package jadx.core.dex.info; import jadx.core.dex.instructions.args.ArgType; import jadx.core.dex.nodes.DexNode; -import com.android.dx.io.FieldId; +import com.android.dex.FieldId; public class FieldInfo { diff --git a/jadx-core/src/main/java/jadx/core/dex/info/MethodInfo.java b/jadx-core/src/main/java/jadx/core/dex/info/MethodInfo.java index 0bcd81314..fec1b5623 100644 --- a/jadx-core/src/main/java/jadx/core/dex/info/MethodInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/info/MethodInfo.java @@ -7,8 +7,8 @@ import jadx.core.utils.Utils; import java.util.List; -import com.android.dx.io.MethodId; -import com.android.dx.io.ProtoId; +import com.android.dex.MethodId; +import com.android.dex.ProtoId; public final class MethodInfo { diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java b/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java index 81d059588..51d50e1b7 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/InsnDecoder.java @@ -14,7 +14,7 @@ import jadx.core.utils.exceptions.DecodeException; import java.io.EOFException; -import com.android.dx.io.Code; +import com.android.dex.Code; import com.android.dx.io.OpcodeInfo; import com.android.dx.io.Opcodes; import com.android.dx.io.instructions.DecodedInstruction; diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java index 28c49bace..8e5c9db76 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java @@ -31,10 +31,10 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.android.dx.io.ClassData; -import com.android.dx.io.ClassData.Field; -import com.android.dx.io.ClassData.Method; -import com.android.dx.io.ClassDef; +import com.android.dex.ClassData; +import com.android.dex.ClassData.Field; +import com.android.dex.ClassData.Method; +import com.android.dex.ClassDef; public class ClassNode extends LineAttrNode implements ILoadable { private static final Logger LOG = LoggerFactory.getLogger(ClassNode.class); diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java index 2abc8b8a2..c9aae57a4 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java @@ -13,23 +13,23 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.android.dx.io.ClassData; -import com.android.dx.io.ClassData.Method; -import com.android.dx.io.ClassDef; -import com.android.dx.io.Code; -import com.android.dx.io.DexBuffer; -import com.android.dx.io.DexBuffer.Section; -import com.android.dx.io.FieldId; -import com.android.dx.io.MethodId; -import com.android.dx.io.ProtoId; -import com.android.dx.merge.TypeList; +import com.android.dex.ClassData; +import com.android.dex.ClassData.Method; +import com.android.dex.ClassDef; +import com.android.dex.Code; +import com.android.dex.Dex; +import com.android.dex.FieldId; +import com.android.dex.MethodId; +import com.android.dex.ProtoId; +import com.android.dex.TypeList; +import com.android.dex.TableOfContents; public class DexNode { public static final int NO_INDEX = -1; private final RootNode root; - private final DexBuffer dexBuf; + private final Dex dexBuf; private final List classes = new ArrayList(); private final String[] strings; @@ -116,7 +116,7 @@ public class DexNode { return dexBuf.readCode(mth); } - public Section openSection(int offset) { + public Dex.Section openSection(int offset) { return dexBuf.open(offset); } diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java index 72f8c231c..5d46c973e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java @@ -6,7 +6,7 @@ import jadx.core.dex.info.AccessInfo.AFType; import jadx.core.dex.info.FieldInfo; import jadx.core.dex.instructions.args.ArgType; -import com.android.dx.io.ClassData.Field; +import com.android.dex.ClassData.Field; public class FieldNode extends LineAttrNode { diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java index 3a0a8cd0d..395b93982 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java @@ -35,10 +35,10 @@ import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.android.dx.io.ClassData.Method; -import com.android.dx.io.Code; -import com.android.dx.io.Code.CatchHandler; -import com.android.dx.io.Code.Try; +import com.android.dex.ClassData.Method; +import com.android.dex.Code; +import com.android.dex.Code.CatchHandler; +import com.android.dex.Code.Try; public class MethodNode extends LineAttrNode implements ILoadable { private static final Logger LOG = LoggerFactory.getLogger(MethodNode.class); @@ -248,7 +248,7 @@ public class MethodNode extends LineAttrNode implements ILoadable { // but in maven repository still old version Set handlerSet = new HashSet(tries.length); for (Try aTry : tries) { - handlerSet.add(aTry.getHandlerOffset()); + handlerSet.add(aTry.getCatchHandlerIndex()); } List handlerList = new ArrayList(catchBlocks.length); handlerList.addAll(handlerSet); @@ -306,7 +306,7 @@ public class MethodNode extends LineAttrNode implements ILoadable { // attach TRY_ENTER, TRY_LEAVE attributes to instructions for (Try aTry : tries) { - int catchNum = handlerList.indexOf(aTry.getHandlerOffset()); + int catchNum = handlerList.indexOf(aTry.getCatchHandlerIndex()); TryCatchBlock block = catches.get(catchNum); int offset = aTry.getStartAddress(); int end = offset + aTry.getInstructionCount() - 1; diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/AnnotationsParser.java b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/AnnotationsParser.java index 6c9256154..c2fcbe1a5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/AnnotationsParser.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/AnnotationsParser.java @@ -16,7 +16,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import com.android.dx.io.DexBuffer.Section; +import com.android.dex.Dex; public class AnnotationsParser { @@ -35,7 +35,7 @@ public class AnnotationsParser { } public void parse(int offset) throws DecodeException { - Section section = dex.openSection(offset); + Dex.Section section = dex.openSection(offset); // TODO read as unsigned int int classAnnotationsOffset = section.readInt(); @@ -60,7 +60,7 @@ public class AnnotationsParser { for (int i = 0; i < annotatedParametersCount; i++) { MethodNode mth = cls.searchMethodById(section.readInt()); // read annotation ref list - Section ss = dex.openSection(section.readInt()); + Dex.Section ss = dex.openSection(section.readInt()); int size = ss.readInt(); MethodParameters params = new MethodParameters(size); for (int j = 0; j < size; j++) { @@ -71,18 +71,18 @@ public class AnnotationsParser { } private AnnotationsList readAnnotationSet(int offset) throws DecodeException { - Section section = dex.openSection(offset); + Dex.Section section = dex.openSection(offset); int size = section.readInt(); List list = new ArrayList(size); for (int i = 0; i < size; i++) { - Section anSection = dex.openSection(section.readInt()); + Dex.Section anSection = dex.openSection(section.readInt()); Annotation a = readAnnotation(dex, anSection, true); list.add(a); } return new AnnotationsList(list); } - public static Annotation readAnnotation(DexNode dex, Section s, boolean readVisibility) throws DecodeException { + public static Annotation readAnnotation(DexNode dex, Dex.Section s, boolean readVisibility) throws DecodeException { EncValueParser parser = new EncValueParser(dex, s); Visibility visibility = null; if (readVisibility) { diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/DebugInfoParser.java b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/DebugInfoParser.java index f91d1d3c5..715f73cc8 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/DebugInfoParser.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/DebugInfoParser.java @@ -10,7 +10,7 @@ import jadx.core.utils.exceptions.DecodeException; import java.util.List; -import com.android.dx.io.DexBuffer.Section; +import com.android.dex.Dex; public class DebugInfoParser { @@ -33,7 +33,7 @@ public class DebugInfoParser { private static final int DBG_LINE_RANGE = 15; private final MethodNode mth; - private final Section section; + private final Dex.Section section; private final DexNode dex; private final LocalVar[] locals; diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/EncValueParser.java b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/EncValueParser.java index 0ae5bb082..e453fef25 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/EncValueParser.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/EncValueParser.java @@ -8,16 +8,38 @@ import jadx.core.utils.exceptions.DecodeException; import java.util.ArrayList; import java.util.List; -import com.android.dx.io.DexBuffer.Section; -import com.android.dx.io.EncodedValueReader; -import com.android.dx.util.Leb128Utils; +import com.android.dex.Dex; +import com.android.dex.EncodedValue; +import com.android.dex.EncodedValueReader; +import com.android.dex.Leb128; +import com.android.dex.util.ByteInput; -public class EncValueParser extends EncodedValueReader { +public class EncValueParser { + public static final int ENCODED_BYTE = 0x00; + public static final int ENCODED_SHORT = 0x02; + public static final int ENCODED_CHAR = 0x03; + public static final int ENCODED_INT = 0x04; + public static final int ENCODED_LONG = 0x06; + public static final int ENCODED_FLOAT = 0x10; + public static final int ENCODED_DOUBLE = 0x11; + public static final int ENCODED_STRING = 0x17; + public static final int ENCODED_TYPE = 0x18; + public static final int ENCODED_FIELD = 0x19; + public static final int ENCODED_ENUM = 0x1b; + public static final int ENCODED_METHOD = 0x1a; + public static final int ENCODED_ARRAY = 0x1c; + public static final int ENCODED_ANNOTATION = 0x1d; + public static final int ENCODED_NULL = 0x1e; + public static final int ENCODED_BOOLEAN = 0x1f; + + protected final Dex.Section in; + private final DexNode dex; - public EncValueParser(DexNode dex, Section in) { - super(in); + public EncValueParser(DexNode dex, Dex.Section in) { + //super(in); + this.in = in; this.dex = dex; } @@ -64,7 +86,7 @@ public class EncValueParser extends EncodedValueReader { return FieldInfo.fromDex(dex, parseUnsignedInt(size)); case ENCODED_ARRAY: - int count = Leb128Utils.readUnsignedLeb128(in); + int count = Leb128.readUnsignedLeb128(in); List values = new ArrayList(count); for (int i = 0; i < count; i++) { values.add(parseValue()); @@ -72,7 +94,7 @@ public class EncValueParser extends EncodedValueReader { return values; case ENCODED_ANNOTATION: - return AnnotationsParser.readAnnotation(dex, (Section) in, false); + return AnnotationsParser.readAnnotation(dex, (Dex.Section) in, false); } throw new DecodeException("Unknown encoded value type: 0x" + Integer.toHexString(type)); } diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/StaticValuesParser.java b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/StaticValuesParser.java index cad258caf..42ecb09b5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/StaticValuesParser.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/StaticValuesParser.java @@ -6,17 +6,17 @@ import jadx.core.utils.exceptions.DecodeException; import java.util.List; -import com.android.dx.io.DexBuffer.Section; -import com.android.dx.util.Leb128Utils; +import com.android.dex.Dex; +import com.android.dex.Leb128; public class StaticValuesParser extends EncValueParser { - public StaticValuesParser(DexNode dex, Section in) { + public StaticValuesParser(DexNode dex, Dex.Section in) { super(dex, in); } public int processFields(List fields) throws DecodeException { - int count = Leb128Utils.readUnsignedLeb128(in); + int count = Leb128.readUnsignedLeb128(in); for (int i = 0; i < count; i++) { Object value = parseValue(); fields.get(i).getAttributes().add(new FieldValueAttr(value)); 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 354a1bb08..16c43b1cb 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 @@ -13,13 +13,13 @@ import java.util.zip.ZipFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.android.dx.io.DexBuffer; +import com.android.dex.Dex; public class InputFile { private static final Logger LOG = LoggerFactory.getLogger(InputFile.class); private final File file; - private final DexBuffer dexBuf; + private final Dex dexBuf; public InputFile(File file) throws IOException, DecodeException { this.file = file; @@ -29,9 +29,9 @@ public class InputFile { String fileName = file.getName(); if (fileName.endsWith(".dex")) { - this.dexBuf = new DexBuffer(file); + this.dexBuf = new Dex(file); } else if (fileName.endsWith(".apk")) { - this.dexBuf = new DexBuffer(openDexFromApk(file)); + this.dexBuf = new Dex(openDexFromApk(file)); } else if (fileName.endsWith(".class") || fileName.endsWith(".jar")) { try { LOG.info("converting to dex: {} ...", fileName); @@ -43,7 +43,7 @@ public class InputFile { } else if (j2d.isError()) { LOG.warn("dx message: " + j2d.getDxErrors()); } - this.dexBuf = new DexBuffer(ba); + this.dexBuf = new Dex(ba); } catch (Throwable e) { throw new DecodeException( "java class to dex conversion error:\n " + e.getMessage(), e); @@ -76,7 +76,7 @@ public class InputFile { return file; } - public DexBuffer getDexBuffer() { + public Dex getDexBuffer() { return dexBuf; } diff --git a/version b/version index 8f0916f76..4b9fcbec1 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.5.0 +0.5.1