Hallo Thomas,
kann mir einer dieses schöne japh erklären?
In der Tat, da kennt jemand Perl _sehr_ genau. Cool. Wer ist der
Autor?
$_ = q *4a75737420616e6f74686572205065726c204861636b65720a*;
Hier wird codiert 'Just Another Perl Hacker' gespeichert.
for ($*=******;$**=******;$**=******) {$**=*******s*..*qq}
$*=****** setzt $* auf 1. Bei der Ausfuehrung von $**=****** behaelt
$* den aktuellen Wert. Dann wird mit { der Anfang der Schleife
eingeleitet. Jetzt wirds komplizierter. Die Schleife wird eroeffnet
und es wird $* wieder multipliziert, allerdings unter anderem mit
dem Ergebnis einer Suche-und-Ersetzen-Aktion, die mit dem s
eingeleitet wird. Dabei werden immer zwei Zeichen (..) ersetzt durch
einen durch den Quoting-Operator qq eingeleiteten String. Der
Quoting-Begrenzer ist dabei das Zeichen '}'.
print chr 0x$& and q
qq}*excess********}
Hier wird der String dann fortgesetzt. Der String, der fuer die zwei
Zeichen zusammengesetzt wird, ist etwa so aufgebaut:
print chr 0x<zeichen1><zeichen2> and q
qq
So, und jetzt wird ein netter Trick angewandt: Perl ist relativ
unempfindlich, was das Doppelt-definieren von Modifiern fuer Regexe
angeht. Die Ausnahme bildet das e-Flag. Wird das e-Flag doppelt
genannt, so wird zuerst der Esetzungs-RegEx-Inhalt ausgefuehrt (in diesem Fall das q, was den oben erwaehnten Text ergibt) und fuehrt
dieses Ergebnis dann aus. Das heisst, es wird eine &&-Verknuepfung
mit jeweils zwei der Zeichen gemacht. Das ergibt die Dekodierung zu
dem 'Just another Perl Hacker'. Ich schreibe das ganze mal in einem
verstaendlicheren Code:
$_ = q *4a75737420616e6f74686572205065726c204861636b65720a*;
while(m/(..)/g) {
print "\nq" && chr(eval("0x$1"));
}
Wie gesagt, ziemlich cool gemacht :-)
Grüße,
CK