Christian Kruse: JAPH

Beitrag lesen

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

--
Q: God, root, what's the difference?
A: God is merciful.
http://wwwtech.de/