反编译Java:使用JD我得到一个空的枚举类

时间:2012-07-09 12:02:38

标签: java enums decompiling

我使用JD反编译了一组类。

在其中一个类中,引用了类中的公共字段。我用上面提到的字段打开课程。想象一下,当我遇到这个时,我感到惊讶:

public enum agw
{
}

我得出结论,反编译器没有成功地反编译某种类类型,可能是枚举。我遇到过其中的一些。

另一个例子:

public enum acf
{
  private final Class d;
  private final int e;
  private final acn f;
  private final boolean g;

  private acf(Class paramacn, int paramBoolean, acn arg5, boolean arg6)
  {
    d = paramacn;
    e = paramBoolean;
    Object localObject;
    f = localObject;
    boolean bool;
    g = bool;
  }

  public Class a() {
    return d;
  }

  public int b() {
    return e;
  }

  public acn c() {
    return f;
  }

  public boolean d() {
    return g;
  }
}

有谁知道这些课应该是什么?他们可以用原始形式代表什么?

感谢。

3 个答案:

答案 0 :(得分:2)

我认为您尝试反编译的课程是obfuscated。从下面的代码可以清楚地看出:

private final Class d;
  private final int e;
  private final acn f;
  private final boolean g;

  private acf(Class paramacn, int paramBoolean, acn arg5, boolean arg6)
  {
    d = paramacn;
    e = paramBoolean;
    Object localObject;
    f = localObject;
    boolean bool;
    g = bool;
  }
  • 程序员可能故意模糊代码以隐藏其目的(通过默默无闻的安全性)或其逻辑来防止篡改,阻止逆向工程,或者作为阅读源代码的人的谜题或娱乐挑战。

如果您真的想要访问代码,请与所有者联系。否则,很难理解混淆代码。

答案 1 :(得分:2)

嗯,我相信这实际上是预期的行为,因为jad只支持(正确)高达1.4的Java版本。枚举在Java 1.5中引入。这可以解释一些事情。

答案 2 :(得分:1)

在反编译时,您应该使用多个反编译器。反编译器A可能会成功做某事并在另一件事情上反编译B。因此,将它们结合使用可以帮助您更轻松地完成整个画面。