Commit bd05be6f authored by Donlon's avatar Donlon

Delete some changes

parent dc578f98
...@@ -201,13 +201,17 @@ public class Deobfuscator { ...@@ -201,13 +201,17 @@ public class Deobfuscator {
private void collectClassHierarchy(ClassNode cls, Set<ClassNode> collected) { private void collectClassHierarchy(ClassNode cls, Set<ClassNode> collected) {
boolean added = collected.add(cls); boolean added = collected.add(cls);
if (added) { if (added) {
ClassNode superClass = cls.getSuperClassNode(); ArgType superClass = cls.getSuperClass();
if (superClass != null) { if (superClass != null) {
collectClassHierarchy(superClass, collected); ClassNode superNode = cls.dex().resolveClass(superClass);
if (superNode != null) {
collectClassHierarchy(superNode, collected);
}
} }
for (ClassNode interfaceNode : cls.getInterfaceNodes()) { for (ArgType argType : cls.getInterfaces()) {
if(interfaceNode != null) { ClassNode interfaceNode = cls.dex().resolveClass(argType);
if (interfaceNode != null) {
collectClassHierarchy(interfaceNode, collected); collectClassHierarchy(interfaceNode, collected);
} }
} }
......
...@@ -2,13 +2,9 @@ package jadx.core.dex.info; ...@@ -2,13 +2,9 @@ package jadx.core.dex.info;
import com.android.dex.FieldId; import com.android.dex.FieldId;
import com.android.dx.io.instructions.DecodedInstruction;
import jadx.core.codegen.TypeGen; import jadx.core.codegen.TypeGen;
import jadx.core.dex.instructions.args.ArgType; import jadx.core.dex.instructions.args.ArgType;
import jadx.core.dex.nodes.ClassNode;
import jadx.core.dex.nodes.DexNode; import jadx.core.dex.nodes.DexNode;
import jadx.core.dex.nodes.FieldNode;
import jadx.core.dex.nodes.MethodNode;
public final class FieldInfo { public final class FieldInfo {
......
...@@ -48,9 +48,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { ...@@ -48,9 +48,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
private final ClassInfo clsInfo; private final ClassInfo clsInfo;
private final AccessInfo accessFlags; private final AccessInfo accessFlags;
private ArgType superClass; private ArgType superClass;
private ClassNode superClassNode;
private List<ArgType> interfaces; private List<ArgType> interfaces;
private List<ClassNode> interfaceNodes; //some element is null whose declaration is out of the dex files
private Map<ArgType, List<ArgType>> genericMap; private Map<ArgType, List<ArgType>> genericMap;
private final List<MethodNode> methods; private final List<MethodNode> methods;
...@@ -74,17 +72,12 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { ...@@ -74,17 +72,12 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
try { try {
if (cls.getSupertypeIndex() == DexNode.NO_INDEX) { if (cls.getSupertypeIndex() == DexNode.NO_INDEX) {
this.superClass = null; this.superClass = null;
this.superClassNode = null;
} else { } else {
this.superClass = dex.getType(cls.getSupertypeIndex()); this.superClass = dex.getType(cls.getSupertypeIndex());
this.superClassNode = dex.resolveClass(ClassInfo.fromType(dex.root(), superClass));
} }
this.interfaces = new ArrayList<>(cls.getInterfaces().length); this.interfaces = new ArrayList<>(cls.getInterfaces().length);
this.interfaceNodes = new ArrayList<>(cls.getInterfaces().length);
for (short interfaceIdx : cls.getInterfaces()) { for (short interfaceIdx : cls.getInterfaces()) {
ArgType intf = dex.getType(interfaceIdx); this.interfaces.add(dex.getType(interfaceIdx));
this.interfaces.add(intf);
this.interfaceNodes.add(dex.resolveClass(intf));
} }
if (cls.getClassDataOffset() != 0) { if (cls.getClassDataOffset() != 0) {
ClassData clsData = dex.readClassData(cls); ClassData clsData = dex.readClassData(cls);
...@@ -145,7 +138,6 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { ...@@ -145,7 +138,6 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
this.dex = dex; this.dex = dex;
this.clsInfo = clsInfo; this.clsInfo = clsInfo;
this.interfaces = Collections.emptyList(); this.interfaces = Collections.emptyList();
this.interfaceNodes = Collections.emptyList();
this.methods = Collections.emptyList(); this.methods = Collections.emptyList();
this.fields = Collections.emptyList(); this.fields = Collections.emptyList();
this.accessFlags = new AccessInfo(AccessFlags.ACC_PUBLIC | AccessFlags.ACC_SYNTHETIC, AFType.CLASS); this.accessFlags = new AccessInfo(AccessFlags.ACC_PUBLIC | AccessFlags.ACC_SYNTHETIC, AFType.CLASS);
...@@ -288,19 +280,10 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode { ...@@ -288,19 +280,10 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
return superClass; return superClass;
} }
@Nullable
public ClassNode getSuperClassNode() {
return superClassNode;
}
public List<ArgType> getInterfaces() { public List<ArgType> getInterfaces() {
return interfaces; return interfaces;
} }
public List<ClassNode> getInterfaceNodes() {
return interfaceNodes;
}
public Map<ArgType, List<ArgType>> getGenericMap() { public Map<ArgType, List<ArgType>> getGenericMap() {
return genericMap; return genericMap;
} }
......
...@@ -106,23 +106,27 @@ public class DexNode implements IDexNode { ...@@ -106,23 +106,27 @@ public class DexNode implements IDexNode {
} }
@Nullable @Nullable
MethodNode deepResolveMethod(@NotNull ClassNode cls, MethodInfo methodInfo) { MethodNode deepResolveMethod(@NotNull ClassNode cls, String signature) {
MethodNode field = cls.searchMethodByName(methodInfo.getShortId()); for (MethodNode m : cls.getMethods()) {
if (field != null) { if (m.getMethodInfo().getShortId().startsWith(signature)) {
return field; return m;
}
} }
MethodNode found; MethodNode found;
ClassNode superNode = cls.getSuperClassNode(); ArgType superClass = cls.getSuperClass();
if (superNode != null) { if (superClass != null) {
found = deepResolveMethod(superNode, methodInfo); ClassNode superNode = resolveClass(superClass);
if (found != null) { if (superNode != null) {
return found; found = deepResolveMethod(superNode, signature);
if (found != null) {
return found;
}
} }
} }
for (ClassNode interfaceNode : cls.getInterfaceNodes()) { for (ArgType iFaceType : cls.getInterfaces()) {
if(interfaceNode != null) { ClassNode iFaceNode = resolveClass(iFaceType);
found = deepResolveMethod(interfaceNode, methodInfo); if (iFaceNode != null) {
found = deepResolveMethod(iFaceNode, signature);
if (found != null) { if (found != null) {
return found; return found;
} }
...@@ -147,18 +151,21 @@ public class DexNode implements IDexNode { ...@@ -147,18 +151,21 @@ public class DexNode implements IDexNode {
if (field != null) { if (field != null) {
return field; return field;
} }
FieldNode found; FieldNode found;
ClassNode superNode = cls.getSuperClassNode(); ArgType superClass = cls.getSuperClass();
if (superNode != null) { if (superClass != null) {
found = deepResolveField(superNode, fieldInfo); ClassNode superNode = resolveClass(superClass);
if (found != null) { if (superNode != null) {
return found; found = deepResolveField(superNode, fieldInfo);
if (found != null) {
return found;
}
} }
} }
for (ClassNode interfaceNode : cls.getInterfaceNodes()) { for (ArgType iFaceType : cls.getInterfaces()) {
if(interfaceNode != null) { ClassNode iFaceNode = resolveClass(iFaceType);
found = deepResolveField(interfaceNode, fieldInfo); if (iFaceNode != null) {
found = deepResolveField(iFaceNode, fieldInfo);
if (found != null) { if (found != null) {
return found; return found;
} }
......
...@@ -86,12 +86,9 @@ public class RootNode { ...@@ -86,12 +86,9 @@ public class RootNode {
} }
ResTableParser parser = new ResTableParser(); ResTableParser parser = new ResTableParser();
try { try {
ResourcesLoader.decodeStream(arsc, new ResourcesLoader.ResourceDecoder() { ResourcesLoader.decodeStream(arsc, (size, is) -> {
@Override parser.decode(is);
public ResContainer decode(long size, InputStream is) throws IOException { return null;
parser.decode(is);
return null;
}
}); });
} catch (JadxException e) { } catch (JadxException e) {
LOG.error("Failed to parse '.arsc' file", e); LOG.error("Failed to parse '.arsc' file", e);
...@@ -183,24 +180,7 @@ public class RootNode { ...@@ -183,24 +180,7 @@ public class RootNode {
if (cls == null) { if (cls == null) {
return null; return null;
} }
MethodNode resolved; return cls.dex().deepResolveMethod(cls, mth.makeSignature(false));
//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;
} }
@Nullable @Nullable
...@@ -209,24 +189,7 @@ public class RootNode { ...@@ -209,24 +189,7 @@ public class RootNode {
if (cls == null) { if (cls == null) {
return null; return null;
} }
FieldNode resolved; return cls.dex().deepResolveField(cls, field);
//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;
} }
public List<DexNode> getDexNodes() { public List<DexNode> getDexNodes() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment