Ich habe gerade angefangen, Java zu lernen.
Mein Freund, der mir beim Lernen hilft, hat mir das gerade geschickt und gesagt: "Finde das heraus".
Leider kann ich das nicht lesen. Es sieht aus wie Perl für mich.
class _{_ _;_(){_=this;}}
Was heißt das?
Antworten:
_
ist der Klassenname. Es ist sehr verwirrend, aber es funktioniert!Mit der Klasse umbenannt:
Und aufgeräumt:
Und Sie können mit dieser seltsamen Benennung verrückt werden
:)
Tatsächlich wird Unicode sogar unterstützt, daher gilt dies:
quelle
get crazy
Beispiel gibt es nur wenige Fehler . (1) Sie haben vergessen, nach____=__
(zweimal) ein Semikolon hinzuzufügen. (2) Wenn Sie versuchen, die_
Methode zu überladen , müssen Sie auch den Typ übergeben, so_(___)
sollte es sein_(_ ___)
. So kann es aussehenclass _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}
. Warte eine Minute. Habe ich gerade Unterstriche getestet? Es ist Zeit für eine Bremse._
ist der Klassenname, der Unterstrich ist ein gültiger Java-Variablenname. Sie müssen nur Ihren Code einrücken, um ihn zu deobfuscieren:Mögen:
Edit: danke an @Daniel Fischer
Zusammenfassung
_
ist ein Klassenname zB beiclass _{
_
ist ein Klassenmitgliedsname, zB bei_ _;
und_=this
_
ist ein Konstruktorname zB bei_()
Denken Sie daran: Java verwendet sechs verschiedene Namespaces:
quelle
class FOO { FOO FOO; }
funktioniert.data Foo = Foo | Bar Int
funktionieren. Es kann natürlich nur in Sprachen funktionieren, in denen Sie die Kategorie eines Bezeichners herausfinden können, von wo aus er erscheint.Nun, das ist ein gutes Beispiel. Mit Java können Unicodes Bezeichner sein, sodass Sie Folgendes schreiben können:
hier ist der Klassenname c 'ⲥ' (U + 2CA5 COPTIC SMALL LETTER SIMA) und
Objektname ist 's' (U + 0455 CYRILLIC SMALL LETTER DZE).
quelle
class
, es ist ein Schlüsselwort.'class'
. Wie ich bereits erwähnt habe,'claѕѕ'
hat dieser Objektname'ss'
keine ASCII-Zeichen. Der Name des Objekts lautetclaѕѕ
also,cla\u0455\u0455'
ich denke, dies klärt Missverständnisse. :)