From bd05be6fb636e01f4389ec681c9ecdacd44be913 Mon Sep 17 00:00:00 2001 From: Donlon Date: Wed, 22 Aug 2018 12:14:29 +0800 Subject: [PATCH] Delete some changes --- .../java/jadx/core/deobf/Deobfuscator.java | 12 ++-- .../java/jadx/core/dex/info/FieldInfo.java | 4 -- .../java/jadx/core/dex/nodes/ClassNode.java | 19 +------ .../java/jadx/core/dex/nodes/DexNode.java | 55 +++++++++++-------- .../java/jadx/core/dex/nodes/RootNode.java | 47 ++-------------- 5 files changed, 45 insertions(+), 92 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 6dcfaecb5..9480ee147 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -201,13 +201,17 @@ public class Deobfuscator { private void collectClassHierarchy(ClassNode cls, Set collected) { boolean added = collected.add(cls); if (added) { - ClassNode superClass = cls.getSuperClassNode(); + ArgType superClass = cls.getSuperClass(); if (superClass != null) { - collectClassHierarchy(superClass, collected); + ClassNode superNode = cls.dex().resolveClass(superClass); + if (superNode != null) { + collectClassHierarchy(superNode, collected); + } } - for (ClassNode interfaceNode : cls.getInterfaceNodes()) { - if(interfaceNode != null) { + for (ArgType argType : cls.getInterfaces()) { + ClassNode interfaceNode = cls.dex().resolveClass(argType); + if (interfaceNode != null) { collectClassHierarchy(interfaceNode, collected); } } 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 acb8feeef..6d4844f70 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 @@ -2,13 +2,9 @@ package jadx.core.dex.info; import com.android.dex.FieldId; -import com.android.dx.io.instructions.DecodedInstruction; import jadx.core.codegen.TypeGen; import jadx.core.dex.instructions.args.ArgType; -import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.DexNode; -import jadx.core.dex.nodes.FieldNode; -import jadx.core.dex.nodes.MethodNode; public final class FieldInfo { 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 02d167257..9fb494a25 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 @@ -48,9 +48,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { private final ClassInfo clsInfo; private final AccessInfo accessFlags; private ArgType superClass; - private ClassNode superClassNode; private List interfaces; - private List interfaceNodes; //some element is null whose declaration is out of the dex files private Map> genericMap; private final List methods; @@ -74,17 +72,12 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { try { if (cls.getSupertypeIndex() == DexNode.NO_INDEX) { this.superClass = null; - this.superClassNode = null; } else { this.superClass = dex.getType(cls.getSupertypeIndex()); - this.superClassNode = dex.resolveClass(ClassInfo.fromType(dex.root(), superClass)); } this.interfaces = new ArrayList<>(cls.getInterfaces().length); - this.interfaceNodes = new ArrayList<>(cls.getInterfaces().length); for (short interfaceIdx : cls.getInterfaces()) { - ArgType intf = dex.getType(interfaceIdx); - this.interfaces.add(intf); - this.interfaceNodes.add(dex.resolveClass(intf)); + this.interfaces.add(dex.getType(interfaceIdx)); } if (cls.getClassDataOffset() != 0) { ClassData clsData = dex.readClassData(cls); @@ -145,7 +138,6 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { this.dex = dex; this.clsInfo = clsInfo; this.interfaces = Collections.emptyList(); - this.interfaceNodes = Collections.emptyList(); this.methods = Collections.emptyList(); this.fields = Collections.emptyList(); this.accessFlags = new AccessInfo(AccessFlags.ACC_PUBLIC | AccessFlags.ACC_SYNTHETIC, AFType.CLASS); @@ -288,19 +280,10 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { return superClass; } - @Nullable - public ClassNode getSuperClassNode() { - return superClassNode; - } - public List getInterfaces() { return interfaces; } - public List getInterfaceNodes() { - return interfaceNodes; - } - public Map> getGenericMap() { return genericMap; } 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 b6f4008cc..61156928f 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 @@ -106,23 +106,27 @@ public class DexNode implements IDexNode { } @Nullable - MethodNode deepResolveMethod(@NotNull ClassNode cls, MethodInfo methodInfo) { - MethodNode field = cls.searchMethodByName(methodInfo.getShortId()); - if (field != null) { - return field; - } - - MethodNode found; - ClassNode superNode = cls.getSuperClassNode(); - if (superNode != null) { - found = deepResolveMethod(superNode, methodInfo); - if (found != null) { - return found; + MethodNode deepResolveMethod(@NotNull ClassNode cls, String signature) { + for (MethodNode m : cls.getMethods()) { + if (m.getMethodInfo().getShortId().startsWith(signature)) { + return m; } } - for (ClassNode interfaceNode : cls.getInterfaceNodes()) { - if(interfaceNode != null) { - found = deepResolveMethod(interfaceNode, methodInfo); + MethodNode found; + ArgType superClass = cls.getSuperClass(); + if (superClass != null) { + ClassNode superNode = resolveClass(superClass); + if (superNode != null) { + found = deepResolveMethod(superNode, signature); + if (found != null) { + return found; + } + } + } + for (ArgType iFaceType : cls.getInterfaces()) { + ClassNode iFaceNode = resolveClass(iFaceType); + if (iFaceNode != null) { + found = deepResolveMethod(iFaceNode, signature); if (found != null) { return found; } @@ -147,18 +151,21 @@ public class DexNode implements IDexNode { if (field != null) { return field; } - FieldNode found; - ClassNode superNode = cls.getSuperClassNode(); - if (superNode != null) { - found = deepResolveField(superNode, fieldInfo); - if (found != null) { - return found; + ArgType superClass = cls.getSuperClass(); + if (superClass != null) { + ClassNode superNode = resolveClass(superClass); + if (superNode != null) { + found = deepResolveField(superNode, fieldInfo); + if (found != null) { + return found; + } } } - for (ClassNode interfaceNode : cls.getInterfaceNodes()) { - if(interfaceNode != null) { - found = deepResolveField(interfaceNode, fieldInfo); + for (ArgType iFaceType : cls.getInterfaces()) { + ClassNode iFaceNode = resolveClass(iFaceType); + if (iFaceNode != null) { + found = deepResolveField(iFaceNode, fieldInfo); if (found != null) { return found; } diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java index 6207e00e5..84e38e6b1 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java @@ -86,12 +86,9 @@ public class RootNode { } ResTableParser parser = new ResTableParser(); try { - ResourcesLoader.decodeStream(arsc, new ResourcesLoader.ResourceDecoder() { - @Override - public ResContainer decode(long size, InputStream is) throws IOException { - parser.decode(is); - return null; - } + ResourcesLoader.decodeStream(arsc, (size, is) -> { + parser.decode(is); + return null; }); } catch (JadxException e) { LOG.error("Failed to parse '.arsc' file", e); @@ -183,24 +180,7 @@ public class RootNode { if (cls == null) { return null; } - MethodNode resolved; - - //most of the time, the method node could be found in current dex. - DexNode declDex = cls.dex(); - resolved = declDex.deepResolveMethod(cls, mth); - if (resolved != null){ - return resolved; - } - for (DexNode dexNode : dexNodes) { - if(dexNodes == declDex) { - continue; - } - resolved = dexNode.deepResolveMethod(cls, mth); - if (resolved != null){ - return resolved; - } - } - return null; + return cls.dex().deepResolveMethod(cls, mth.makeSignature(false)); } @Nullable @@ -209,24 +189,7 @@ public class RootNode { if (cls == null) { return null; } - FieldNode resolved; - - //most of the time, the field node could be found in current dex. - DexNode declDex = cls.dex(); - resolved = declDex.deepResolveField(cls, field); - if (resolved != null){ - return resolved; - } - for (DexNode dexNode : dexNodes) { - if(dexNodes == declDex) { - continue; - } - resolved = dexNode.deepResolveField(cls, field); - if (resolved != null){ - return resolved; - } - } - return null; + return cls.dex().deepResolveField(cls, field); } public List getDexNodes() {