解密的java类有一些特殊的字符

dev*_*per 3 java decompiling

我反编译了一些java类,我得到一个特殊字符的源:

this.val$b.dispose();
this.val$domainLabel.setText((String)domains_config.get("description"));
Run Code Online (Sandbox Code Playgroud)

这是什么意思:this.val$b

Jes*_*own 7

根据Java规范(请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/lexical.html#3.8),$是标识符中的有效值.但请注意,"$字符应仅用于机械生成的源代码,或者很少用于访问旧系统上的预先存在的名称."

在反编译代码中看到变量名中的美元符号有两个常见原因:

1.您的源代码包含一个内部类(可能,但不一定是匿名的),在这种情况下,内部类的内容将具有变量和构造函数名称outerclass$innerclass.(参见http://docstore.mik.ua/orelly/java/exp/ch05_09.htm中有关内部类如何工作的部分).如果该类是匿名的,则名称将具有命名方案/表单,如outerclass $,后跟外部类$ 1,依此类推

2.代码已通过混淆器运行.混淆器符合"机械生成"源代码的标准,因此它可以在ame中使用美元符号.一个例子是RetroGuard,它在他们网站FAQ中解释了在变量和类名中使用$的标准.从本质上讲,混淆器使用$作为消歧器,并使用生成的名称重命名类或变量(通常在可能的情况下使用单个字符字母以最小化代码大小),重命名的内容和不重命名的内容取决于变量的范围等.

在您的特定示例中,val $ b看起来像是可能是已被混淆的变量名称.