diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java index a6aa91b49..bd702a678 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java @@ -216,6 +216,12 @@ public class ClassModifier extends AbstractVisitor { MethodInfo callMth = ((InvokeNode) insn).getCallMth(); MethodNode wrappedMth = mth.root().deepResolveMethod(callMth); if (wrappedMth != null) { + // all args must be registers passed from method args (allow only casts insns) + for (InsnArg arg : insn.getArguments()) { + if (!registersAndCastsOnly(arg)) { + return false; + } + } String alias = mth.getAlias(); if (!wrappedMth.getAlias().equals(alias) && wrappedMth.isVirtual()) { wrappedMth.getMethodInfo().setAlias(alias); @@ -226,6 +232,19 @@ public class ClassModifier extends AbstractVisitor { return false; } + private static boolean registersAndCastsOnly(InsnArg arg) { + if (arg.isRegister()) { + return true; + } + if (arg.isInsnWrap()) { + InsnNode wrapInsn = ((InsnWrapArg) arg).getWrapInsn(); + if (wrapInsn.getType() == InsnType.CHECK_CAST) { + return registersAndCastsOnly(wrapInsn.getArg(0)); + } + } + return false; + } + private static boolean isMethodUnique(ClassNode cls, MethodNode mth) { MethodInfo mi = mth.getMethodInfo(); for (MethodNode otherMth : cls.getMethods()) {