这个有效的Java代码怎么样? (混淆的Java)

时间:2016-04-24 14:29:52

标签: java obfuscation deobfuscation

此代码看起来显然不正确,但它很高兴地编译并在我的机器上运行。谁能解释一下这是如何工作的?例如,什么使")"课名有效后?散落的随机词怎么样?

class M‮{public static void main(String[]a‭){System.out.print(new char[]{'H','e','l','l','o',' ','W','o','r','l','d','!'});}}

在线测试:https://ideone.com/t1W5Vm
资料来源:https://codegolf.stackexchange.com/a/60561

3 个答案:

答案 0 :(得分:7)

解读正在发生的事情的一种方法是逐个字符地查看程序(demo)。

您可能会发现位置{{shoppingCart.totalCost() | number:2 }} 7中的字符是特殊的UNICODE字符42(从右到左的顺序)和RLO(从左到右)正确的顺序)字符。

删除它们后,程序开始显示正常:

LRO

混淆程序编译的原因是Java编译器将这些特殊字符忽略为格式字符

答案 1 :(得分:1)

这是有效的java代码,但它使用了阿拉伯语"对齐"不可见的零宽度ubicode字符。尝试将光标放在文本中,然后按向右箭头。 M" M" M"" M"和")",和一个" char []"和" a []"。

我尝试格式化代码,但在导航中只是令人沮丧。

答案 2 :(得分:1)

您可以在源中找到两个unicode序列

0xE2 0x80 0xAE http://www.fileformat.info/info/unicode/char/202e/index.htm

0xE2 0x80 0xAD http://www.fileformat.info/info/unicode/char/202d/index.htm

有效地写作部分: 从右到左{public static void main(String[]a