是否可能使用特定的java代码使java反编译器崩溃?

是否可能使用特定的java代码使java反编译器崩溃?,java,decompiling,Java,Decompiling,正如标题所说,由于只使用Java代码,所以没有字节码,是否有可能使大多数通用Java反编译器崩溃,比如说通过谷歌搜索“Java反编译器”找到的那些 我知道这不会阻止人们构建一个特定的反编译器来解决这个问题,但它肯定会让人们远离简单的反编译文件 我一直在想下面这段愚蠢的代码,我希望在生产中永远不会遇到它: final public class X { //... interesting stuff @Override public String toString() {

正如标题所说,由于只使用Java代码,所以没有字节码,是否有可能使大多数通用Java反编译器崩溃,比如说通过谷歌搜索“Java反编译器”找到的那些

我知道这不会阻止人们构建一个特定的反编译器来解决这个问题,但它肯定会让人们远离简单的反编译文件

我一直在想下面这段愚蠢的代码,我希望在生产中永远不会遇到它:

final public class X {
    //... interesting stuff

    @Override
    public String toString() {
        return toString();
    }
}

例如,这可能是针对想要打印出您的对象的人的一种可能的对策。

这取决于实现。如果他们无法识别最新的字节码指令,它可能会崩溃;如果他们无法确定将字节码指令反编译到什么位置,它可能会崩溃。然而,根据我的经验,当反编译器无法确定将字节码反编译到什么位置时,他们将简单地转储他们在已反编译的其余Java源代码中无法确定的字节码。尝试了解这一点的建议是反编译最初使用另一种JVM语言(如Scala或Clojure)编写的程序。

那么,当您使用您提到的这些反编译器进行反编译时,会发生什么情况?不管概念证明示例如何,为什么不测试您的对策理论?反编译器不会执行您的代码,所以我认为这不太可能。也许如果你使用了最新java标准中的一些深奥语法,反编译器在一段时间内就赶不上了。我怀疑你能用这种方式“崩溃”反编译器,除非你只是被一个彻头彻尾的错误绊倒。我可以想象,一个半途而废的反编译器会容忍它无法消化的东西(因为你会得到一些看起来很糟糕的模糊字节码)。你可以(几乎?)总是使用
javap
来查看字节码。你为什么要隐瞒什么呢?你只会提高标准,但最终会有人发现你想隐藏什么。。。