java反编译器

java反编译器,java,decompiler,Java,Decompiler,您好,我对这一切都不太熟悉,但我想知道:正如您所知,java有许多反编译器可以将.class文件反编译为.java文件。我真想知道反编译器背后的逻辑是什么?我知道当我们编译java代码时,首先它被转换成字节码,然后是机器码。我认为反编译器将字节码转换为java代码。实际上,我想知道反编译器是逆向工程的一部分,还是只是一个简单的解密?如果是,如何做?感谢您的回答。反编译器非常适合使用您没有源代码的库。Eclipse有一个很好的插件可以自动执行此操作。编译java代码时,它会转换为字节码。它不会转换

您好,我对这一切都不太熟悉,但我想知道:正如您所知,java有许多反编译器可以将.class文件反编译为.java文件。我真想知道反编译器背后的逻辑是什么?我知道当我们编译java代码时,首先它被转换成字节码,然后是机器码。我认为反编译器将字节码转换为java代码。实际上,我想知道反编译器是逆向工程的一部分,还是只是一个简单的解密?如果是,如何做?感谢您的回答。

反编译器非常适合使用您没有源代码的库。Eclipse有一个很好的插件可以自动执行此操作。

编译java代码时,它会转换为字节码。它不会转换为机器代码

当您阅读足够多的java字节码时,您可以很容易地猜出源代码可能是什么样子。有些部分无法重建,但许多部分可以重建

例如(使用伪java字节码)

将大致转化为

int (the fourth local "something") = 5 + 10;
反编译器尝试将字节码中的模式与java源代码中可能的结构相匹配,从而生成相同的字节码。有时,反向映射非常困难,但使用Java则非常容易

不用说,一些信息在编译过程中丢失了。正确的操作并不总是需要局部变量名(因此它们可能会被丢弃)。评论通常也不存在。通常不需要参数名。反向程序仅在功能上与原始程序相似

逆向工程是一个应用松散的术语,它不仅仅包括反编译。反编译被认为是复制,而一些反向工程技术不被认为是复制。洁净室逆向工程包括

  • 测试未知软件,注意其行为
  • 编写文档(或单元测试),以捕获未知软件所需的行为特征
  • 创建一个新的软件,通过捕获的测试

  • 如您所见,使用此技术不会复制原始源。事实上,为了确保不能声称直接复制,通常步骤3中涉及的人与步骤1和步骤2中涉及的人不同。

    对不起,这不是答案:)
    int (the fourth local "something") = 5 + 10;