问题描述
我正在尝试反编译/重新编译混淆的Java程序。从反编译的源代码中,混淆器似乎已成功调用了类if
:
public class hX extends il implements ciS {
...
private bQk Llm = bQk.DwB();
private final CAR lTV = new if(this);
private final TYo RtQ = new ig(this);
private final TYo G2Z = new ih(this);
...
}
现在尝试重新编译此类当然会导致错误:
[javac] Compiling 1 source file to /home/qdii/cld/dev/bar/build/classes
[javac] /home/qdii/cld/dev/bar/src/hX.java:53: error: <identifier> expected
[javac] private final CAR lTV = new if(this);
有没有办法告诉Java编译器接受if
作为类名?否则,我有什么选择?重命名该类并找到对该类的所有引用?
解决方法
Java源代码可能具有该约束,但是字节码和类加载器不在乎。
由编译器强制执行。如果您使用javac
或manipulate or generate some bytecode以外的其他编译器,则有可能执行通常不可能完成的任务。
这就是混淆器可能要做的。
推测混淆器正在利用这种可能性使混淆变得更加困难或完全失败。基本上,您遇到的问题很可能是设计使然。
有没有办法告诉Java编译器接受是否作为类名?
不。
否则,我有什么选择?重命名课程并找到所有 引用吗?
是的。