java反编译器

时间:2012-03-27 15:47:53

标签: java decompiler

你好,我对这一切都不熟悉,但我想知道:你知道有很多反编译器用于将.class文件反编译为.java文件。我真的很想知道反编译器背后的逻辑是什么?我知道当我们编译java代码时,首先将它转换为字节代码然后转换为机器代码。我认为反编译器将字节码转换为java代码。实际上,我想知道反编译工程中的反编译器是否只是一个简单的解密?如果是这样,怎么办?谢谢你的答案..

2 个答案:

答案 0 :(得分:2)

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

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

例如(使用伪java字节码)

push int 5;
push int 10;
add int
store int local 4;

大致会转化为

int (the fourth local "something") = 5 + 10;

反编译器尝试将字节码中的模式匹配到java源代码中的可能的结构,这将生成相同的字节码。有时反向映射难以置信,但使用Java非常容易。

毋庸置疑,在编译过程中会丢失一些信息。正确操作并不总是需要本地变量名(因此可能会丢弃它们)。评论通常也不存在。通常不需要参数名称。反向程序仅在功能上与其原始程序类似。

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

  1. 测试未知软件,注意它的行为方式。
  2. 编写捕获未知软件所需行为特征的文档(或单元测试)。
  3. 创建一个新的软件,通过捕获的测试。
  4. 如您所见,使用此技术无需复制原始来源。事实上,为了确保不能直接复制,通常步骤3中涉及的人与第1步和第2步中涉及的人不同。

答案 1 :(得分:-1)

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