我正在尝试创建简单的 Java 混淆器,以便使用 OW2 的 ASM 在运行时修改字节码来创建它。
我的目标是重命名每个类、字段和方法名称,但我无法弄清楚如何轻松检测超类中是否存在 MethodNode
我目前正在递归循环当前类中的每个超类,并查看是否存在具有相同名称和签名的方法
private boolean isSuperMethod(MethodNode method, ClassNode node) {
if(node.superName == null)
return false;
boolean exists = false;
ClassNode cn = null;
try {
ClassReader cr = new ClassReader(node.superName);
cn = new ClassNode();
cr.accept(cn, 0);
} catch (IOException e) {
e.printStackTrace();
}
for(MethodNode superMethod: (List<MethodNode>)cn.methods) {
boolean sameSignature = (superMethod.signature == null && method.signature == null) || superMethod.signature.equals(method.signature);
if(superMethod.name.equals(method.name) && sameSignature) {
System.out.println(superMethod.name + " exists in parent class(" + cn.name + ")");
exists = true;
break;
}
}
return exists || isSuperMethod(method, cn);
}
有没有一种更清洁或更快的方法来实现这一点,因为这似乎有点矫枉过正?