混淆代码中包含相同的成员变量名(Obfuscated code contains same memb

2019-10-20 16:00发布

我有一个模糊的罐子是在Tomcat中我的机器上部署应用程序的一部分。 该瓶由具有相同的变量名有些怪异的代码。 我为了反编译代码中使用jshrink。

  static private org.apache.commons.logging.Log a;
  private org.springframework.context.MessageSource a;
  private org.springframework.context.support.MessageSourceAccessor a;
  static private LicenseBean a;
  static private ThreadLocal a;
  private javax.servlet.ServletContext a;
  private String a;

  public LicenseBean() {
    a = null;
    a = null;
    a = this;
  }

它是用反编译程序的问题吗? 我的问题是如何处理JVM这如果编译过程是正确的?

Answer 1:

一些混淆器使用控制符号进行标识难以读取。 这涉及特别是在代码被打印到后者解释这些符号不是打印他们的逃脱图标的控制台的情况。 它因此可以认为这些名称实际上是模糊的,例如:

U+0061 U+200B * n

其中U+0061表示aU+200B是便要承担的倍递增的量对于每个的零长度宽度符号n标识符。 在一个正常的编辑器,所有的标识符随后将显示为a

在一般情况下,Java字节码不允许重复标识一类的领域,但它允许这是不正常的合法的Java源代码的标识符。 如果你的代码运行,Unicode的理论是最有可能的解释。 也许你的反编译器也错过这些字符或他们甚至不投入的源代码。 尝试读取字节代码( javap带,其显示不可见的Unicode来验证这个理论的编辑以上类文件的输出)。



Answer 2:

该代码是无效的Java代码,它有可能jshrink没能正确编译代码,通常反编译器的行为是基于尽力而为的技术。

尝试使用它来编译CFR ,这是一个美妙的Java反编译器,通常会产生有效的代码。



文章来源: Obfuscated code contains same member variable names